diff --git a/build.gradle b/build.gradle index bd386126f..2817f3c3c 100644 --- a/build.gradle +++ b/build.gradle @@ -102,6 +102,13 @@ processResources { } } +// add AT to meta-inf +jar { + manifest { + attributes 'FMLAT': 'HBM_at.cfg' + } +} + task version { doFirst { println project.version diff --git a/gradle.properties b/gradle.properties index 993e781e8..cf2273c3a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,6 +1,6 @@ mod_version=1.0.27 # Empty build number makes a release type -mod_build_number=4551 +mod_build_number=4562 credits=HbMinecraft, rodolphito (explosion algorithms), grangerave (explosion algorithms),\ \ Hoboy (textures, models), Doctor17 (russian localization), Drillgon200 (effects, models, porting),\ diff --git a/src/main/java/api/hbm/block/IToolable.java b/src/main/java/api/hbm/block/IToolable.java index 3a2a87931..429a14d59 100644 --- a/src/main/java/api/hbm/block/IToolable.java +++ b/src/main/java/api/hbm/block/IToolable.java @@ -12,6 +12,7 @@ public interface IToolable { HAND_DRILL, DEFUSER, WRENCH, - TORCH + TORCH, + BOLT } } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 3d48508ec..b3b3d3e51 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -293,6 +293,7 @@ public class ModBlocks { public static Block deco_rbmk_smooth; public static Block deco_emitter; + public static Block part_emitter; public static Block deco_loot; public static Block bobblehead; public static Block snowglobe; @@ -775,6 +776,7 @@ public class ModBlocks { public static Block conveyor_lift; public static Block crane_extractor; public static Block crane_inserter; + public static Block crane_grabber; public static Block crane_router; public static Block crane_boxer; public static Block crane_unboxer; @@ -821,6 +823,7 @@ public class ModBlocks { public static Block struct_soyuz_core; public static Block struct_iter_core; public static Block struct_plasma_core; + public static Block struct_watz_core; public static Block factory_titanium_hull; @Deprecated public static Block factory_titanium_furnace; @@ -848,8 +851,9 @@ public class ModBlocks { public static Block iter; public static Block plasma_heater; - + public static Block watz; + public static Block watz_pump; public static Block watz_element; public static Block watz_control; @@ -1463,6 +1467,7 @@ public class ModBlocks { deco_rbmk_smooth = new BlockGeneric(Material.iron).setBlockName("deco_rbmk_smooth").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":rbmk/rbmk_top"); deco_emitter = new BlockEmitter().setBlockName("deco_emitter").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":emitter"); + part_emitter = new PartEmitter().setBlockName("part_emitter").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(20.0F).setBlockTextureName(RefStrings.MODID + ":part_top"); deco_loot = new BlockLoot().setBlockName("deco_loot").setCreativeTab(null).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); bobblehead = new BlockBobble().setBlockName("bobblehead").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); snowglobe = new BlockSnowglobe().setBlockName("snowglobe").setCreativeTab(MainRegistry.blockTab).setHardness(0.0F).setResistance(0.0F).setBlockTextureName(RefStrings.MODID + ":glass_boron"); @@ -1900,10 +1905,11 @@ public class ModBlocks { conveyor_lift = new BlockConveyorLift().setBlockName("conveyor_lift").setHardness(2.0F).setResistance(2.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":conveyor"); crane_extractor = new CraneExtractor().setBlockName("crane_extractor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_inserter = new CraneInserter().setBlockName("crane_inserter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + crane_grabber = new CraneGrabber().setBlockName("crane_grabber").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_router = new CraneRouter().setBlockName("crane_router").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_boxer = new CraneBoxer().setBlockName("crane_boxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); crane_unboxer = new CraneUnboxer().setBlockName("crane_unboxer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); - crane_splitter = new CraneSplitter().setBlockName("crane_splitter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); + crane_splitter = new CraneSplitter().setBlockName("crane_splitter").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":crane_side"); fan = new MachineFan().setBlockName("fan").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); chain = new BlockChain(Material.iron).setBlockName("dungeon_chain").setHardness(0.25F).setResistance(2.0F).setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":chain"); @@ -1945,6 +1951,7 @@ public class ModBlocks { struct_soyuz_core = new BlockSoyuzStruct(Material.iron).setBlockName("struct_soyuz_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.missileTab).setBlockTextureName(RefStrings.MODID + ":struct_soyuz_core"); struct_iter_core = new BlockITERStruct(Material.iron).setBlockName("struct_iter_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_iter_core"); struct_plasma_core = new BlockPlasmaStruct(Material.iron).setBlockName("struct_plasma_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_plasma_core"); + struct_watz_core = new BlockWatzStruct(Material.iron).setBlockName("struct_watz_core").setLightLevel(1F).setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":struct_watz_core"); factory_titanium_hull = new BlockGeneric(Material.iron).setBlockName("factory_titanium_hull").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":factory_titanium_hull"); factory_titanium_furnace = new FactoryHatch(Material.iron).setBlockName("factory_titanium_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":factory_titanium_furnace"); @@ -1974,11 +1981,12 @@ public class ModBlocks { watz_element = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_element_top").setBlockName("watz_element").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_element_side"); watz_control = new BlockPillar(Material.iron, RefStrings.MODID + ":watz_control_top").setBlockName("watz_control").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_control_side"); watz_cooler = new BlockGeneric(Material.iron).setBlockName("watz_cooler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_cooler"); - watz_end = new BlockGeneric(Material.iron).setBlockName("watz_end").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_casing"); + watz_end = new BlockBoltable(Material.iron).setBlockName("watz_end").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_casing"); watz_hatch = new WatzHatch(Material.iron).setBlockName("watz_hatch").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_hatch"); watz_conductor = new BlockCableConnect(Material.iron).setBlockName("watz_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_conductor_top"); watz_core = new WatzCore(Material.iron).setBlockName("watz_core").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":watz_computer"); watz = new Watz().setBlockName("watz").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + watz_pump = new WatzPump().setBlockName("watz_pump").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); fwatz_conductor = new BlockPillar(Material.iron, RefStrings.MODID + ":block_combine_steel").setBlockName("fwatz_conductor").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fwatz_conductor_side"); fwatz_cooler = new BlockPillar(Material.iron, RefStrings.MODID + ":fwatz_cooler_top").setBlockName("fwatz_cooler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":fwatz_cooler"); @@ -2585,6 +2593,7 @@ public class ModBlocks { GameRegistry.registerBlock(deco_beryllium, deco_beryllium.getUnlocalizedName()); GameRegistry.registerBlock(deco_asbestos, deco_asbestos.getUnlocalizedName()); GameRegistry.registerBlock(deco_emitter, ItemBlockBase.class, deco_emitter.getUnlocalizedName()); + GameRegistry.registerBlock(part_emitter, ItemBlockBase.class, part_emitter.getUnlocalizedName()); GameRegistry.registerBlock(deco_loot, deco_loot.getUnlocalizedName()); GameRegistry.registerBlock(bobblehead, ItemBlockMeta.class, bobblehead.getUnlocalizedName()); GameRegistry.registerBlock(snowglobe, ItemBlockMeta.class, snowglobe.getUnlocalizedName()); @@ -3095,6 +3104,7 @@ public class ModBlocks { GameRegistry.registerBlock(crane_extractor, crane_extractor.getUnlocalizedName()); GameRegistry.registerBlock(crane_inserter, crane_inserter.getUnlocalizedName()); + GameRegistry.registerBlock(crane_grabber, crane_grabber.getUnlocalizedName()); GameRegistry.registerBlock(crane_router, crane_router.getUnlocalizedName()); GameRegistry.registerBlock(crane_boxer, crane_boxer.getUnlocalizedName()); GameRegistry.registerBlock(crane_unboxer, crane_unboxer.getUnlocalizedName()); @@ -3213,6 +3223,7 @@ public class ModBlocks { GameRegistry.registerBlock(struct_soyuz_core, struct_soyuz_core.getUnlocalizedName()); GameRegistry.registerBlock(struct_iter_core, struct_iter_core.getUnlocalizedName()); GameRegistry.registerBlock(struct_plasma_core, struct_plasma_core.getUnlocalizedName()); + GameRegistry.registerBlock(struct_watz_core, struct_watz_core.getUnlocalizedName()); //Absorbers GameRegistry.registerBlock(absorber, absorber.getUnlocalizedName()); @@ -3252,11 +3263,12 @@ public class ModBlocks { GameRegistry.registerBlock(watz_element, watz_element.getUnlocalizedName()); GameRegistry.registerBlock(watz_control, watz_control.getUnlocalizedName()); GameRegistry.registerBlock(watz_cooler, watz_cooler.getUnlocalizedName()); - GameRegistry.registerBlock(watz_end, watz_end.getUnlocalizedName()); + register(watz_end); GameRegistry.registerBlock(watz_hatch, watz_hatch.getUnlocalizedName()); GameRegistry.registerBlock(watz_conductor, watz_conductor.getUnlocalizedName()); GameRegistry.registerBlock(watz_core, watz_core.getUnlocalizedName()); GameRegistry.registerBlock(watz, watz.getUnlocalizedName()); + GameRegistry.registerBlock(watz_pump, watz_pump.getUnlocalizedName()); GameRegistry.registerBlock(fwatz_conductor, fwatz_conductor.getUnlocalizedName()); GameRegistry.registerBlock(fwatz_scaffold, fwatz_scaffold.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/blocks/bomb/BlockTaint.java b/src/main/java/com/hbm/blocks/bomb/BlockTaint.java index 469bd6430..3d24353aa 100644 --- a/src/main/java/com/hbm/blocks/bomb/BlockTaint.java +++ b/src/main/java/com/hbm/blocks/bomb/BlockTaint.java @@ -6,7 +6,7 @@ import java.util.Random; import com.hbm.blocks.ModBlocks; import com.hbm.entity.mob.EntityTaintCrab; -import com.hbm.entity.mob.EntityTaintedCreeper; +import com.hbm.entity.mob.EntityCreeperTainted; import com.hbm.entity.mob.EntityTeslaCrab; import com.hbm.potion.HbmPotion; @@ -186,7 +186,7 @@ public class BlockTaint extends Block/*Container*/ { } if(entity instanceof EntityCreeper) { - EntityTaintedCreeper creep = new EntityTaintedCreeper(world); + EntityCreeperTainted creep = new EntityCreeperTainted(world); creep.setLocationAndAngles(entity.posX, entity.posY, entity.posZ, entity.rotationYaw, entity.rotationPitch); if(!world.isRemote) { diff --git a/src/main/java/com/hbm/blocks/bomb/Landmine.java b/src/main/java/com/hbm/blocks/bomb/Landmine.java index 6d43d6106..85ebdc82c 100644 --- a/src/main/java/com/hbm/blocks/bomb/Landmine.java +++ b/src/main/java/com/hbm/blocks/bomb/Landmine.java @@ -25,7 +25,6 @@ import net.minecraft.world.World; public class Landmine extends BlockContainer implements IBomb { public static boolean safeMode = false; - static Random rand = new Random();; public Landmine(Material p_i45386_1_) { super(p_i45386_1_); @@ -100,18 +99,23 @@ public class Landmine extends BlockContainer implements IBomb { } if(flag) { - this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); - world.setBlockToAir(x, y, z); + + if(!safeMode) { + explode(world, x, y, z); + } else { + world.setBlockToAir(x, y, z); + } } } - public void breakBlock(World world, int x, int y, int z, Block block, int i) { + @Override + public void onBlockDestroyedByPlayer(World world, int x, int y, int z, int meta) { if(!safeMode) { explode(world, x, y, z); } - super.breakBlock(world, x, y, z, block, i); + super.onBlockDestroyedByPlayer(world, x, y, z, meta); } public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float fx, float fy, float fz) { diff --git a/src/main/java/com/hbm/blocks/generic/BlockBoltable.java b/src/main/java/com/hbm/blocks/generic/BlockBoltable.java new file mode 100644 index 000000000..87ff806ed --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/BlockBoltable.java @@ -0,0 +1,72 @@ +package com.hbm.blocks.generic; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.blocks.BlockBase; +import com.hbm.blocks.IBlockMulti; +import com.hbm.blocks.ILookOverlay; +import com.hbm.inventory.RecipesCommon.AStack; +import com.hbm.items.ModItems; +import com.hbm.util.I18nUtil; + +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.client.Minecraft; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; +import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; + +public class BlockBoltable extends BlockBase implements IToolable, ILookOverlay, IBlockMulti { + + public BlockBoltable(Material mat) { + super(mat); + } + + @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.BOLT) return false; + + return true; + } + + public List getMaterials(int meta) { + List list = new ArrayList(); + + return list; + } + + @Override + @SideOnly(Side.CLIENT) + public void printHook(Pre event, World world, int x, int y, int z) { + + ItemStack held = Minecraft.getMinecraft().thePlayer.getHeldItem(); + if(held == null || held.getItem() != ModItems.boltgun) return; + + List text = new ArrayList(); + text.add(EnumChatFormatting.GOLD + "Requires:"); + List materials = getMaterials(world.getBlockMetadata(x, y, z)); + + for(AStack stack : materials) { + try { + ItemStack display = stack.extractForCyclingDisplay(20); + text.add("- " + display.getDisplayName() + " x" + display.stackSize); + } catch(Exception ex) { + text.add(EnumChatFormatting.RED + "- ERROR"); + } + } + + if(!materials.isEmpty()) { + ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); + } + } + + @Override + public int getSubCount() { + return 1; + } +} diff --git a/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java index c92ec4f06..f8beed00c 100644 --- a/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java +++ b/src/main/java/com/hbm/blocks/generic/BlockStalagmite.java @@ -45,6 +45,11 @@ public class BlockStalagmite extends BlockEnumMulti { return null; } + + @Override + public int damageDropped(int meta) { + return 0; + } public static int getMetaFromResource(int meta) { return meta; diff --git a/src/main/java/com/hbm/blocks/generic/Guide.java b/src/main/java/com/hbm/blocks/generic/Guide.java index b7a5489a7..744a2d9cd 100644 --- a/src/main/java/com/hbm/blocks/generic/Guide.java +++ b/src/main/java/com/hbm/blocks/generic/Guide.java @@ -94,37 +94,6 @@ public class Guide extends Block implements ILookOverlay { return null; } - private void setDefaultDirection(World world, int x, int y, int z) { - if(!world.isRemote) - { - Block block1 = world.getBlock(x, y, z - 1); - Block block2 = world.getBlock(x, y, z + 1); - Block block3 = world.getBlock(x - 1, y, z); - Block block4 = world.getBlock(x + 1, y, z); - - byte b0 = 3; - - if(block1.func_149730_j() && !block2.func_149730_j()) - { - b0 = 3; - } - if(block2.func_149730_j() && !block1.func_149730_j()) - { - b0 = 2; - } - if(block3.func_149730_j() && !block4.func_149730_j()) - { - b0 = 5; - } - if(block4.func_149730_j() && !block3.func_149730_j()) - { - b0 = 4; - } - - world.setBlockMetadataWithNotify(x, y, z, b0, 2); - } - } - @Override public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack itemStack) { int i = MathHelper.floor_double(player.rotationYaw * 4.0F / 360.0F + 0.5D) & 3; diff --git a/src/main/java/com/hbm/blocks/generic/PartEmitter.java b/src/main/java/com/hbm/blocks/generic/PartEmitter.java new file mode 100644 index 000000000..db823972c --- /dev/null +++ b/src/main/java/com/hbm/blocks/generic/PartEmitter.java @@ -0,0 +1,124 @@ +package com.hbm.blocks.generic; + +import java.util.List; + +import com.hbm.blocks.ITooltipProvider; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; +import com.hbm.util.ParticleUtil; + +import api.hbm.block.IToolable; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.network.NetworkManager; +import net.minecraft.network.Packet; +import net.minecraft.network.play.server.S35PacketUpdateTileEntity; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.world.World; + +public class PartEmitter extends BlockContainer implements IToolable, ITooltipProvider { + + public PartEmitter() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityPartEmitter(); + } + + @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.HAND_DRILL) { + TileEntityPartEmitter te = (TileEntityPartEmitter) world.getTileEntity(x, y, z); + te.effect = (te.effect + 1) % te.effectCount; + te.markDirty(); + return true; + } + + return false; + } + + public static class TileEntityPartEmitter extends TileEntity { + + public static final int range = 150; + public int effect = 0; + public static final int effectCount = 4; + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + double x = xCoord + 0.5; + double y = yCoord + 0.5; + double z = zCoord + 0.5; + NBTTagCompound data = new NBTTagCompound(); + + if(effect == 1) { + ParticleUtil.spawnGasFlame(worldObj, xCoord + worldObj.rand.nextDouble(), yCoord + 4.5 + worldObj.rand.nextDouble(), zCoord + worldObj.rand.nextDouble(), worldObj.rand.nextGaussian() * 0.2, 0.1, worldObj.rand.nextGaussian() * 0.2); + } + + if(effect == 2) { + data.setString("type", "tower"); + data.setFloat("lift", 5F); + data.setFloat("base", 0.25F); + data.setFloat("max", 5F); + data.setInteger("life", 560 + worldObj.rand.nextInt(20)); + data.setInteger("color",0x404040); + } + if(effect == 3) { + data.setString("type", "tower"); + data.setFloat("lift", 0.5F); + data.setFloat("base", 1F); + data.setFloat("max", 10F); + data.setInteger("life", 750 + worldObj.rand.nextInt(250)); + + x = xCoord + 0.5 + worldObj.rand.nextDouble() * 3 - 1.5; + y = yCoord + 1; + z = zCoord + 0.5 + worldObj.rand.nextDouble() * 3 - 1.5; + + } + + if(data.hasKey("type")) { + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, x, y, z), new TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range)); + } + } + } + + @Override + public Packet getDescriptionPacket() { + NBTTagCompound nbt = new NBTTagCompound(); + this.writeToNBT(nbt); + return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); + } + + @Override + public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { + this.readFromNBT(pkt.func_148857_g()); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.effect = nbt.getInteger("effect"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setInteger("effect", this.effect); + } + } + + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + list.add(EnumChatFormatting.GOLD + "Use hand drill to cycle special effects"); + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/blocks/machine/BlockITERStruct.java b/src/main/java/com/hbm/blocks/machine/BlockITERStruct.java index 2a909c4dd..c53723bc6 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockITERStruct.java +++ b/src/main/java/com/hbm/blocks/machine/BlockITERStruct.java @@ -17,9 +17,9 @@ public class BlockITERStruct extends BlockContainer { public TileEntity createNewTileEntity(World world, int meta) { return new TileEntityITERStruct(); } - - public boolean isOpaqueCube() { - - return false; - } + + @Override + public boolean isOpaqueCube() { + return false; + } } diff --git a/src/main/java/com/hbm/blocks/machine/BlockWatzStruct.java b/src/main/java/com/hbm/blocks/machine/BlockWatzStruct.java new file mode 100644 index 000000000..3e278f445 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/BlockWatzStruct.java @@ -0,0 +1,25 @@ +package com.hbm.blocks.machine; + +import com.hbm.tileentity.machine.TileEntityWatzStruct; + +import net.minecraft.block.BlockContainer; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; + +public class BlockWatzStruct extends BlockContainer { + + public BlockWatzStruct(Material mat) { + super(mat); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityWatzStruct(); + } + + @Override + public boolean isOpaqueCube() { + return false; + } +} diff --git a/src/main/java/com/hbm/blocks/machine/MachineFan.java b/src/main/java/com/hbm/blocks/machine/MachineFan.java index 33e9eaf2c..f9321d052 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineFan.java +++ b/src/main/java/com/hbm/blocks/machine/MachineFan.java @@ -3,7 +3,6 @@ package com.hbm.blocks.machine; import java.util.List; import api.hbm.block.IToolable; -import api.hbm.block.IToolable.ToolType; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.block.BlockContainer; @@ -133,9 +132,6 @@ public class MachineFan extends BlockContainer implements IToolable { if(meta == 4) world.setBlockMetadataWithNotify(x, y, z, 5, 3); if(meta == 5) world.setBlockMetadataWithNotify(x, y, z, 4, 3); - //TileEntityFan fan = (TileEntityFan) world.getTileEntity(x, y, z); - //fan.blockMetadata = -1; - return true; } } diff --git a/src/main/java/com/hbm/blocks/machine/Watz.java b/src/main/java/com/hbm/blocks/machine/Watz.java index 76350d2a2..46de57e92 100644 --- a/src/main/java/com/hbm/blocks/machine/Watz.java +++ b/src/main/java/com/hbm/blocks/machine/Watz.java @@ -1,12 +1,15 @@ package com.hbm.blocks.machine; import com.hbm.blocks.BlockDummyable; +import com.hbm.handler.MultiblockHandlerXR; +import com.hbm.tileentity.TileEntityProxyCombo; import com.hbm.tileentity.machine.TileEntityWatz; import net.minecraft.block.material.Material; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class Watz extends BlockDummyable { @@ -17,25 +20,55 @@ public class Watz extends BlockDummyable { @Override public TileEntity createNewTileEntity(World world, int meta) { - if(meta >= 12) - return new TileEntityWatz(); - + if(meta >= 12) return new TileEntityWatz(); + if(meta >= 6) return new TileEntityProxyCombo().inventory().fluid(); return null; } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - //return super.standardOpenBehavior(world, x, y, z, player, 0); - return false; + return super.standardOpenBehavior(world, x, y, z, player, 0); } @Override public int[] getDimensions() { - return new int[] {2, 0, 3, 3, 3, 3}; + return new int[] {2, 0, 3, 3, 1, 1}; } @Override public int getOffset() { return 3; } + + @Override + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + return super.checkRequirement(world, x, y, z, dir, o) && + MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 2, 2, 2, -2}, x, y, z, dir) && + MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 2, 2, -2, 2}, x, y, z, dir) && + MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 1, 1, 3, -3}, x, y, z, dir) && + MultiblockHandlerXR.checkSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 1, 1, -3, 3}, x, y, z, dir); + } + + @Override + public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) { + super.fillSpace(world, x, y, z, dir, o); + + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 2, 2, 2, -2}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 2, 2, -2, 2}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 1, 1, 3, -3}, this, dir); + MultiblockHandlerXR.fillSpace(world, x + dir.offsetX * o, y + dir.offsetY * o, z + dir.offsetZ * o, new int[]{2, 0, 1, 1, -3, 3}, this, dir); + + x += dir.offsetX * o; + z += dir.offsetZ * o; + + this.makeExtra(world, x + 2, y, z); + this.makeExtra(world, x - 2, y, z); + this.makeExtra(world, x, y, z + 2); + this.makeExtra(world, x, y, z - 2); + this.makeExtra(world, x + 2, y + 2, z); + this.makeExtra(world, x - 2, y + 2, z); + this.makeExtra(world, x, y + 2, z + 2); + this.makeExtra(world, x, y + 2, z - 2); + this.makeExtra(world, x, y + 2, z); + } } diff --git a/src/main/java/com/hbm/blocks/machine/WatzPump.java b/src/main/java/com/hbm/blocks/machine/WatzPump.java new file mode 100644 index 000000000..69405e861 --- /dev/null +++ b/src/main/java/com/hbm/blocks/machine/WatzPump.java @@ -0,0 +1,52 @@ +package com.hbm.blocks.machine; + +import com.hbm.blocks.BlockDummyable; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.material.Material; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class WatzPump extends BlockDummyable { + + public WatzPump() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + if(meta >= 12) return new TileEntityWatzPump(); + + return null; + } + + @Override + public int[] getDimensions() { + return new int[] {1, 0, 0, 0, 0, 0}; + } + + @Override + public int getOffset() { + return 0; + } + + @Override + public boolean isSideSolid(IBlockAccess world, int x, int y, int z, ForgeDirection side) { + int meta = world.getBlockMetadata(x, y, z); + return side == ForgeDirection.UP && meta == 1; + } + + public static class TileEntityWatzPump extends TileEntity { + @Override public boolean canUpdate() { return false; } + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() { return 65536.0D; } + AxisAlignedBB bb = null; + @Override public AxisAlignedBB getRenderBoundingBox() { + if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 1, yCoord, zCoord - 1, xCoord + 2, yCoord + 2, zCoord + 2); + return bb; + } + } +} diff --git a/src/main/java/com/hbm/blocks/network/BlockCable.java b/src/main/java/com/hbm/blocks/network/BlockCable.java index 92fc65684..60906e5fd 100644 --- a/src/main/java/com/hbm/blocks/network/BlockCable.java +++ b/src/main/java/com/hbm/blocks/network/BlockCable.java @@ -48,12 +48,12 @@ public class BlockCable extends BlockContainer { @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) { - boolean posX = Library.canConnect(world, x + 1, y, z, Library.NEG_X); - boolean negX = Library.canConnect(world, x - 1, y, z, Library.POS_X); - boolean posY = Library.canConnect(world, x, y + 1, z, Library.NEG_Y); - boolean negY = Library.canConnect(world, x, y - 1, z, Library.POS_Y); - boolean posZ = Library.canConnect(world, x, y, z + 1, Library.NEG_Z); - boolean negZ = Library.canConnect(world, x, y, z - 1, Library.POS_Z); + boolean posX = Library.canConnect(world, x + 1, y, z, Library.POS_X); + boolean negX = Library.canConnect(world, x - 1, y, z, Library.NEG_X); + boolean posY = Library.canConnect(world, x, y + 1, z, Library.POS_Y); + boolean negY = Library.canConnect(world, x, y - 1, z, Library.NEG_Y); + boolean posZ = Library.canConnect(world, x, y, z + 1, Library.POS_Z); + boolean negZ = Library.canConnect(world, x, y, z - 1, Library.NEG_Z); setBlockBounds(posX, negX, posY, negY, posZ, negZ); @@ -63,12 +63,12 @@ public class BlockCable extends BlockContainer { @Override public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) { - boolean posX = Library.canConnect(world, x + 1, y, z, Library.NEG_X); - boolean negX = Library.canConnect(world, x - 1, y, z, Library.POS_X); - boolean posY = Library.canConnect(world, x, y + 1, z, Library.NEG_Y); - boolean negY = Library.canConnect(world, x, y - 1, z, Library.POS_Y); - boolean posZ = Library.canConnect(world, x, y, z + 1, Library.NEG_Z); - boolean negZ = Library.canConnect(world, x, y, z - 1, Library.POS_Z); + boolean posX = Library.canConnect(world, x + 1, y, z, Library.POS_X); + boolean negX = Library.canConnect(world, x - 1, y, z, Library.NEG_X); + boolean posY = Library.canConnect(world, x, y + 1, z, Library.POS_Y); + boolean negY = Library.canConnect(world, x, y - 1, z, Library.NEG_Y); + boolean posZ = Library.canConnect(world, x, y, z + 1, Library.POS_Z); + boolean negZ = Library.canConnect(world, x, y, z - 1, Library.NEG_Z); setBlockBounds(posX, negX, posY, negY, posZ, negZ); } diff --git a/src/main/java/com/hbm/blocks/network/CableDiode.java b/src/main/java/com/hbm/blocks/network/CableDiode.java index da65eb314..6771ccf2d 100644 --- a/src/main/java/com/hbm/blocks/network/CableDiode.java +++ b/src/main/java/com/hbm/blocks/network/CableDiode.java @@ -12,6 +12,7 @@ import com.hbm.util.I18nUtil; import api.hbm.block.IToolable; import api.hbm.energy.IEnergyUser; import api.hbm.energy.IEnergyConnector.ConnectionPriority; +import api.hbm.energy.IEnergyConnectorBlock; import cpw.mods.fml.client.registry.RenderingRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -32,7 +33,7 @@ import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.common.util.ForgeDirection; -public class CableDiode extends BlockContainer implements ILookOverlay, IToolable, ITooltipProvider { +public class CableDiode extends BlockContainer implements IEnergyConnectorBlock, ILookOverlay, IToolable, ITooltipProvider { public CableDiode(Material mat) { super(mat); @@ -66,6 +67,11 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl world.setBlockMetadataWithNotify(x, y, z, l, 2); } + @Override + public boolean canConnect(IBlockAccess world, int x, int y, int z, ForgeDirection dir) { + return true; + } + @Override public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { @@ -179,6 +185,11 @@ public class CableDiode extends BlockContainer implements ILookOverlay, IToolabl } } } + + @Override + public boolean canConnect(ForgeDirection dir) { + return dir != getDir(); + } private boolean recursionBrake = false; private long subBuffer; diff --git a/src/main/java/com/hbm/blocks/network/CraneBoxer.java b/src/main/java/com/hbm/blocks/network/CraneBoxer.java index c9cd865bc..b884bd62f 100644 --- a/src/main/java/com/hbm/blocks/network/CraneBoxer.java +++ b/src/main/java/com/hbm/blocks/network/CraneBoxer.java @@ -2,7 +2,6 @@ package com.hbm.blocks.network; import com.hbm.lib.RefStrings; import com.hbm.tileentity.network.TileEntityCraneBoxer; -import com.hbm.tileentity.network.TileEntityCraneInserter; import api.hbm.conveyor.IConveyorItem; import api.hbm.conveyor.IConveyorPackage; @@ -81,7 +80,7 @@ public class CraneBoxer extends BlockCraneBase implements IEnterableBlock { @Override public int getComparatorInputOverride(World world, int x, int y, int z, int side) { - return Container.calcRedstoneFromInventory((TileEntityCraneInserter)world.getTileEntity(x, y, z)); + return Container.calcRedstoneFromInventory((TileEntityCraneBoxer)world.getTileEntity(x, y, z)); } @Override diff --git a/src/main/java/com/hbm/blocks/network/CraneGrabber.java b/src/main/java/com/hbm/blocks/network/CraneGrabber.java new file mode 100644 index 000000000..71372467b --- /dev/null +++ b/src/main/java/com/hbm/blocks/network/CraneGrabber.java @@ -0,0 +1,56 @@ +package com.hbm.blocks.network; + +import com.hbm.lib.RefStrings; +import com.hbm.tileentity.network.TileEntityCraneGrabber; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.block.material.Material; +import net.minecraft.client.renderer.texture.IIconRegister; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.IBlockAccess; +import net.minecraft.world.World; + +public class CraneGrabber extends BlockCraneBase { + + public CraneGrabber() { + super(Material.iron); + } + + @Override + public TileEntity createNewTileEntity(World world, int meta) { + return new TileEntityCraneGrabber(); + } + + @Override + @SideOnly(Side.CLIENT) + public void registerBlockIcons(IIconRegister iconRegister) { + super.registerBlockIcons(iconRegister); + this.iconDirectional = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_top"); + this.iconDirectionalUp = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_up"); + this.iconDirectionalDown = iconRegister.registerIcon(RefStrings.MODID + ":crane_grabber_side_down"); + this.iconOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_pull"); + this.iconSideOut = iconRegister.registerIcon(RefStrings.MODID + ":crane_side_pull"); + } + + @Override + public int getRotationFromSide(IBlockAccess world, int x, int y, int z, int side) { + int meta = world.getBlockMetadata(x, y, z); + + if(meta > 1 && side == 1) { + if(meta == 2) return 3; + if(meta == 3) return 0; + if(meta == 4) return 1; + if(meta == 5) return 2; + } + + return 0; + } + + @Override + public void breakBlock(World world, int x, int y, int z, Block block, int meta) { + this.dropContents(world, x, y, z, block, meta, 0, 11); + super.breakBlock(world, x, y, z, block, meta); + } +} diff --git a/src/main/java/com/hbm/blocks/network/CraneSplitter.java b/src/main/java/com/hbm/blocks/network/CraneSplitter.java index e0abc2450..11de7afda 100644 --- a/src/main/java/com/hbm/blocks/network/CraneSplitter.java +++ b/src/main/java/com/hbm/blocks/network/CraneSplitter.java @@ -28,9 +28,13 @@ public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnt @SideOnly(Side.CLIENT) public IIcon iconTopRight; @SideOnly(Side.CLIENT) public IIcon iconFrontLeft; @SideOnly(Side.CLIENT) public IIcon iconFrontRight; - @SideOnly(Side.CLIENT) public IIcon iconBottom; + @SideOnly(Side.CLIENT) public IIcon iconBackLeft; + @SideOnly(Side.CLIENT) public IIcon iconBackRight; + @SideOnly(Side.CLIENT) public IIcon iconLeft; + @SideOnly(Side.CLIENT) public IIcon iconRight; @SideOnly(Side.CLIENT) public IIcon iconBelt; @SideOnly(Side.CLIENT) public IIcon iconInner; + @SideOnly(Side.CLIENT) public IIcon iconInnerSide; public CraneSplitter() { super(Material.iron); @@ -55,7 +59,17 @@ public class CraneSplitter extends BlockDummyable implements IConveyorBelt, IEnt @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconRegister) { super.registerBlockIcons(iconRegister); + this.iconTopLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_top_left"); + this.iconTopRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_top_right"); + this.iconFrontLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_front_left"); + this.iconFrontRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_front_right"); + this.iconBackLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_back_left"); + this.iconBackRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_back_right"); + this.iconLeft = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_left"); + this.iconRight = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_right"); this.iconBelt = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_belt"); + this.iconInner = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_inner"); + this.iconInnerSide = iconRegister.registerIcon(RefStrings.MODID + ":crane_splitter_inner_side"); } public static int renderID = RenderingRegistry.getNextAvailableRenderId(); diff --git a/src/main/java/com/hbm/blocks/network/CraneUnboxer.java b/src/main/java/com/hbm/blocks/network/CraneUnboxer.java index 530a4b248..558de5654 100644 --- a/src/main/java/com/hbm/blocks/network/CraneUnboxer.java +++ b/src/main/java/com/hbm/blocks/network/CraneUnboxer.java @@ -12,6 +12,7 @@ import net.minecraft.block.Block; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.item.EntityItem; +import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.IBlockAccess; @@ -86,4 +87,14 @@ public class CraneUnboxer extends BlockCraneBase implements IEnterableBlock { } } } + + @Override + public boolean hasComparatorInputOverride() { + return true; + } + + @Override + public int getComparatorInputOverride(World world, int x, int y, int z, int side) { + return Container.calcRedstoneFromInventory((TileEntityCraneUnboxer)world.getTileEntity(x, y, z)); + } } diff --git a/src/main/java/com/hbm/crafting/MineralRecipes.java b/src/main/java/com/hbm/crafting/MineralRecipes.java index c35dedfb1..0f440dbe3 100644 --- a/src/main/java/com/hbm/crafting/MineralRecipes.java +++ b/src/main/java/com/hbm/crafting/MineralRecipes.java @@ -181,12 +181,12 @@ public class MineralRecipes { GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_pu238be, 6), new Object[] { ModItems.billet_pu238, ModItems.billet_pu238, ModItems.billet_pu238, ModItems.billet_beryllium, ModItems.billet_beryllium, ModItems.billet_beryllium })); GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_ra226be, 6), new Object[] { ModItems.billet_ra226, ModItems.billet_ra226, ModItems.billet_ra226, ModItems.billet_beryllium, ModItems.billet_beryllium, ModItems.billet_beryllium })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_bismuth, 1), new Object[] { "nuggetZirconium", "nuggetZirconium", "nuggetZirconium", "nuggetUranium", "nuggetPlutonium241", ModItems.nugget_bismuth })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_pu241, 1), new Object[] { "nuggetZirconium", "nuggetZirconium", "nuggetZirconium", "nuggetUranium235", "nuggetPlutonium240", "nuggetPlutonium241" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_am_mix, 1), new Object[] { "nuggetZirconium", "nuggetZirconium", "nuggetZirconium", "nuggetPlutonium241", "nuggetPlutonium241", "nuggetAmericiumRG" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_bismuth, 6), new Object[] { ModItems.billet_zirconium, ModItems.billet_zirconium, ModItems.billet_zirconium, ModItems.billet_uranium, ModItems.billet_pu241, ModItems.billet_bismuth })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_pu241, 6), new Object[] { ModItems.billet_zirconium, ModItems.billet_zirconium, ModItems.billet_zirconium, ModItems.billet_u235, ModItems.billet_pu240, ModItems.billet_pu241 })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_am_mix, 6), new Object[] { ModItems.billet_zirconium, ModItems.billet_zirconium, ModItems.billet_zirconium, ModItems.billet_pu241, ModItems.billet_pu241, ModItems.billet_am_mix })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_bismuth, 1), new Object[] { ZR.nugget(), ZR.nugget(), ZR.nugget(), U.nugget(), PU241.nugget(), BI.nugget() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_pu241, 1), new Object[] { ZR.nugget(), ZR.nugget(), ZR.nugget(), U235.nugget(), PU240.nugget(), PU241.nugget() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_am_mix, 1), new Object[] { ZR.nugget(), ZR.nugget(), ZR.nugget(), PU241.nugget(), PU241.nugget(), AMRG.nugget() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_bismuth, 6), new Object[] { ZR.billet(), ZR.billet(), ZR.billet(), U.billet(), PU241.billet(), BI.billet() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_pu241, 6), new Object[] { ZR.billet(), ZR.billet(), ZR.billet(), U235.billet(), PU240.billet(), PU241.billet() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.billet_zfb_am_mix, 6), new Object[] { ZR.billet(), ZR.billet(), ZR.billet(), PU241.billet(), PU241.billet(), AMRG.billet() })); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_uranium, 2), new Object[] { ModItems.billet_uranium_fuel, ModItems.billet_u238 }); @@ -224,16 +224,16 @@ public class MineralRecipes { GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_balefire_gold, 1), new Object[] { ModItems.billet_au198, ModItems.cell_antimatter, ModItems.pellet_charged }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_flashlead, 2), new Object[] { ModItems.billet_balefire_gold, ModItems.billet_pb209, ModItems.cell_antimatter }); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg), new Object[] { ModItems.billet_pu238, ModItems.billet_pu238, ModItems.billet_pu238, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_radium), new Object[] { ModItems.billet_ra226, ModItems.billet_ra226, ModItems.billet_ra226, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_weak), new Object[] { ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_pu238, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_strontium), new Object[] { ModItems.billet_sr90, ModItems.billet_sr90, ModItems.billet_sr90, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_cobalt), new Object[] { ModItems.billet_co60, ModItems.billet_co60, ModItems.billet_co60, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_actinium), new Object[] { ModItems.billet_actinium, ModItems.billet_actinium, ModItems.billet_actinium, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_polonium), new Object[] { ModItems.billet_polonium, ModItems.billet_polonium, ModItems.billet_polonium, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_lead), new Object[] { ModItems.billet_pb209, ModItems.billet_pb209, ModItems.billet_pb209, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_gold), new Object[] { ModItems.billet_au198, ModItems.billet_au198, ModItems.billet_au198, "plateIron" })); - GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_americium), new Object[] { ModItems.billet_am241, ModItems.billet_am241, ModItems.billet_am241, "plateIron" })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg), new Object[] { ModItems.billet_pu238, ModItems.billet_pu238, ModItems.billet_pu238, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_radium), new Object[] { ModItems.billet_ra226, ModItems.billet_ra226, ModItems.billet_ra226, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_weak), new Object[] { ModItems.billet_u238, ModItems.billet_u238, ModItems.billet_pu238, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_strontium), new Object[] { ModItems.billet_sr90, ModItems.billet_sr90, ModItems.billet_sr90, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_cobalt), new Object[] { ModItems.billet_co60, ModItems.billet_co60, ModItems.billet_co60, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_actinium), new Object[] { ModItems.billet_actinium, ModItems.billet_actinium, ModItems.billet_actinium, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_polonium), new Object[] { ModItems.billet_polonium, ModItems.billet_polonium, ModItems.billet_polonium, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_lead), new Object[] { ModItems.billet_pb209, ModItems.billet_pb209, ModItems.billet_pb209, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_gold), new Object[] { ModItems.billet_au198, ModItems.billet_au198, ModItems.billet_au198, IRON.plate() })); + GameRegistry.addRecipe(new ShapelessOreRecipe(new ItemStack(ModItems.pellet_rtg_americium), new Object[] { ModItems.billet_am241, ModItems.billet_am241, ModItems.billet_am241, IRON.plate() })); //There's no need for anvil recycling recipes if you simply set the container item GameRegistry.addShapelessRecipe(new ItemStack(ModItems.billet_bismuth, 3), new Object[] { new ItemStack(ModItems.pellet_rtg_depleted, 1, DepletedRTGMaterial.BISMUTH.ordinal()) }); diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index e9a261459..4d56ebc9b 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -14,7 +14,6 @@ import com.hbm.entity.mob.botprime.*; import com.hbm.entity.mob.siege.*; import com.hbm.entity.particle.*; import com.hbm.entity.projectile.*; -import com.hbm.entity.qic.*; import com.hbm.main.MainRegistry; import com.hbm.util.Tuple.Quartet; @@ -201,13 +200,14 @@ public class EntityMappings { addEntity(EntityArtilleryShell.class, "entity_artillery_shell", 1000); addEntity(EntityArtilleryRocket.class, "entity_himars", 1000); addEntity(EntitySiegeTunneler.class, "entity_meme_tunneler", 1000); - addEntity(EntitySPV.class, "entity_self_propelled_vehicle_mark_1", 1000); addEntity(EntityCog.class, "entity_stray_cog", 1000); addEntity(EntitySawblade.class, "entity_stray_saw", 1000); addEntity(EntityChemical.class, "entity_chemthrower_splash", 1000); + addEntity(EntityMist.class, "entity_mist", 1000); - addMob(EntityNuclearCreeper.class, "entity_mob_nuclear_creeper", 0x204131, 0x75CE00); - addMob(EntityTaintedCreeper.class, "entity_mob_tainted_creeper", 0x813b9b, 0xd71fdd); + addMob(EntityCreeperNuclear.class, "entity_mob_nuclear_creeper", 0x204131, 0x75CE00); + addMob(EntityCreeperTainted.class, "entity_mob_tainted_creeper", 0x813b9b, 0xd71fdd); + addMob(EntityCreeperPhosgene.class, "entity_mob_phosgene_creeper", 0xE3D398, 0xB8A06B); addMob(EntityHunterChopper.class, "entity_mob_hunter_chopper", 0x000020, 0x2D2D72); addMob(EntityCyberCrab.class, "entity_cyber_crab", 0xAAAAAA, 0x444444); addMob(EntityTeslaCrab.class, "entity_tesla_crab", 0xAAAAAA, 0x440000); diff --git a/src/main/java/com/hbm/entity/effect/EntityMist.java b/src/main/java/com/hbm/entity/effect/EntityMist.java new file mode 100644 index 000000000..06de19176 --- /dev/null +++ b/src/main/java/com/hbm/entity/effect/EntityMist.java @@ -0,0 +1,219 @@ +package com.hbm.entity.effect; + +import java.util.List; + +import com.hbm.extprop.HbmLivingProps; +import com.hbm.handler.radiation.ChunkRadiationManager; +import com.hbm.inventory.fluid.FluidType; +import com.hbm.inventory.fluid.Fluids; +import com.hbm.inventory.fluid.trait.FT_Corrosive; +import com.hbm.inventory.fluid.trait.FT_Flammable; +import com.hbm.inventory.fluid.trait.FT_Poison; +import com.hbm.inventory.fluid.trait.FT_Toxin; +import com.hbm.inventory.fluid.trait.FT_VentRadiation; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Gaseous; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Gaseous_ART; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Liquid; +import com.hbm.inventory.fluid.trait.FluidTraitSimple.FT_Viscous; +import com.hbm.lib.ModDamageSource; +import com.hbm.util.ArmorUtil; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.EntityDamageUtil; +import com.hbm.util.ContaminationUtil.ContaminationType; +import com.hbm.util.ContaminationUtil.HazardType; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class EntityMist extends Entity { + + public EntityMist(World world) { + super(world); + this.noClip = true; + } + + public EntityMist setArea(float width, float height) { + this.dataWatcher.updateObject(11, width); + this.dataWatcher.updateObject(12, height); + return this; + } + + @Override + protected void entityInit() { + this.dataWatcher.addObject(10, new Integer(0)); + this.dataWatcher.addObject(11, new Float(0)); + this.dataWatcher.addObject(12, new Float(0)); + } + + public EntityMist setType(FluidType fluid) { + this.dataWatcher.updateObject(10, fluid.getID()); + return this; + } + + public FluidType getType() { + return Fluids.fromID(this.dataWatcher.getWatchableObjectInt(10)); + } + + + @Override + public void onEntityUpdate() { + + float height = this.dataWatcher.getWatchableObjectFloat(12); + this.yOffset = -height / 2F; + this.setSize(this.dataWatcher.getWatchableObjectFloat(11), height); + + if(!worldObj.isRemote) { + + if(this.ticksExisted > this.getMaxAge()) { + this.setDead(); + } + + FluidType type = this.getType(); + + if(type.hasTrait(FT_VentRadiation.class)) { + FT_VentRadiation trait = type.getTrait(FT_VentRadiation.class); + ChunkRadiationManager.proxy.incrementRad(worldObj, (int) Math.floor(posX), (int) Math.floor(posY), (int) Math.floor(posZ), trait.getRadPerMB() * 2); + } + + double intensity = 1D - (double) this.ticksExisted / (double) this.getMaxAge(); + + if(type.hasTrait(FT_Flammable.class) && this.isBurning()) { + worldObj.createExplosion(this, posX, posY + height / 2, posZ, (float) intensity * 15F, true); + this.setDead(); + return; + } + + List affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox); + + for(Entity e : affected) { + this.affect(e, intensity); + } + } + } + + /* can't reuse EntityChemical here, while similar or identical in some places, the actual effects are often different */ + protected void affect(Entity e, double intensity) { + + FluidType type = this.getType(); + EntityLivingBase living = e instanceof EntityLivingBase ? (EntityLivingBase) e : null; + + if(type.temperature >= 100) { + EntityDamageUtil.attackEntityFromIgnoreIFrame(e, new DamageSource(ModDamageSource.s_boil), 5F + (type.temperature - 100) * 0.02F); + + if(type.temperature >= 500) { + e.setFire(10); //afterburn for 10 seconds + } + } + if(type.temperature < -20) { + if(living != null) { //only living things are affected + EntityDamageUtil.attackEntityFromIgnoreIFrame(e, new DamageSource(ModDamageSource.s_cryolator), 5F + (type.temperature + 20) * -0.05F); //5 damage at -20°C with one extra damage every -20°C + living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 100, 2)); + living.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 100, 4)); + } + } + + if(type.hasTrait(Fluids.DELICIOUS.getClass())) { + if(living != null && living.isEntityAlive()) { + living.heal(2F * (float) intensity); + } + } + + if(type.hasTrait(FT_Flammable.class) && type.hasTrait(FT_Liquid.class)) { + if(living != null) { + HbmLivingProps.setOil(living, 200); //doused in oil for 10 seconds + } + } + + if(this.isExtinguishing(type)) { + e.extinguish(); + } + + if(type.hasTrait(FT_Corrosive.class)) { + FT_Corrosive trait = type.getTrait(FT_Corrosive.class); + EntityDamageUtil.attackEntityFromIgnoreIFrame(e, new DamageSource(ModDamageSource.s_acid), trait.getRating() / 20F); + + if(living != null) { + for(int i = 0; i < 4; i++) { + ArmorUtil.damageSuit(living, i, trait.getRating() / 5); + } + } + } + + if(type.hasTrait(FT_VentRadiation.class)) { + FT_VentRadiation trait = type.getTrait(FT_VentRadiation.class); + if(living != null) { + ContaminationUtil.contaminate(living, HazardType.RADIATION, ContaminationType.CREATIVE, trait.getRadPerMB() * 5); + } + } + + if(type.hasTrait(FT_Poison.class)) { + FT_Poison trait = type.getTrait(FT_Poison.class); + + if(living != null) { + living.addPotionEffect(new PotionEffect(trait.isWithering() ? Potion.wither.id : Potion.poison.id, (int) (5 * 20 * intensity))); + } + } + + if(type.hasTrait(FT_Toxin.class)) { + FT_Toxin trait = type.getTrait(FT_Toxin.class); + + if(living != null) { + trait.affect(living, intensity); + } + } + } + + protected boolean isExtinguishing(FluidType type) { + return this.getStyleFromType(type) == SprayStyle.MIST && this.getType().temperature < 50 && !type.hasTrait(FT_Flammable.class); + } + + public int getMaxAge() { + return getStyleFromType(this.getType()) == SprayStyle.GAS ? 600 : 150; + } + + @Override + protected void readEntityFromNBT(NBTTagCompound nbt) { + this.setType(Fluids.fromID(nbt.getInteger("type"))); + } + + @Override + protected void writeEntityToNBT(NBTTagCompound nbt) { + nbt.setInteger("type", this.getType().getID()); + } + + @Override + @SideOnly(Side.CLIENT) + public boolean canRenderOnFire() { + return false; + } + + public static SprayStyle getStyleFromType(FluidType type) { + + if(type.hasTrait(FT_Viscous.class)) { + return SprayStyle.NULL; + } + + if(type.hasTrait(FT_Gaseous.class) || type.hasTrait(FT_Gaseous_ART.class)) { + return SprayStyle.GAS; + } + + if(type.hasTrait(FT_Liquid.class)) { + return SprayStyle.MIST; + } + + return SprayStyle.NULL; + } + + public static enum SprayStyle { + MIST, //liquids that have been sprayed into a mist + GAS, //things that were already gaseous + NULL + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java b/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java new file mode 100644 index 000000000..3be14d073 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityCreeperNuclear.java @@ -0,0 +1,137 @@ +package com.hbm.entity.mob; + +import java.util.List; + +import com.hbm.entity.logic.EntityNukeExplosionMK5; +import com.hbm.explosion.ExplosionNukeGeneric; +import com.hbm.explosion.ExplosionNukeSmall; +import com.hbm.items.ModItems; +import com.hbm.items.ItemAmmoEnums.AmmoFatman; +import com.hbm.lib.ModDamageSource; +import com.hbm.main.MainRegistry; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; +import com.hbm.util.ContaminationUtil; +import com.hbm.util.ContaminationUtil.ContaminationType; +import com.hbm.util.ContaminationUtil.HazardType; + +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityArrow; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class EntityCreeperNuclear extends EntityCreeper { + + public EntityCreeperNuclear(World world) { + super(world); + this.fuseTime = 75; + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(50.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.3D); + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + + // for some reason the nuclear explosion would damage the already dead entity, reviving it and forcing it to play the death animation + if(this.isDead) return false; + + if(source == ModDamageSource.radiation || source == ModDamageSource.mudPoisoning) { + if(this.isEntityAlive()) this.heal(amount); + return false; + } + + return super.attackEntityFrom(source, amount); + } + + @Override + protected Item getDropItem() { + return Item.getItemFromBlock(Blocks.tnt); + } + + @Override + protected void dropFewItems(boolean p_70628_1_, int p_70628_2_) { + + super.dropFewItems(p_70628_1_, p_70628_2_); + + if(rand.nextInt(3) == 0) + this.dropItem(ModItems.coin_creeper, 1); + } + + @Override + public void onDeath(DamageSource p_70645_1_) { + super.onDeath(p_70645_1_); + + List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(50, 50, 50)); + + for(EntityPlayer player : players) { + player.triggerAchievement(MainRegistry.bossCreeper); + } + + if(p_70645_1_.getEntity() instanceof EntitySkeleton || (p_70645_1_.isProjectile() && p_70645_1_.getEntity() instanceof EntityArrow && ((EntityArrow) (p_70645_1_.getEntity())).shootingEntity == null)) { + this.entityDropItem(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.STOCK), 1); + } + } + + @Override + public void onUpdate() { + + List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(5, 5, 5)); + + for(Entity e : list) { + if(e instanceof EntityLivingBase) { + ContaminationUtil.contaminate((EntityLivingBase) e, HazardType.RADIATION, ContaminationType.CREATIVE, 0.25F); + } + } + + super.onUpdate(); + + if(this.isEntityAlive() && this.getHealth() < this.getMaxHealth() && this.ticksExisted % 10 == 0) { + this.heal(1.0F); + } + } + + @Override + public void func_146077_cc() { + if(!this.worldObj.isRemote) { + + this.setDead(); + + boolean flag = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"); + + if(this.getPowered()) { + + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "muke"); + PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY + 0.5, posZ), new TargetPoint(dimension, posX, posY, posZ, 250)); + worldObj.playSoundEffect(posX, posY + 0.5, posZ, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); + + if(flag) { + worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, 50, posX, posY, posZ).mute()); + } else { + ExplosionNukeGeneric.dealDamage(worldObj, posX, posY + 0.5, posZ, 100); + } + } else { + + if(flag) { + ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_MEDIUM); + } else { + ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_SAFE); + } + } + } + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java b/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java new file mode 100644 index 000000000..53cfbe7f7 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityCreeperPhosgene.java @@ -0,0 +1,42 @@ +package com.hbm.entity.mob; + +import com.hbm.entity.effect.EntityMist; +import com.hbm.inventory.fluid.Fluids; + +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class EntityCreeperPhosgene extends EntityCreeper { + + public EntityCreeperPhosgene(World world) { + super(world); + this.fuseTime = 20; //ehehehehehe + } + + @Override + public boolean attackEntityFrom(DamageSource source, float amount) { + + if(!source.isDamageAbsolute() && !source.isUnblockable()) { + amount -= 4F; + } + + if(amount < 0) return false; + + return super.attackEntityFrom(source, amount); + } + + @Override + public void func_146077_cc() { + + if(!this.worldObj.isRemote) { + this.setDead(); + + EntityMist mist = new EntityMist(worldObj); + mist.setType(Fluids.PHOSGENE); + mist.setPosition(posX, posY, posZ); + mist.setArea(10, 5); + worldObj.spawnEntityInWorld(mist); + } + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityCreeperTainted.java b/src/main/java/com/hbm/entity/mob/EntityCreeperTainted.java new file mode 100644 index 000000000..807e6c543 --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityCreeperTainted.java @@ -0,0 +1,100 @@ +package com.hbm.entity.mob; + +import com.hbm.blocks.ModBlocks; +import com.hbm.config.GeneralConfig; + +import api.hbm.entity.IRadiationImmune; +import net.minecraft.block.Block; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.init.Blocks; +import net.minecraft.item.Item; +import net.minecraft.world.World; + +public class EntityCreeperTainted extends EntityCreeper implements IRadiationImmune { + + public EntityCreeperTainted(World world) { + super(world); + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(15.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.35D); + } + + @Override + public void onUpdate() { + super.onUpdate(); + + if(this.isEntityAlive()) { + + if(this.getHealth() < this.getMaxHealth() && this.ticksExisted % 10 == 0) { + this.heal(1.0F); + } + } + } + + @Override + protected Item getDropItem() { + return Item.getItemFromBlock(Blocks.tnt); + } + + @Override + public void func_146077_cc() { + if(!this.worldObj.isRemote) { + boolean griefing = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"); + + worldObj.newExplosion(this, posX, posY, posZ, 5.0F, false, false); + + if(griefing) { + if(this.getPowered()) { + + for(int i = 0; i < 255; i++) { + int a = rand.nextInt(15) + (int) posX - 7; + int b = rand.nextInt(15) + (int) posY - 7; + int c = rand.nextInt(15) + (int) posZ - 7; + + if(worldObj.getBlock(a, b, c).isReplaceable(worldObj, a, b, c) && hasPosNeightbour(worldObj, a, b, c)) { + if(!GeneralConfig.enableHardcoreTaint) { + worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3) + 5, 2); + } else { + worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3), 2); + } + } + } + + } else { + + for(int i = 0; i < 85; i++) { + int a = rand.nextInt(7) + (int) posX - 3; + int b = rand.nextInt(7) + (int) posY - 3; + int c = rand.nextInt(7) + (int) posZ - 3; + + if(worldObj.getBlock(a, b, c).isReplaceable(worldObj, a, b, c) && hasPosNeightbour(worldObj, a, b, c)) { + if(!GeneralConfig.enableHardcoreTaint) { + worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(6) + 10, 2); + } else { + worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3) + 4, 2); + } + } + } + } + } + + this.setDead(); + } + } + + public static boolean hasPosNeightbour(World world, int x, int y, int z) { + Block b0 = world.getBlock(x + 1, y, z); + Block b1 = world.getBlock(x, y + 1, z); + Block b2 = world.getBlock(x, y, z + 1); + Block b3 = world.getBlock(x - 1, y, z); + Block b4 = world.getBlock(x, y - 1, z); + Block b5 = world.getBlock(x, y, z - 1); + boolean b = (b0.renderAsNormalBlock() && b0.getMaterial().isOpaque()) || (b1.renderAsNormalBlock() && b1.getMaterial().isOpaque()) || (b2.renderAsNormalBlock() && b2.getMaterial().isOpaque()) || (b3.renderAsNormalBlock() && b3.getMaterial().isOpaque()) || (b4.renderAsNormalBlock() && b4.getMaterial().isOpaque()) || (b5.renderAsNormalBlock() && b5.getMaterial().isOpaque()); + return b; + } +} diff --git a/src/main/java/com/hbm/entity/mob/EntityCyberCrab.java b/src/main/java/com/hbm/entity/mob/EntityCyberCrab.java index 4d6da1f3e..7af12022a 100644 --- a/src/main/java/com/hbm/entity/mob/EntityCyberCrab.java +++ b/src/main/java/com/hbm/entity/mob/EntityCyberCrab.java @@ -27,7 +27,7 @@ public class EntityCyberCrab extends EntityMob implements IRangedAttackMob, IRad private static final IEntitySelector selector = new IEntitySelector() { public boolean isEntityApplicable(Entity p_82704_1_) { - return !(p_82704_1_ instanceof EntityCyberCrab || p_82704_1_ instanceof EntityCreeper || p_82704_1_ instanceof EntityNuclearCreeper); + return !(p_82704_1_ instanceof EntityCyberCrab || p_82704_1_ instanceof EntityCreeper); } }; diff --git a/src/main/java/com/hbm/entity/mob/EntityNuclearCreeper.java b/src/main/java/com/hbm/entity/mob/EntityNuclearCreeper.java deleted file mode 100644 index fa5f8b85b..000000000 --- a/src/main/java/com/hbm/entity/mob/EntityNuclearCreeper.java +++ /dev/null @@ -1,349 +0,0 @@ -package com.hbm.entity.mob; - -import java.util.List; - -import com.hbm.entity.logic.EntityNukeExplosionMK5; -import com.hbm.entity.mob.ai.EntityAINuclearCreeperSwell; -import com.hbm.explosion.ExplosionNukeGeneric; -import com.hbm.explosion.ExplosionNukeSmall; -import com.hbm.items.ModItems; -import com.hbm.items.ItemAmmoEnums.AmmoFatman; -import com.hbm.lib.ModDamageSource; -import com.hbm.main.MainRegistry; -import com.hbm.packet.AuxParticlePacketNT; -import com.hbm.packet.PacketDispatcher; -import com.hbm.util.ContaminationUtil; -import com.hbm.util.ContaminationUtil.ContaminationType; -import com.hbm.util.ContaminationUtil.HazardType; - -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.monster.EntitySkeleton; -import net.minecraft.entity.passive.EntityOcelot; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.projectile.EntityArrow; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.AxisAlignedBB; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class EntityNuclearCreeper extends EntityMob { - - private int lastActiveTime; - private int timeSinceIgnited; - private int fuseTime = 75; - - public EntityNuclearCreeper(World p_i1733_1_) { - super(p_i1733_1_); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAINuclearCreeperSwell(this)); - this.tasks.addTask(3, new EntityAIAttackOnCollide(this, 1.0D, false)); - this.tasks.addTask(4, new EntityAIWander(this, 0.8D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); - this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false)); - this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityOcelot.class, 0, true)); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(50.0D); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.3D); - } - - @Override - public boolean attackEntityFrom(DamageSource source, float amount) { - - if(source == ModDamageSource.radiation || source == ModDamageSource.mudPoisoning) { - this.heal(amount); - return false; - } - - return super.attackEntityFrom(source, amount); - } - - @Override - public boolean isAIEnabled() { - return true; - } - - @Override - public int getMaxSafePointTries() { - return this.getAttackTarget() == null ? 3 : 3 + (int) (this.getHealth() - 1.0F); - } - - @Override - protected void fall(float p_70069_1_) { - super.fall(p_70069_1_); - this.timeSinceIgnited = (int) (this.timeSinceIgnited + p_70069_1_ * 1.5F); - - if(this.timeSinceIgnited > this.fuseTime - 5) { - this.timeSinceIgnited = this.fuseTime - 5; - } - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataWatcher.addObject(16, Byte.valueOf((byte) -1)); - this.dataWatcher.addObject(17, Byte.valueOf((byte) 0)); - this.dataWatcher.addObject(18, Byte.valueOf((byte) 0)); - } - - @Override - public void writeEntityToNBT(NBTTagCompound p_70014_1_) { - super.writeEntityToNBT(p_70014_1_); - - if(this.dataWatcher.getWatchableObjectByte(17) == 1) { - p_70014_1_.setBoolean("powered", true); - } - - p_70014_1_.setShort("Fuse", (short) this.fuseTime); - p_70014_1_.setBoolean("ignited", this.func_146078_ca()); - } - - @Override - public void readEntityFromNBT(NBTTagCompound p_70037_1_) { - super.readEntityFromNBT(p_70037_1_); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) (p_70037_1_.getBoolean("powered") ? 1 : 0))); - - if(p_70037_1_.hasKey("Fuse", 99)) { - this.fuseTime = p_70037_1_.getShort("Fuse"); - } - - if(p_70037_1_.getBoolean("ignited")) { - this.func_146079_cb(); - } - } - - @Override - public void onUpdate() { - if(this.isDead) { - this.isDead = false; - this.heal(10.0F); - } - - if(this.isEntityAlive()) { - this.lastActiveTime = this.timeSinceIgnited; - - if(this.func_146078_ca()) { - this.setCreeperState(1); - } - - int i = this.getCreeperState(); - - if(i > 0 && this.timeSinceIgnited == 0) { - this.playSound("creeper.primed", 1.0F * 30 / 75, 0.5F); - } - - this.timeSinceIgnited += i; - - if(this.timeSinceIgnited < 0) { - this.timeSinceIgnited = 0; - } - - if(this.timeSinceIgnited >= this.fuseTime) { - this.timeSinceIgnited = this.fuseTime; - this.func_146077_cc(); - } - } - - List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(posX - 5, posY - 5, posZ - 5, posX + 5, posY + 5, posZ + 5)); - - for(Entity e : list) - if(e instanceof EntityLivingBase) { - ContaminationUtil.contaminate((EntityLivingBase) e, HazardType.RADIATION, ContaminationType.CREATIVE, 0.25F); - } - - super.onUpdate(); - - if(this.getHealth() < this.getMaxHealth() && this.ticksExisted % 10 == 0) { - this.heal(1.0F); - } - } - - @Override - protected String getHurtSound() { - return "mob.creeper.say"; - } - - @Override - protected String getDeathSound() { - return "mob.creeper.death"; - } - - @Override - public void onDeath(DamageSource p_70645_1_) { - super.onDeath(p_70645_1_); - - List players = worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand(50, 50, 50)); - - for(EntityPlayer player : players) { - player.triggerAchievement(MainRegistry.bossCreeper); - } - - if(p_70645_1_.getEntity() instanceof EntitySkeleton || (p_70645_1_.isProjectile() && p_70645_1_.getEntity() instanceof EntityArrow && ((EntityArrow) (p_70645_1_.getEntity())).shootingEntity == null)) { - int i = rand.nextInt(11); - int j = rand.nextInt(3); - if(i == 0) - this.dropItem(ModItems.nugget_u235, j); - if(i == 1) - this.dropItem(ModItems.nugget_pu238, j); - if(i == 2) - this.dropItem(ModItems.nugget_pu239, j); - if(i == 3) - this.dropItem(ModItems.nugget_neptunium, j); - if(i == 4) - this.dropItem(ModItems.man_core, 1); - if(i == 5) { - this.dropItem(ModItems.sulfur, j * 2); - this.dropItem(ModItems.niter, j * 2); - } - if(i == 6) - this.dropItem(ModItems.syringe_awesome, 1); - if(i == 7) - this.dropItem(ModItems.fusion_core, 1); - if(i == 8) - this.dropItem(ModItems.syringe_metal_stimpak, 1); - if(i == 9) { - switch(rand.nextInt(4)) { - case 0: - this.dropItem(ModItems.t45_helmet, 1); - break; - case 1: - this.dropItem(ModItems.t45_plate, 1); - break; - case 2: - this.dropItem(ModItems.t45_legs, 1); - break; - case 3: - this.dropItem(ModItems.t45_boots, 1); - break; - } - this.dropItem(ModItems.fusion_core, 1); - } - if(i == 10) - this.entityDropItem(ModItems.ammo_nuke.stackFromEnum(AmmoFatman.HIGH), 1); - } - } - - @Override - public boolean attackEntityAsMob(Entity p_70652_1_) { - return true; - } - - public boolean getPowered() { - return this.dataWatcher.getWatchableObjectByte(17) == 1; - } - - @SideOnly(Side.CLIENT) - public float getCreeperFlashIntensity(float p_70831_1_) { - return (this.lastActiveTime + (this.timeSinceIgnited - this.lastActiveTime) * p_70831_1_) / (this.fuseTime - 2); - } - - @Override - protected Item getDropItem() { - return Item.getItemFromBlock(Blocks.tnt); - } - - @Override - protected void dropFewItems(boolean p_70628_1_, int p_70628_2_) { - - super.dropFewItems(p_70628_1_, p_70628_2_); - - if(rand.nextInt(3) == 0) - this.dropItem(ModItems.coin_creeper, 1); - } - - public int getCreeperState() { - return this.dataWatcher.getWatchableObjectByte(16); - } - - public void setCreeperState(int p_70829_1_) { - this.dataWatcher.updateObject(16, Byte.valueOf((byte) p_70829_1_)); - } - - @Override - public void onStruckByLightning(EntityLightningBolt p_70077_1_) { - super.onStruckByLightning(p_70077_1_); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) 1)); - } - - @Override - protected boolean interact(EntityPlayer p_70085_1_) { - ItemStack itemstack = p_70085_1_.inventory.getCurrentItem(); - - if(itemstack != null && itemstack.getItem() == Items.flint_and_steel) { - this.worldObj.playSoundEffect(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, "fire.ignite", 1.0F, this.rand.nextFloat() * 0.4F + 0.8F); - p_70085_1_.swingItem(); - - if(!this.worldObj.isRemote) { - this.func_146079_cb(); - itemstack.damageItem(1, p_70085_1_); - return true; - } - } - - return super.interact(p_70085_1_); - } - - private void func_146077_cc() { - if(!this.worldObj.isRemote) { - boolean flag = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"); - - if(this.getPowered()) { - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "muke"); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, posX, posY + 0.5, posZ), new TargetPoint(dimension, posX, posY, posZ, 250)); - worldObj.playSoundEffect(posX, posY + 0.5, posZ, "hbm:weapon.mukeExplosion", 15.0F, 1.0F); - - if(flag) { - worldObj.spawnEntityInWorld(EntityNukeExplosionMK5.statFac(worldObj, 50, posX, posY, posZ).mute()); - } else { - ExplosionNukeGeneric.dealDamage(worldObj, posX, posY + 0.5, posZ, 100); - } - } else { - - if(flag) { - ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_MEDIUM); - } else { - ExplosionNukeSmall.explode(worldObj, posX, posY + 0.5, posZ, ExplosionNukeSmall.PARAMS_SAFE); - } - } - - this.setDead(); - } - } - - public boolean func_146078_ca() { - return this.dataWatcher.getWatchableObjectByte(18) != 0; - } - - public void func_146079_cb() { - this.dataWatcher.updateObject(18, Byte.valueOf((byte) 1)); - } - - public void setPowered(int power) { - this.dataWatcher.updateObject(17, power); - } -} diff --git a/src/main/java/com/hbm/entity/mob/EntityTaintedCreeper.java b/src/main/java/com/hbm/entity/mob/EntityTaintedCreeper.java deleted file mode 100644 index 12db53858..000000000 --- a/src/main/java/com/hbm/entity/mob/EntityTaintedCreeper.java +++ /dev/null @@ -1,286 +0,0 @@ -package com.hbm.entity.mob; - -import com.hbm.blocks.ModBlocks; -import com.hbm.config.GeneralConfig; -import com.hbm.entity.mob.ai.EntityAITaintedCreeperSwell; - -import api.hbm.entity.IRadiationImmune; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.entity.Entity; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.EntityAIAttackOnCollide; -import net.minecraft.entity.ai.EntityAIHurtByTarget; -import net.minecraft.entity.ai.EntityAILookIdle; -import net.minecraft.entity.ai.EntityAINearestAttackableTarget; -import net.minecraft.entity.ai.EntityAISwimming; -import net.minecraft.entity.ai.EntityAIWander; -import net.minecraft.entity.ai.EntityAIWatchClosest; -import net.minecraft.entity.effect.EntityLightningBolt; -import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.passive.EntityOcelot; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Blocks; -import net.minecraft.init.Items; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.DamageSource; -import net.minecraft.world.World; - -public class EntityTaintedCreeper extends EntityMob implements IRadiationImmune { - - private int lastActiveTime; - private int timeSinceIgnited; - private int fuseTime = 30; - private int explosionRadius = 20; - - public EntityTaintedCreeper(World p_i1733_1_) { - super(p_i1733_1_); - this.tasks.addTask(1, new EntityAISwimming(this)); - this.tasks.addTask(2, new EntityAITaintedCreeperSwell(this)); - this.tasks.addTask(3, new EntityAIAttackOnCollide(this, 1.0D, false)); - this.tasks.addTask(4, new EntityAIWander(this, 0.8D)); - this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); - this.tasks.addTask(6, new EntityAILookIdle(this)); - this.targetTasks.addTask(1, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); - this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false)); - this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityOcelot.class, 0, true)); - } - - @Override - protected void applyEntityAttributes() { - super.applyEntityAttributes(); - this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(15.0D); - this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.35D); - } - - @Override - public boolean isAIEnabled() { - return true; - } - - @Override - public int getMaxSafePointTries() { - return this.getAttackTarget() == null ? 3 : 3 + (int) (this.getHealth() - 1.0F); - } - - @Override - protected void fall(float p_70069_1_) { - super.fall(p_70069_1_); - this.timeSinceIgnited = (int) (this.timeSinceIgnited + p_70069_1_ * 1.5F); - - if(this.timeSinceIgnited > this.fuseTime - 5) { - this.timeSinceIgnited = this.fuseTime - 5; - } - } - - @Override - protected void entityInit() { - super.entityInit(); - this.dataWatcher.addObject(16, Byte.valueOf((byte) -1)); - this.dataWatcher.addObject(17, Byte.valueOf((byte) 0)); - this.dataWatcher.addObject(18, Byte.valueOf((byte) 0)); - } - - @Override - public void writeEntityToNBT(NBTTagCompound p_70014_1_) { - super.writeEntityToNBT(p_70014_1_); - - if(this.dataWatcher.getWatchableObjectByte(17) == 1) { - p_70014_1_.setBoolean("powered", true); - } - - p_70014_1_.setShort("Fuse", (short) this.fuseTime); - p_70014_1_.setByte("ExplosionRadius", (byte) this.explosionRadius); - p_70014_1_.setBoolean("ignited", this.func_146078_ca()); - } - - @Override - public void readEntityFromNBT(NBTTagCompound p_70037_1_) { - super.readEntityFromNBT(p_70037_1_); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) (p_70037_1_.getBoolean("powered") ? 1 : 0))); - - if(p_70037_1_.hasKey("Fuse", 99)) { - this.fuseTime = p_70037_1_.getShort("Fuse"); - } - - if(p_70037_1_.hasKey("ExplosionRadius", 99)) { - this.explosionRadius = p_70037_1_.getByte("ExplosionRadius"); - } - - if(p_70037_1_.getBoolean("ignited")) { - this.func_146079_cb(); - } - } - - @Override - public void onUpdate() { - if(this.isEntityAlive()) { - this.lastActiveTime = this.timeSinceIgnited; - - if(this.func_146078_ca()) { - this.setCreeperState(1); - } - - int i = this.getCreeperState(); - - if(i > 0 && this.timeSinceIgnited == 0) { - this.playSound("creeper.primed", 1.0F * 30 / 75, 0.5F); - } - - this.timeSinceIgnited += i; - - if(this.timeSinceIgnited < 0) { - this.timeSinceIgnited = 0; - } - - if(this.timeSinceIgnited >= this.fuseTime) { - this.timeSinceIgnited = this.fuseTime; - this.func_146077_cc(); - } - } - - super.onUpdate(); - - if(this.getHealth() < this.getMaxHealth() && this.ticksExisted % 10 == 0) { - this.heal(1.0F); - } - } - - @Override - protected String getHurtSound() { - return "mob.creeper.say"; - } - - @Override - protected String getDeathSound() { - return "mob.creeper.death"; - } - - @Override - public void onDeath(DamageSource p_70645_1_) { - super.onDeath(p_70645_1_); - } - - @Override - public boolean attackEntityAsMob(Entity p_70652_1_) { - return true; - } - - public boolean getPowered() { - return this.dataWatcher.getWatchableObjectByte(17) == 1; - } - - @SideOnly(Side.CLIENT) - public float getCreeperFlashIntensity(float p_70831_1_) { - return (this.lastActiveTime + (this.timeSinceIgnited - this.lastActiveTime) * p_70831_1_) / (this.fuseTime - 2); - } - - @Override - protected Item getDropItem() { - return Item.getItemFromBlock(Blocks.tnt); - } - - public int getCreeperState() { - return this.dataWatcher.getWatchableObjectByte(16); - } - - public void setCreeperState(int p_70829_1_) { - this.dataWatcher.updateObject(16, Byte.valueOf((byte) p_70829_1_)); - } - - @Override - public void onStruckByLightning(EntityLightningBolt p_70077_1_) { - super.onStruckByLightning(p_70077_1_); - this.dataWatcher.updateObject(17, Byte.valueOf((byte) 1)); - } - - @Override - protected boolean interact(EntityPlayer p_70085_1_) { - ItemStack itemstack = p_70085_1_.inventory.getCurrentItem(); - - if(itemstack != null && itemstack.getItem() == Items.flint_and_steel) { - this.worldObj.playSoundEffect(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, "fire.ignite", 1.0F, this.rand.nextFloat() * 0.4F + 0.8F); - p_70085_1_.swingItem(); - - if(!this.worldObj.isRemote) { - this.func_146079_cb(); - itemstack.damageItem(1, p_70085_1_); - return true; - } - } - - return super.interact(p_70085_1_); - } - - private void func_146077_cc() { - if(!this.worldObj.isRemote) { - this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"); - - if(this.getPowered()) { - this.explosionRadius *= 3; - } - - worldObj.newExplosion(this, posX, posY, posZ, 5.0F, false, false); - - if(this.getPowered()) { - - for(int i = 0; i < 255; i++) { - int a = rand.nextInt(15) + (int) posX - 7; - int b = rand.nextInt(15) + (int) posY - 7; - int c = rand.nextInt(15) + (int) posZ - 7; - if(worldObj.getBlock(a, b, c).isReplaceable(worldObj, a, b, c) && hasPosNeightbour(worldObj, a, b, c)) { - - if(!GeneralConfig.enableHardcoreTaint) - worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3) + 5, 2); - else - worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3), 2); - } - } - - } else { - - for(int i = 0; i < 85; i++) { - int a = rand.nextInt(7) + (int) posX - 3; - int b = rand.nextInt(7) + (int) posY - 3; - int c = rand.nextInt(7) + (int) posZ - 3; - if(worldObj.getBlock(a, b, c).isReplaceable(worldObj, a, b, c) && hasPosNeightbour(worldObj, a, b, c)) { - - if(!GeneralConfig.enableHardcoreTaint) - - worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(6) + 10, 2); - else - worldObj.setBlock(a, b, c, ModBlocks.taint, rand.nextInt(3) + 4, 2); - } - } - } - - this.setDead(); - } - } - - public static boolean hasPosNeightbour(World world, int x, int y, int z) { - Block b0 = world.getBlock(x + 1, y, z); - Block b1 = world.getBlock(x, y + 1, z); - Block b2 = world.getBlock(x, y, z + 1); - Block b3 = world.getBlock(x - 1, y, z); - Block b4 = world.getBlock(x, y - 1, z); - Block b5 = world.getBlock(x, y, z - 1); - boolean b = (b0.renderAsNormalBlock() && b0.getMaterial().isOpaque()) || (b1.renderAsNormalBlock() && b1.getMaterial().isOpaque()) || (b2.renderAsNormalBlock() && b2.getMaterial().isOpaque()) || (b3.renderAsNormalBlock() && b3.getMaterial().isOpaque()) || (b4.renderAsNormalBlock() && b4.getMaterial().isOpaque()) || (b5.renderAsNormalBlock() && b5.getMaterial().isOpaque()); - return b; - } - - public boolean func_146078_ca() { - return this.dataWatcher.getWatchableObjectByte(18) != 0; - } - - public void func_146079_cb() { - this.dataWatcher.updateObject(18, Byte.valueOf((byte) 1)); - } - - public void setPowered(int power) { - this.dataWatcher.updateObject(17, power); - } -} diff --git a/src/main/java/com/hbm/entity/mob/ai/EntityAINuclearCreeperSwell.java b/src/main/java/com/hbm/entity/mob/ai/EntityAINuclearCreeperSwell.java deleted file mode 100644 index 665d9dd88..000000000 --- a/src/main/java/com/hbm/entity/mob/ai/EntityAINuclearCreeperSwell.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.hbm.entity.mob.ai; - -import com.hbm.entity.mob.EntityNuclearCreeper; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; - -public class EntityAINuclearCreeperSwell extends EntityAIBase { - /** The creeper that is swelling. */ - EntityNuclearCreeper swellingCreeper; - /** The creeper's attack target. This is used for the changing of the creeper's state. */ - EntityLivingBase creeperAttackTarget; - public EntityAINuclearCreeperSwell(EntityNuclearCreeper p_i1655_1_) - { - this.swellingCreeper = p_i1655_1_; - this.setMutexBits(1); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - @Override - public boolean shouldExecute() - { - EntityLivingBase entitylivingbase = this.swellingCreeper.getAttackTarget(); - return this.swellingCreeper.getCreeperState() > 0 || entitylivingbase != null && this.swellingCreeper.getDistanceSqToEntity(entitylivingbase) < 9.0D; - } - - /** - * Execute a one shot task or start executing a continuous task - */ - @Override - public void startExecuting() - { - this.swellingCreeper.getNavigator().clearPathEntity(); - this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); - } - - /** - * Resets the task - */ - @Override - public void resetTask() - { - this.creeperAttackTarget = null; - } - - /** - * Updates the task - */ - @Override - public void updateTask() - { - if (this.creeperAttackTarget == null) - { - this.swellingCreeper.setCreeperState(-1); - } - else if (this.swellingCreeper.getDistanceSqToEntity(this.creeperAttackTarget) > 49.0D) - { - this.swellingCreeper.setCreeperState(-1); - } - else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget)) - { - this.swellingCreeper.setCreeperState(-1); - } - else - { - this.swellingCreeper.setCreeperState(1); - } - } -} diff --git a/src/main/java/com/hbm/entity/mob/ai/EntityAITaintedCreeperSwell.java b/src/main/java/com/hbm/entity/mob/ai/EntityAITaintedCreeperSwell.java deleted file mode 100644 index 44c749cbe..000000000 --- a/src/main/java/com/hbm/entity/mob/ai/EntityAITaintedCreeperSwell.java +++ /dev/null @@ -1,71 +0,0 @@ -package com.hbm.entity.mob.ai; - -import com.hbm.entity.mob.EntityTaintedCreeper; - -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.ai.EntityAIBase; - -public class EntityAITaintedCreeperSwell extends EntityAIBase { - /** The creeper that is swelling. */ - EntityTaintedCreeper swellingCreeper; - /** The creeper's attack target. This is used for the changing of the creeper's state. */ - EntityLivingBase creeperAttackTarget; - public EntityAITaintedCreeperSwell(EntityTaintedCreeper p_i1655_1_) - { - this.swellingCreeper = p_i1655_1_; - this.setMutexBits(1); - } - - /** - * Returns whether the EntityAIBase should begin execution. - */ - @Override - public boolean shouldExecute() - { - EntityLivingBase entitylivingbase = this.swellingCreeper.getAttackTarget(); - return this.swellingCreeper.getCreeperState() > 0 || entitylivingbase != null && this.swellingCreeper.getDistanceSqToEntity(entitylivingbase) < 9.0D; - } - - /** - * Execute a one shot task or start executing a continuous task - */ - @Override - public void startExecuting() - { - this.swellingCreeper.getNavigator().clearPathEntity(); - this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); - } - - /** - * Resets the task - */ - @Override - public void resetTask() - { - this.creeperAttackTarget = null; - } - - /** - * Updates the task - */ - @Override - public void updateTask() - { - if (this.creeperAttackTarget == null) - { - this.swellingCreeper.setCreeperState(-1); - } - else if (this.swellingCreeper.getDistanceSqToEntity(this.creeperAttackTarget) > 49.0D) - { - this.swellingCreeper.setCreeperState(-1); - } - else if (!this.swellingCreeper.getEntitySenses().canSee(this.creeperAttackTarget)) - { - this.swellingCreeper.setCreeperState(-1); - } - else - { - this.swellingCreeper.setCreeperState(1); - } - } -} diff --git a/src/main/java/com/hbm/entity/projectile/EntityBullet.java b/src/main/java/com/hbm/entity/projectile/EntityBullet.java index e4e4a19cc..3bbf98b02 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityBullet.java +++ b/src/main/java/com/hbm/entity/projectile/EntityBullet.java @@ -32,7 +32,7 @@ import net.minecraft.world.World; import com.hbm.blocks.ModBlocks; import com.hbm.blocks.generic.RedBarrel; import com.hbm.entity.grenade.EntityGrenadeTau; -import com.hbm.entity.mob.EntityNuclearCreeper; +import com.hbm.entity.mob.EntityCreeperNuclear; import com.hbm.entity.particle.EntityBSmokeFX; import com.hbm.items.ModItems; import com.hbm.lib.ModDamageSource; @@ -494,7 +494,7 @@ public class EntityBullet extends Entity implements IProjectile { if (entitylivingbase instanceof EntityPlayer && ArmorUtil.checkForHazmat((EntityPlayer) entitylivingbase)) { } else if (entitylivingbase instanceof EntityCreeper) { - EntityNuclearCreeper creep = new EntityNuclearCreeper(this.worldObj); + EntityCreeperNuclear creep = new EntityCreeperNuclear(this.worldObj); creep.setLocationAndAngles(entitylivingbase.posX, entitylivingbase.posY, entitylivingbase.posZ, entitylivingbase.rotationYaw, entitylivingbase.rotationPitch); if (!entitylivingbase.isDead) @@ -509,7 +509,7 @@ public class EntityBullet extends Entity implements IProjectile { if (!this.worldObj.isRemote) this.worldObj.spawnEntityInWorld(creep); } else if (entitylivingbase instanceof EntityLivingBase - && !(entitylivingbase instanceof EntityNuclearCreeper) + && !(entitylivingbase instanceof EntityCreeperNuclear) && !(entitylivingbase instanceof EntityMooshroom) && !(entitylivingbase instanceof EntityZombie)) { entitylivingbase.addPotionEffect(new PotionEffect(Potion.poison.getId(), 2 * 60 * 20, 2)); diff --git a/src/main/java/com/hbm/entity/projectile/EntityChemical.java b/src/main/java/com/hbm/entity/projectile/EntityChemical.java index 63ce539a4..003414be6 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityChemical.java +++ b/src/main/java/com/hbm/entity/projectile/EntityChemical.java @@ -12,6 +12,7 @@ import com.hbm.inventory.fluid.trait.FT_Combustible; import com.hbm.inventory.fluid.trait.FT_Corrosive; import com.hbm.inventory.fluid.trait.FT_Flammable; import com.hbm.inventory.fluid.trait.FT_Poison; +import com.hbm.inventory.fluid.trait.FT_Toxin; import com.hbm.inventory.fluid.trait.FT_VentRadiation; import com.hbm.lib.ModDamageSource; import com.hbm.main.MainRegistry; @@ -58,10 +59,6 @@ public class EntityChemical extends EntityThrowableNT { * if CORROSIVE: apply extra acid damage, poison effect as well as armor degradation */ - public double lastClientPosX = -1; - public double lastClientPosY = -1; - public double lastClientPosZ = -1; - public EntityChemical(World world) { super(world); this.ignoreFrustumCheck = true; @@ -257,6 +254,14 @@ public class EntityChemical extends EntityThrowableNT { } } + if(type.hasTrait(FT_Toxin.class)) { + FT_Toxin trait = type.getTrait(FT_Toxin.class); + + if(living != null) { + trait.affect(living, intensity); + } + } + if(type == Fluids.XPJUICE) { if(e instanceof EntityPlayer) { diff --git a/src/main/java/com/hbm/entity/projectile/EntityMeteor.java b/src/main/java/com/hbm/entity/projectile/EntityMeteor.java index 9638ae585..3582a80c3 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityMeteor.java +++ b/src/main/java/com/hbm/entity/projectile/EntityMeteor.java @@ -51,7 +51,7 @@ public class EntityMeteor extends Entity { ExplosionLarge.spawnParticles(worldObj, posX, posY, posZ - 5, 75); } - (new Meteorite()).generate(worldObj, rand, (int) Math.round(this.posX - 0.5D), (int) Math.round(this.posY - 0.5D), (int) Math.round(this.posZ - 0.5D), safe, true); + (new Meteorite()).generate(worldObj, rand, (int) Math.round(this.posX - 0.5D), (int) Math.round(this.posY - 0.5D), (int) Math.round(this.posZ - 0.5D), safe, true, true); this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "hbm:entity.oldExplosion", 10000.0F, 0.5F + this.rand.nextFloat() * 0.1F); this.setDead(); } diff --git a/src/main/java/com/hbm/entity/qic/EntitySPV.java b/src/main/java/com/hbm/entity/qic/EntitySPV.java deleted file mode 100644 index e82fa07d2..000000000 --- a/src/main/java/com/hbm/entity/qic/EntitySPV.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.hbm.entity.qic; - -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.util.Vec3; -import net.minecraft.world.World; - -public class EntitySPV extends Entity { - - public EntitySPV(World p_i1582_1_) { - super(p_i1582_1_); - this.setSize(0.5F, 0.5F); - } - - @Override - protected void entityInit() { } - - @Override - protected void readEntityFromNBT(NBTTagCompound p_70037_1_) { } - - @Override - protected void writeEntityToNBT(NBTTagCompound p_70014_1_) { } - - @Override - public void onUpdate() { - - if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityLivingBase && ((EntityLivingBase)this.riddenByEntity).moveForward != 0) { - EntityLivingBase riding = (EntityLivingBase) this.riddenByEntity; - Vec3 vec = riding.getLookVec(); - this.motionX = vec.xCoord * riding.moveForward * 0.25D; - this.motionY = vec.yCoord * riding.moveForward * 0.25D; - this.motionZ = vec.zCoord * riding.moveForward * 0.25D; - - } else if(this.riddenByEntity == null) { - this.motionY -= 0.01D; - - if(this.onGround) { - this.motionX = 0; - this.motionY = 0; - this.motionZ = 0; - } - - } else { - this.motionX = 0; - this.motionY = 0; - this.motionZ = 0; - } - - this.moveEntity(this.motionX, this.motionY, this.motionZ); - //this.setPositionAndRotation(this.posX + motionX, this.posY + motionY, this.posZ + motionZ, this.rotationYaw, this.rotationPitch); - - super.onUpdate(); - } - - @Override - public boolean canBeCollidedWith() { - return true; - } - - @Override - public boolean interactFirst(EntityPlayer player) { - if(super.interactFirst(player)) { - return true; - } else if(!this.worldObj.isRemote && (this.riddenByEntity == null || this.riddenByEntity == player)) { - player.mountEntity(this); - return true; - } else { - return false; - } - } -} diff --git a/src/main/java/com/hbm/hazard/HazardRegistry.java b/src/main/java/com/hbm/hazard/HazardRegistry.java index 7f686ff4c..b404040a2 100644 --- a/src/main/java/com/hbm/hazard/HazardRegistry.java +++ b/src/main/java/com/hbm/hazard/HazardRegistry.java @@ -177,7 +177,7 @@ public class HazardRegistry { HazardSystem.register(lamp_demon, makeData(RADIATION, 100_000F)); HazardSystem.register(cell_tritium, makeData(RADIATION, 0.001F)); - HazardSystem.register(cell_sas3, makeData().addEntry(RADIATION, sas3).addEntry(BLINDING, 10F)); + HazardSystem.register(cell_sas3, makeData().addEntry(RADIATION, sas3).addEntry(BLINDING, 60F)); HazardSystem.register(cell_balefire, makeData(RADIATION, 50F)); HazardSystem.register(powder_balefire, makeData(RADIATION, 500F)); HazardSystem.register(egg_balefire_shard, makeData(RADIATION, bf * nugget)); diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index b6c84d700..ca1ef53d8 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -28,6 +28,7 @@ import com.hbm.items.ItemEnums.EnumCokeType; import com.hbm.items.ItemEnums.EnumTarType; import com.hbm.items.special.ItemBedrockOre.EnumBedrockOre; import com.hbm.main.MainRegistry; +import com.hbm.util.Compat; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import net.minecraft.block.Block; @@ -110,7 +111,7 @@ public class OreDictManager { /* * RADIOACTIVE */ - public static final DictFrame U = new DictFrame("Uranium"); + public static final DictFrame U = new DictFrame(Compat.isModLoaded(Compat.MOD_GT6) ? "Uraninite" : "Uranium"); public static final DictFrame U233 = new DictFrame("Uranium233", "U233"); public static final DictFrame U235 = new DictFrame("Uranium235", "U235"); public static final DictFrame U238 = new DictFrame("Uranium238", "U238"); @@ -862,18 +863,19 @@ public class OreDictManager { return this; } - public String any() { return ANY + groupName; } - public String nugget() { return NUGGET + groupName; } - public String tiny() { return TINY + groupName; } - public String ingot() { return INGOT + groupName; } - public String dustTiny() { return DUSTTINY + groupName; } - public String dust() { return DUST + groupName; } - public String gem() { return GEM + groupName; } - public String crystal() { return CRYSTAL + groupName; } - public String plate() { return PLATE + groupName; } - public String billet() { return BILLET + groupName; } - public String block() { return BLOCK + groupName; } - public String ore() { return ORE + groupName; } + public String any() { return ANY + groupName; } + public String nugget() { return NUGGET + groupName; } + public String tiny() { return TINY + groupName; } + public String ingot() { return INGOT + groupName; } + public String dustTiny() { return DUSTTINY + groupName; } + public String dust() { return DUST + groupName; } + public String gem() { return GEM + groupName; } + public String crystal() { return CRYSTAL + groupName; } + public String plate() { return PLATE + groupName; } + public String plateTriple() { return PLATECAST + groupName; } + public String billet() { return BILLET + groupName; } + public String block() { return BLOCK + groupName; } + public String ore() { return ORE + groupName; } } private static void addReRegistration(String original, String additional) { diff --git a/src/main/java/com/hbm/inventory/SlotCraftingOutput.java b/src/main/java/com/hbm/inventory/SlotCraftingOutput.java index 37c0fd450..7b8a1c86a 100644 --- a/src/main/java/com/hbm/inventory/SlotCraftingOutput.java +++ b/src/main/java/com/hbm/inventory/SlotCraftingOutput.java @@ -31,7 +31,7 @@ public class SlotCraftingOutput extends Slot { if(item == Item.getItemFromBlock(ModBlocks.machine_chemplant)) player.triggerAchievement(MainRegistry.achChemplant); - if(item == Item.getItemFromBlock(ModBlocks.concrete) || item == Item.getItemFromBlock(ModBlocks.concrete_asbestos)) + if(item == Item.getItemFromBlock(ModBlocks.concrete_smooth) || item == Item.getItemFromBlock(ModBlocks.concrete_asbestos)) player.triggerAchievement(MainRegistry.achConcrete); if(item == ModItems.ingot_polymer) player.triggerAchievement(MainRegistry.achPolymer); diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java b/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java index a0de53617..afab4ad24 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneExtractor.java @@ -14,26 +14,26 @@ public class ContainerCraneExtractor extends Container { protected TileEntityCraneExtractor extractor; - public ContainerCraneExtractor(InventoryPlayer invPlayer, TileEntityCraneExtractor inserter) { - this.extractor = inserter; + public ContainerCraneExtractor(InventoryPlayer invPlayer, TileEntityCraneExtractor extractor) { + this.extractor = extractor; //filter for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { - this.addSlotToContainer(new Slot(inserter, j + i * 3, 71 + j * 18, 17 + i * 18)); + this.addSlotToContainer(new Slot(extractor, j + i * 3, 71 + j * 18, 17 + i * 18)); } } //buffer for(int i = 0; i < 3; i++) { for(int j = 0; j < 3; j++) { - this.addSlotToContainer(new Slot(inserter, 9 + j + i * 3, 8 + j * 18, 17 + i * 18)); + this.addSlotToContainer(new Slot(extractor, 9 + j + i * 3, 8 + j * 18, 17 + i * 18)); } } //upgrades - this.addSlotToContainer(new SlotUpgrade(inserter, 18, 152, 23)); - this.addSlotToContainer(new SlotUpgrade(inserter, 19, 152, 47)); + this.addSlotToContainer(new SlotUpgrade(extractor, 18, 152, 23)); + this.addSlotToContainer(new SlotUpgrade(extractor, 19, 152, 47)); for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { @@ -102,8 +102,6 @@ public class ContainerCraneExtractor extends Container { //M3: 3 //SHIFT: 1 //DRAG: 5 - //System.out.println("Mode " + mode); - //System.out.println("Slot " + index); if(index < 0 || index > 8) { return super.slotClick(index, button, mode, player); diff --git a/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java b/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java new file mode 100644 index 000000000..32c91fd68 --- /dev/null +++ b/src/main/java/com/hbm/inventory/container/ContainerCraneGrabber.java @@ -0,0 +1,126 @@ +package com.hbm.inventory.container; + +import com.hbm.inventory.SlotUpgrade; +import com.hbm.items.ModItems; +import com.hbm.tileentity.network.TileEntityCraneGrabber; + +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 ContainerCraneGrabber extends Container { + + protected TileEntityCraneGrabber grabber; + + public ContainerCraneGrabber(InventoryPlayer invPlayer, TileEntityCraneGrabber grabber) { + this.grabber = grabber; + + //filter + for(int i = 0; i < 3; i++) { + for(int j = 0; j < 3; j++) { + this.addSlotToContainer(new Slot(grabber, j + i * 3, 40 + j * 18, 17 + i * 18)); + } + } + + //upgrades + this.addSlotToContainer(new SlotUpgrade(grabber, 9, 121, 23)); + this.addSlotToContainer(new SlotUpgrade(grabber, 10, 121, 47)); + + 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, 103 + i * 18)); + } + } + + for(int i = 0; i < 9; i++) { + this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 161)); + } + } + + @Override + public ItemStack transferStackInSlot(EntityPlayer player, int slot) { + ItemStack var3 = null; + Slot var4 = (Slot) this.inventorySlots.get(slot); + + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + + if(slot < 9) { //filters + return null; + } + + if(slot <= grabber.getSizeInventory() - 1) { + if(!this.mergeItemStack(var5, grabber.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else { + + if(var3.getItem() == ModItems.upgrade_stack) { + if(!this.mergeItemStack(var5, 9, 10, false)) + return null; + } else if(var3.getItem() == ModItems.upgrade_ejector) { + if(!this.mergeItemStack(var5, 10, 11, false)) + return null; + } + + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack) null); + } else { + var4.onSlotChanged(); + } + + var4.onPickupFromSlot(player, var5); + } + + return var3; + } + + @Override + public boolean canInteractWith(EntityPlayer player) { + return grabber.isUseableByPlayer(player); + } + + @Override + public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { + + //L/R: 0 + //M3: 3 + //SHIFT: 1 + //DRAG: 5 + + if(index < 0 || index > 8) { + return super.slotClick(index, button, mode, player); + } + + Slot slot = this.getSlot(index); + + ItemStack ret = null; + ItemStack held = player.inventory.getItemStack(); + + if(slot.getHasStack()) + ret = slot.getStack().copy(); + + if(button == 1 && mode == 0 && slot.getHasStack()) { + grabber.nextMode(index); + return ret; + + } else { + slot.putStack(held != null ? held.copy() : null); + + if(slot.getHasStack()) { + slot.getStack().stackSize = 1; + } + + slot.onSlotChanged(); + grabber.matcher.initPatternStandard(grabber.getWorldObj(), slot.getStack(), index); + + return ret; + } + } +} diff --git a/src/main/java/com/hbm/inventory/fluid/Fluids.java b/src/main/java/com/hbm/inventory/fluid/Fluids.java index 882abd686..d8666118d 100644 --- a/src/main/java/com/hbm/inventory/fluid/Fluids.java +++ b/src/main/java/com/hbm/inventory/fluid/Fluids.java @@ -6,10 +6,16 @@ import java.util.List; import com.hbm.inventory.fluid.trait.*; import com.hbm.inventory.fluid.trait.FluidTraitSimple.*; +import com.hbm.lib.ModDamageSource; import com.hbm.inventory.fluid.trait.FT_Combustible.FuelGrade; import com.hbm.inventory.fluid.trait.FT_Coolable.CoolingType; import com.hbm.inventory.fluid.trait.FT_Heatable.HeatingType; +import com.hbm.inventory.fluid.trait.FT_Toxin.*; import com.hbm.render.util.EnumSymbol; +import com.hbm.util.ArmorRegistry.HazardClass; + +import net.minecraft.potion.Potion; +import net.minecraft.potion.PotionEffect; public class Fluids { @@ -123,6 +129,7 @@ public class Fluids { protected static final List metaOrder = new ArrayList(); public static final FT_Liquid LIQUID = new FT_Liquid(); + public static final FT_Viscous VISCOUS = new FT_Viscous(); public static final FT_Gaseous_ART EVAP = new FT_Gaseous_ART(); public static final FT_Gaseous GASEOUS = new FT_Gaseous(); public static final FT_Plasma PLASMA = new FT_Plasma(); @@ -154,19 +161,19 @@ public class Fluids { SUPERHOTSTEAM = new FluidType("SUPERHOTSTEAM", 0xE7B7B7, 4, 0, 0, EnumSymbol.NONE).setTemp(450).setCompression(1D).addTraits(GASEOUS); ULTRAHOTSTEAM = new FluidType("ULTRAHOTSTEAM", 0xE39393, 4, 0, 0, EnumSymbol.NONE).setTemp(600).setCompression(10D).addTraits(GASEOUS); COOLANT = new FluidType("COOLANT", 0xd8fcff, 1, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - LAVA = new FluidType("LAVA", 0xFF3300, 4, 0, 0, EnumSymbol.NOWATER).setTemp(1200).addTraits(LIQUID); + LAVA = new FluidType("LAVA", 0xFF3300, 4, 0, 0, EnumSymbol.NOWATER).setTemp(1200).addTraits(LIQUID, VISCOUS); DEUTERIUM = new FluidType("DEUTERIUM", 0x0000FF, 3, 4, 0, EnumSymbol.NONE).addTraits(new FT_Flammable(5_000), new FT_Combustible(FuelGrade.HIGH, 10_000), GASEOUS); TRITIUM = new FluidType("TRITIUM", 0x000099, 3, 4, 0, EnumSymbol.RADIATION).addTraits(new FT_Flammable(5_000), new FT_Combustible(FuelGrade.HIGH, 10_000), GASEOUS, new FT_VentRadiation(0.001F)); - OIL = new FluidType("OIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID); - HOTOIL = new FluidType("HOTOIL", 0x300900, 2, 3, 0, EnumSymbol.NONE).setTemp(350).addTraits(new FT_Flammable(10_000), LIQUID); - HEAVYOIL = new FluidType("HEAVYOIL", 0x141312, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x513F39)).addTraits(new FT_Flammable(50_000), new FT_Combustible(FuelGrade.LOW, 25_000), LIQUID); - BITUMEN = new FluidType("BITUMEN", 0x1f2426, 2, 0, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5A5877)).addTraits(LIQUID); - SMEAR = new FluidType("SMEAR", 0x190f01, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x624F3B)).addTraits(new FT_Flammable(50_000), LIQUID); - HEATINGOIL = new FluidType("HEATINGOIL", 0x211806, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x694235)).addTraits(new FT_Flammable(150_000), new FT_Combustible(FuelGrade.LOW, 100_000), LIQUID); - RECLAIMED = new FluidType("RECLAIMED", 0x332b22, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xF65723)).addTraits(new FT_Flammable(100_000), new FT_Combustible(FuelGrade.LOW, 200_000), LIQUID); + OIL = new FluidType("OIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID, VISCOUS); + HOTOIL = new FluidType("HOTOIL", 0x300900, 2, 3, 0, EnumSymbol.NONE).setTemp(350).addTraits(new FT_Flammable(10_000), LIQUID, VISCOUS); + HEAVYOIL = new FluidType("HEAVYOIL", 0x141312, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x513F39)).addTraits(new FT_Flammable(50_000), new FT_Combustible(FuelGrade.LOW, 25_000), LIQUID, VISCOUS); + BITUMEN = new FluidType("BITUMEN", 0x1f2426, 2, 0, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5A5877)).addTraits(LIQUID, VISCOUS); + SMEAR = new FluidType("SMEAR", 0x190f01, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x624F3B)).addTraits(new FT_Flammable(50_000), LIQUID, VISCOUS); + HEATINGOIL = new FluidType("HEATINGOIL", 0x211806, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x694235)).addTraits(new FT_Flammable(150_000), new FT_Combustible(FuelGrade.LOW, 100_000), LIQUID, VISCOUS); + RECLAIMED = new FluidType("RECLAIMED", 0x332b22, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xF65723)).addTraits(new FT_Flammable(100_000), new FT_Combustible(FuelGrade.LOW, 200_000), LIQUID, VISCOUS); PETROIL = new FluidType("PETROIL", 0x44413d, 1, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2369F6)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 300_000), LIQUID); LUBRICANT = new FluidType("LUBRICANT", 0x606060, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xF1CC05)).addTraits(LIQUID); - NAPHTHA = new FluidType("NAPHTHA", 0x595744, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 200_000), LIQUID); + NAPHTHA = new FluidType("NAPHTHA", 0x595744, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 200_000), LIQUID, VISCOUS); DIESEL = new FluidType("DIESEL", 0xf2eed5, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xFF2C2C)).addTraits(new FT_Flammable(200_000), new FT_Combustible(FuelGrade.HIGH, 500_000), LIQUID); LIGHTOIL = new FluidType("LIGHTOIL", 0x8c7451, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xB46B52)).addTraits(new FT_Flammable(200_000), new FT_Combustible(FuelGrade.MEDIUM, 500_000), LIQUID); KEROSENE = new FluidType("KEROSENE", 0xffa5d2, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xFF377D)).addTraits(new FT_Flammable(300_000), new FT_Combustible(FuelGrade.AERO, 1_250_000), LIQUID); @@ -183,20 +190,20 @@ public class Fluids { AMAT = new FluidType("AMAT", 0x010101, 5, 0, 5, EnumSymbol.ANTIMATTER).addTraits(ANTI, GASEOUS); ASCHRAB = new FluidType("ASCHRAB", 0xb50000, 5, 0, 5, EnumSymbol.ANTIMATTER).addTraits(ANTI, GASEOUS); ACID = new FluidType("ACID", 0xfff7aa, 3, 0, 3, EnumSymbol.OXIDIZER).addTraits(new FT_Corrosive(40), LIQUID); - WATZ = new FluidType("WATZ", 0x86653E, 4, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(60), new FT_VentRadiation(0.1F), LIQUID); - CRYOGEL = new FluidType("CRYOGEL", 0x32ffff, 2, 0, 0, EnumSymbol.CROYGENIC).setTemp(-170).addTraits(LIQUID); + WATZ = new FluidType("WATZ", 0x86653E, 4, 0, 3, EnumSymbol.ACID).addTraits(new FT_Corrosive(60), new FT_VentRadiation(0.1F), LIQUID, VISCOUS); + CRYOGEL = new FluidType("CRYOGEL", 0x32ffff, 2, 0, 0, EnumSymbol.CROYGENIC).setTemp(-170).addTraits(LIQUID, VISCOUS); HYDROGEN = new FluidType("HYDROGEN", 0x4286f4, 3, 4, 0, EnumSymbol.CROYGENIC).setTemp(-260).addContainers(new CD_Gastank(0x4286f4, 0xffffff)).addTraits(new FT_Flammable(5_000), new FT_Combustible(FuelGrade.HIGH, 10_000), LIQUID, EVAP); OXYGEN = new FluidType("OXYGEN", 0x98bdf9, 3, 0, 0, EnumSymbol.CROYGENIC).setTemp(-100).addContainers(new CD_Gastank(0x98bdf9, 0xffffff)).addTraits(LIQUID, EVAP); XENON = new FluidType("XENON", 0xba45e8, 0, 0, 0, EnumSymbol.ASPHYXIANT).addContainers(new CD_Gastank(0x8C21FF, 0x303030)).addTraits(GASEOUS); - BALEFIRE = new FluidType("BALEFIRE", 0x28e02e, 4, 4, 3, EnumSymbol.RADIATION).setTemp(1500).addTraits(new FT_Corrosive(50), new FT_Flammable(1_000_000), new FT_Combustible(FuelGrade.HIGH, 2_500_000), LIQUID); + BALEFIRE = new FluidType("BALEFIRE", 0x28e02e, 4, 4, 3, EnumSymbol.RADIATION).setTemp(1500).addTraits(new FT_Corrosive(50), new FT_Flammable(1_000_000), new FT_Combustible(FuelGrade.HIGH, 2_500_000), LIQUID, VISCOUS); MERCURY = new FluidType("MERCURY", 0x808080, 2, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, new FT_Poison(false, 2)); - PAIN = new FluidType("PAIN", 0x938541, 2, 0, 1, EnumSymbol.ACID).setTemp(300).addTraits(new FT_Corrosive(30), new FT_Poison(true, 2), LIQUID); - WASTEFLUID = new FluidType("WASTEFLUID", 0x544400, 2, 0, 1, EnumSymbol.RADIATION).addTraits(new FT_VentRadiation(0.5F), NOCON, LIQUID); + PAIN = new FluidType("PAIN", 0x938541, 2, 0, 1, EnumSymbol.ACID).setTemp(300).addTraits(new FT_Corrosive(30), new FT_Poison(true, 2), LIQUID, VISCOUS); + WASTEFLUID = new FluidType("WASTEFLUID", 0x544400, 2, 0, 1, EnumSymbol.RADIATION).addTraits(new FT_VentRadiation(0.5F), NOCON, LIQUID, VISCOUS); WASTEGAS = new FluidType("WASTEGAS", 0xB8B8B8, 2, 0, 1, EnumSymbol.RADIATION).addTraits(new FT_VentRadiation(0.5F), NOCON, GASEOUS); GASOLINE = new FluidType("GASOLINE", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2F7747)).addTraits(new FT_Flammable(400_000), new FT_Combustible(FuelGrade.HIGH, 1_000_000), LIQUID); COALGAS = new FluidType("COALGAS", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2E155F)).addTraits(new FT_Flammable(75_000), new FT_Combustible(FuelGrade.MEDIUM, 150_000), LIQUID); SPENTSTEAM = new FluidType("SPENTSTEAM", 0x445772, 2, 0, 0, EnumSymbol.NONE).setCompression(1D).addTraits(NOCON, GASEOUS); - FRACKSOL = new FluidType("FRACKSOL", 0x798A6B, 1, 3, 3, EnumSymbol.ACID).addContainers(new CD_Canister(0x4F887F)).addTraits(new FT_Corrosive(15), new FT_Poison(false, 0), LIQUID); + FRACKSOL = new FluidType("FRACKSOL", 0x798A6B, 1, 3, 3, EnumSymbol.ACID).addContainers(new CD_Canister(0x4F887F)).addTraits(new FT_Corrosive(15), new FT_Poison(false, 0), LIQUID, VISCOUS); PLASMA_DT = new FluidType("PLASMA_DT", 0xF7AFDE, 0, 4, 0, EnumSymbol.RADIATION).setTemp(3250).addTraits(NOCON, NOID, PLASMA); PLASMA_HD = new FluidType("PLASMA_HD", 0xF0ADF4, 0, 4, 0, EnumSymbol.RADIATION).setTemp(2500).addTraits(NOCON, NOID, PLASMA); PLASMA_HT = new FluidType("PLASMA_HT", 0xD1ABF2, 0, 4, 0, EnumSymbol.RADIATION).setTemp(3000).addTraits(NOCON, NOID, PLASMA); @@ -205,20 +212,20 @@ public class Fluids { CARBONDIOXIDE = new FluidType("CARBONDIOXIDE", 0x404040, 3, 0, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS); PLASMA_DH3 = new FluidType("PLASMA_DH3", 0xFF83AA, 0, 4, 0, EnumSymbol.RADIATION).setTemp(3480).addTraits(NOCON, NOID, PLASMA); HELIUM3 = new FluidType("HELIUM3", 0xFCF0C4, 3, 4, 0, EnumSymbol.ASPHYXIANT).addTraits(GASEOUS); - DEATH = new FluidType("DEATH", 0x717A88, 2, 0, 1, EnumSymbol.ACID).setTemp(300).addTraits(new FT_Corrosive(80), new FT_Poison(true, 4), LEADCON, LIQUID); + DEATH = new FluidType("DEATH", 0x717A88, 2, 0, 1, EnumSymbol.ACID).setTemp(300).addTraits(new FT_Corrosive(80), new FT_Poison(true, 4), LEADCON, LIQUID, VISCOUS); ETHANOL = new FluidType("ETHANOL", 0xe0ffff, 2, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xEAFFF3)).addTraits(new FT_Flammable(75_000), new FT_Combustible(FuelGrade.HIGH, 200_000), LIQUID); HEAVYWATER = new FluidType("HEAVYWATER", 0x00a0b0, 1, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - CRACKOIL = new FluidType("CRACKOIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID); - COALOIL = new FluidType("COALOIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID); - HOTCRACKOIL = new FluidType("HOTCRACKOIL", 0x300900, 2, 3, 0, EnumSymbol.NONE).setTemp(350).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID); - NAPHTHA_CRACK = new FluidType("NAPHTHA_CRACK", 0x595744, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 200_000), LIQUID); + CRACKOIL = new FluidType("CRACKOIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID, VISCOUS); + COALOIL = new FluidType("COALOIL", 0x020202, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID, VISCOUS); + HOTCRACKOIL = new FluidType("HOTCRACKOIL", 0x300900, 2, 3, 0, EnumSymbol.NONE).setTemp(350).addContainers(new CD_Canister(0x424242)).addTraits(new FT_Flammable(10_000), LIQUID, VISCOUS); + NAPHTHA_CRACK = new FluidType("NAPHTHA_CRACK", 0x595744, 2, 1, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x5F6D44)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 200_000), LIQUID, VISCOUS); LIGHTOIL_CRACK = new FluidType("LIGHTOIL_CRACK", 0x8c7451, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xB46B52)).addTraits(new FT_Flammable(200_000), new FT_Combustible(FuelGrade.MEDIUM, 500_000), LIQUID); DIESEL_CRACK = new FluidType("DIESEL_CRACK", 0xf2eed5, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xFF2C2C)).addTraits(new FT_Flammable(200_000), new FT_Combustible(FuelGrade.HIGH, 450_000), LIQUID); - AROMATICS = new FluidType("AROMATICS", 0x68A09A, 1, 4, 1, EnumSymbol.NONE).addTraits(new FT_Flammable(25_000), LIQUID); + AROMATICS = new FluidType("AROMATICS", 0x68A09A, 1, 4, 1, EnumSymbol.NONE).addTraits(new FT_Flammable(25_000), LIQUID, VISCOUS); UNSATURATEDS = new FluidType("UNSATURATEDS", 0x628FAE, 1, 4, 1, EnumSymbol.NONE).addTraits(new FT_Flammable(1_000_000), GASEOUS); //acetylene burns as hot as satan's asshole - SALIENT = new FluidType("SALIENT", 0x457F2D, 0, 0, 0, EnumSymbol.NONE).addTraits(DELICIOUS, LIQUID); - XPJUICE = new FluidType("XPJUICE", 0xBBFF09, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - ENDERJUICE = new FluidType("ENDERJUICE", 0x127766, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); + SALIENT = new FluidType("SALIENT", 0x457F2D, 0, 0, 0, EnumSymbol.NONE).addTraits(DELICIOUS, LIQUID, VISCOUS); + XPJUICE = new FluidType("XPJUICE", 0xBBFF09, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); + ENDERJUICE = new FluidType("ENDERJUICE", 0x127766, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); PETROIL_LEADED = new FluidType("PETROIL_LEADED", 0x44413d, 1, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2331F6)).addTraits(new FT_Flammable(125_000), new FT_Combustible(FuelGrade.MEDIUM, 450_000), LIQUID); GASOLINE_LEADED = new FluidType("GASOLINE_LEADED", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x2F775A)).addTraits(new FT_Flammable(400_000), new FT_Combustible(FuelGrade.HIGH, 1_500_000), LIQUID); COALGAS_LEADED = new FluidType("COALGAS_LEADED", 0x445772, 1, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x1E155F)).addTraits(new FT_Flammable(75_000), new FT_Combustible(FuelGrade.MEDIUM, 250_000), LIQUID); @@ -226,32 +233,31 @@ public class Fluids { COOLANT_HOT = new FluidType("COOLANT_HOT", 0x99525E, 1, 0, 0, EnumSymbol.NONE).setTemp(600).addTraits(LIQUID); MUG = new FluidType("MUG", 0x4B2D28, 0, 0, 0, EnumSymbol.NONE).addTraits(DELICIOUS, LIQUID); MUG_HOT = new FluidType("MUG_HOT", 0x6B2A20, 0, 0, 0, EnumSymbol.NONE).setTemp(500).addTraits(DELICIOUS, LIQUID); - WOODOIL = new FluidType("WOODOIL", 0x847D54, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xBF7E4F)).addTraits(LIQUID); - COALCREOSOTE = new FluidType("COALCREOSOTE", 0x51694F, 3, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x285A3F)).addTraits(LIQUID); - SEEDSLURRY = new FluidType("SEEDSLURRY", 0x7CC35E, 0, 0, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x7CC35E)).addTraits(LIQUID); + WOODOIL = new FluidType("WOODOIL", 0x847D54, 2, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xBF7E4F)).addTraits(LIQUID, VISCOUS); + COALCREOSOTE = new FluidType("COALCREOSOTE", 0x51694F, 3, 2, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x285A3F)).addTraits(LIQUID, VISCOUS); + SEEDSLURRY = new FluidType("SEEDSLURRY", 0x7CC35E, 0, 0, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0x7CC35E)).addTraits(LIQUID, VISCOUS); NITRIC_ACID = new FluidType("NITRIC_ACID", 0xBB7A1E, 3, 0, 2, EnumSymbol.OXIDIZER).addTraits(LIQUID, new FT_Corrosive(60)); SOLVENT = new FluidType("SOLVENT", 0xE4E3EF, 2, 3, 0, EnumSymbol.NONE).addContainers(new CD_Canister(0xE4E3EF)).addTraits(LIQUID, new FT_Corrosive(30)); - BLOOD = new FluidType("BLOOD", 0xB22424, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); - BLOOD_HOT = new FluidType("BLOOD_HOT", 0xF22419, 3, 0, 0, EnumSymbol.NONE).addTraits(LIQUID).setTemp(666); //it's funny because it's the satan number + BLOOD = new FluidType("BLOOD", 0xB22424, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); + BLOOD_HOT = new FluidType("BLOOD_HOT", 0xF22419, 3, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).setTemp(666); //it's funny because it's the satan number SYNGAS = new FluidType("SYNGAS", 0x131313, 1, 4, 2, EnumSymbol.NONE).addContainers(new CD_Gastank(0xFFFFFF, 0x131313)).addTraits(GASEOUS); OXYHYDROGEN = new FluidType("OXYHYDROGEN", 0x483FC1, 0, 4, 2, EnumSymbol.NONE).addTraits(GASEOUS); RADIOSOLVENT = new FluidType("RADIOSOLVENT", 0xA4D7DD, 3, 3, 0, EnumSymbol.NONE).addTraits(LIQUID, LEADCON, new FT_Corrosive(50), new FT_VentRadiation(0.01F)); CHLORINE = new FluidType("CHLORINE", 0xBAB572, 3, 0, 0, EnumSymbol.OXIDIZER).addContainers(new CD_Gastank(0xBAB572, 0x887B34)).addTraits(GASEOUS, new FT_Corrosive(25), new FT_Poison(true, 1)); - HEAVYOIL_VACUUM = new FluidType("HEAVYOIL_VACUUM", 0x131214, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0x513F39)); - REFORMATE = new FluidType("REFORMATE", 0x835472, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xD180D6)); + HEAVYOIL_VACUUM = new FluidType("HEAVYOIL_VACUUM", 0x131214, 2, 1, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).addContainers(new CD_Canister(0x513F39)); + REFORMATE = new FluidType("REFORMATE", 0x835472, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).addContainers(new CD_Canister(0xD180D6)); LIGHTOIL_VACUUM = new FluidType("LIGHTOIL_VACUUM", 0x8C8851, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xB46B52)); SOURGAS = new FluidType("SOURGAS", 0xC9BE0D, 4, 4, 0, EnumSymbol.ACID).addContainers(new CD_Gastank(0xC9BE0D, 0x303030)).addTraits(GASEOUS, new FT_Corrosive(10), new FT_Poison(false, 1)); - XYLENE = new FluidType("XYLENE", 0x5C4E76, 2, 3, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xA380D6)); - HEATINGOIL_VACUUM = new FluidType("HEATINGOIL_VACUUM", 0x211D06, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0x694235)); + XYLENE = new FluidType("XYLENE", 0x5C4E76, 2, 3, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).addContainers(new CD_Canister(0xA380D6)); + HEATINGOIL_VACUUM = new FluidType("HEATINGOIL_VACUUM", 0x211D06, 2, 2, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS).addContainers(new CD_Canister(0x694235)); DIESEL_REFORM = new FluidType("DIESEL_REFORM", 0xCDC3C6, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xFFC500)); DIESEL_CRACK_REFORM = new FluidType("DIESEL_CRACK_REFORM",0xCDC3CC, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xFFC500)); KEROSENE_REFORM = new FluidType("KEROSENE_REFORM", 0xFFA5F3, 1, 2, 0, EnumSymbol.NONE).addTraits(LIQUID).addContainers(new CD_Canister(0xFF377D)); REFORMGAS = new FluidType("REFORMGAS", 0x6362AE, 1, 4, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0x9392FF, 0xFFB992)).addTraits(GASEOUS); - COLLOID = new FluidType("COLLOID", 0x787878, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID); + COLLOID = new FluidType("COLLOID", 0x787878, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); PHOSGENE = new FluidType("PHOSGENE", 0xCFC4A4, 4, 0, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xCFC4A4, 0x361414)).addTraits(GASEOUS); MUSTARDGAS = new FluidType("MUSTARDGAS", 0xBAB572, 4, 1, 1, EnumSymbol.NONE).addContainers(new CD_Gastank(0xBAB572, 0x361414)).addTraits(GASEOUS); - IONGEL = new FluidType(103, "IONGEL", 0xB8FFFF, 1, 0, 4, EnumSymbol.NONE).addTraits(LIQUID); - + IONGEL = new FluidType(103, "IONGEL", 0xB8FFFF, 1, 0, 4, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS); // ^ ^ ^ ^ ^ ^ ^ ^ //ADD NEW FLUIDS HERE @@ -376,6 +382,11 @@ public class Fluids { metaOrder.add(PLASMA_XM); metaOrder.add(PLASMA_BF); + CHLORINE.addTraits(new FT_Toxin().addEntry(new ToxinDirectDamage(ModDamageSource.cloud, 2F, 20, HazardClass.GAS_CHLORINE, false))); + PHOSGENE.addTraits(new FT_Toxin().addEntry(new ToxinDirectDamage(ModDamageSource.cloud, 4F, 20, HazardClass.GAS_CHLORINE, false))); + MUSTARDGAS.addTraits(new FT_Toxin().addEntry(new ToxinDirectDamage(ModDamageSource.cloud, 4F, 10, HazardClass.GAS_CORROSIVE, false)) + .addEntry(new ToxinEffects(HazardClass.GAS_CORROSIVE, true).add(new PotionEffect(Potion.wither.id, 100, 1), new PotionEffect(Potion.confusion.id, 100, 0)))); + double eff_steam_boil = 1.0D; double eff_steam_heatex = 0.25D; diff --git a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java index 5e7d9187f..5d67bb325 100644 --- a/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java +++ b/src/main/java/com/hbm/inventory/fluid/tank/FluidTank.java @@ -53,6 +53,10 @@ public class FluidTank { public void setTankType(FluidType type) { + if(type == null) { + type = Fluids.NONE; + } + if(this.type == type) return; @@ -85,16 +89,16 @@ public class FluidTank { } //Called on TE update - public void updateTank(TileEntity te) { + @Deprecated public void updateTank(TileEntity te) { updateTank(te, 100); } - public void updateTank(TileEntity te, int range) { + @Deprecated public void updateTank(TileEntity te, int range) { updateTank(te.xCoord, te.yCoord, te.zCoord, te.getWorldObj().provider.dimensionId, range); } - public void updateTank(int x, int y, int z, int dim) { + @Deprecated public void updateTank(int x, int y, int z, int dim) { updateTank(x, y, z, dim, 100); } - public void updateTank(int x, int y, int z, int dim, int range) { + @Deprecated public void updateTank(int x, int y, int z, int dim, int range) { PacketDispatcher.wrapper.sendToAllAround(new TEFluidPacket(x, y, z, fluid, index, type), new TargetPoint(dim, x, y, z, range)); } diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Poison.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Poison.java index a8154c1f5..2c176bc3e 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FT_Poison.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Poison.java @@ -4,6 +4,7 @@ import java.util.List; import net.minecraft.util.EnumChatFormatting; +@Deprecated //use FT_Toxin instead public class FT_Poison extends FluidTrait { protected boolean withering = false; diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java b/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java new file mode 100644 index 000000000..456b8e0a8 --- /dev/null +++ b/src/main/java/com/hbm/inventory/fluid/trait/FT_Toxin.java @@ -0,0 +1,133 @@ +package com.hbm.inventory.fluid.trait; + +import java.util.ArrayList; +import java.util.List; + +import com.hbm.util.ArmorRegistry; +import com.hbm.util.ArmorUtil; +import com.hbm.util.I18nUtil; +import com.hbm.util.ArmorRegistry.HazardClass; + +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; +import net.minecraft.util.StringUtils; + +public class FT_Toxin extends FluidTrait { + + public List entries = new ArrayList(); + + public FT_Toxin addEntry(ToxinEntry entry) { + entries.add(entry); + return this; + } + + @Override + public void addInfoHidden(List info) { + info.add(EnumChatFormatting.LIGHT_PURPLE + "[Toxin]"); + + for(ToxinEntry entry : entries) { + entry.addInfo(info); + } + } + + public void affect(EntityLivingBase entity, double intensity) { + + for(ToxinEntry entry : entries) { + entry.poison(entity, intensity); + } + } + + public static abstract class ToxinEntry { + + public HazardClass clazz; + public boolean fullBody = false; + + public ToxinEntry(HazardClass clazz, boolean fullBody) { + this.clazz = clazz; + this.fullBody = fullBody; + } + + public boolean isProtected(EntityLivingBase entity) { + + boolean hasMask = clazz == null; + boolean hasSuit = !fullBody; + + if(clazz != null && ArmorRegistry.hasAllProtection(entity, 3, clazz)) { + ArmorUtil.damageGasMaskFilter(entity, 1); + hasMask = true; + } + + if(fullBody && ArmorUtil.checkForHazmat(entity)) { + hasSuit = true; + } + + return hasMask && hasSuit; + } + + public abstract void poison(EntityLivingBase entity, double intensity); + public abstract void addInfo(List info); + } + + public static class ToxinDirectDamage extends ToxinEntry { + + public DamageSource damage; + public float amount; + public int delay; + + public ToxinDirectDamage(DamageSource damage, float amount, int delay, HazardClass clazz, boolean fullBody) { + super(clazz, fullBody); + this.damage = damage; + this.amount = amount; + this.delay = delay; + } + + @Override + public void poison(EntityLivingBase entity, double intensity) { + + if(isProtected(entity)) return; + + if(delay == 0 || entity.worldObj.getTotalWorldTime() % delay == 0) { + entity.attackEntityFrom(damage, (float) (amount * intensity)); + } + } + + @Override + public void addInfo(List info) { + info.add(EnumChatFormatting.YELLOW + "- " + I18nUtil.resolveKey(clazz.lang) + (fullBody ? EnumChatFormatting.RED + " (requires hazmat suit)" : "") + ": " + EnumChatFormatting.YELLOW + String.format("%,.1f", amount * 20 / delay) + " DPS"); + } + } + + public static class ToxinEffects extends ToxinEntry { + + public List effects = new ArrayList(); + + public ToxinEffects(HazardClass clazz, boolean fullBody) { + super(clazz, fullBody); + } + + public ToxinEffects add(PotionEffect... effs) { + for(PotionEffect eff : effs) this.effects.add(eff); + return this; + } + + @Override + public void poison(EntityLivingBase entity, double intensity) { + + for(PotionEffect eff : effects) { + entity.addPotionEffect(new PotionEffect(eff.getPotionID(), (int) (eff.getDuration() * intensity), eff.getAmplifier())); + } + } + + @Override + public void addInfo(List info) { + info.add(EnumChatFormatting.YELLOW + "- " + I18nUtil.resolveKey(clazz.lang) + (fullBody ? EnumChatFormatting.RED + " (requires hazmat suit)" + EnumChatFormatting.YELLOW : "") + ":"); + + for(PotionEffect eff : effects) { + info.add(EnumChatFormatting.YELLOW + " - " + I18nUtil.resolveKey(eff.getEffectName()) + (eff.getAmplifier() > 0 ? " " + StatCollector.translateToLocal("potion.potency." + eff.getAmplifier()).trim() : "") + " " + StringUtils.ticksToElapsedTime(eff.getDuration())); + } + } + } +} diff --git a/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java b/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java index 908005f68..319a7e6d4 100644 --- a/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java +++ b/src/main/java/com/hbm/inventory/fluid/trait/FluidTraitSimple.java @@ -12,7 +12,8 @@ public class FluidTraitSimple { } } - public static class FT_Gaseous_ART extends FluidTrait { //at room temperature, for cryogenic hydrogen for example + /** gaseous at room temperature, for cryogenic hydrogen for example */ + public static class FT_Gaseous_ART extends FluidTrait { @Override public void addInfoHidden(List info) { info.add(EnumChatFormatting.BLUE + "[Gaseous at Room Temperature]"); } @@ -24,6 +25,13 @@ public class FluidTraitSimple { } } + /** to viscous to be sprayed/turned into a mist */ + public static class FT_Viscous extends FluidTrait { + @Override public void addInfoHidden(List info) { + info.add(EnumChatFormatting.BLUE + "[Viscous]"); + } + } + public static class FT_Plasma extends FluidTrait { @Override public void addInfoHidden(List info) { info.add(EnumChatFormatting.LIGHT_PURPLE + "[Plasma]"); diff --git a/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java b/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java index ea927d377..e6937c829 100644 --- a/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java +++ b/src/main/java/com/hbm/inventory/gui/GUICraneExtractor.java @@ -22,11 +22,11 @@ import net.minecraft.util.ResourceLocation; public class GUICraneExtractor extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_crane_ejector.png"); - private TileEntityCraneExtractor inserter; + private TileEntityCraneExtractor ejector; public GUICraneExtractor(InventoryPlayer invPlayer, TileEntityCraneExtractor tedf) { super(new ContainerCraneExtractor(invPlayer, tedf)); - inserter = tedf; + ejector = tedf; this.xSize = 176; this.ySize = 185; @@ -40,14 +40,14 @@ public class GUICraneExtractor extends GuiInfoContainer { for(int i = 0; i < 9; ++i) { Slot slot = (Slot) this.inventorySlots.inventorySlots.get(i); - if(this.isMouseOverSlot(slot, x, y) && inserter.matcher.modes[i] != null) { + if(this.isMouseOverSlot(slot, x, y) && ejector.matcher.modes[i] != null) { String label = EnumChatFormatting.YELLOW + ""; - switch(inserter.matcher.modes[i]) { + switch(ejector.matcher.modes[i]) { case "exact": label += "Item and meta match"; break; case "wildcard": label += "Item matches"; break; - default: label += "Ore dict key matches: " + inserter.matcher.modes[i]; break; + default: label += "Ore dict key matches: " + ejector.matcher.modes[i]; break; } this.func_146283_a(Arrays.asList(new String[] { EnumChatFormatting.RED + "Right click to change", label }), x, y - 30); @@ -65,13 +65,13 @@ public class GUICraneExtractor extends GuiInfoContainer { mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); NBTTagCompound data = new NBTTagCompound(); data.setBoolean("whitelist", true); - PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, inserter.xCoord, inserter.yCoord, inserter.zCoord)); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, ejector.xCoord, ejector.yCoord, ejector.zCoord)); } } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { - String name = this.inserter.hasCustomInventoryName() ? this.inserter.getInventoryName() : I18n.format(this.inserter.getInventoryName()); + String name = this.ejector.hasCustomInventoryName() ? this.ejector.getInventoryName() : I18n.format(this.ejector.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); } @@ -82,7 +82,7 @@ public class GUICraneExtractor extends GuiInfoContainer { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - if(inserter.isWhitelist) { + if(ejector.isWhitelist) { drawTexturedModalRect(guiLeft + 139, guiTop + 33, 176, 0, 3, 6); } else { drawTexturedModalRect(guiLeft + 139, guiTop + 47, 176, 0, 3, 6); diff --git a/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java b/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java new file mode 100644 index 000000000..ef1465205 --- /dev/null +++ b/src/main/java/com/hbm/inventory/gui/GUICraneGrabber.java @@ -0,0 +1,91 @@ +package com.hbm.inventory.gui; + +import java.util.Arrays; + +import org.lwjgl.opengl.GL11; + +import com.hbm.inventory.container.ContainerCraneGrabber; +import com.hbm.lib.RefStrings; +import com.hbm.packet.NBTControlPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.tileentity.network.TileEntityCraneGrabber; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.inventory.Slot; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.ResourceLocation; + +public class GUICraneGrabber extends GuiInfoContainer { + + private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/storage/gui_crane_grabber.png"); + private TileEntityCraneGrabber grabber; + + public GUICraneGrabber(InventoryPlayer invPlayer, TileEntityCraneGrabber tedf) { + super(new ContainerCraneGrabber(invPlayer, tedf)); + grabber = tedf; + + this.xSize = 176; + this.ySize = 185; + } + + @Override + public void drawScreen(int x, int y, float interp) { + super.drawScreen(x, y, interp); + + if(this.mc.thePlayer.inventory.getItemStack() == null) { + for(int i = 0; i < 9; ++i) { + Slot slot = (Slot) this.inventorySlots.inventorySlots.get(i); + + if(this.isMouseOverSlot(slot, x, y) && grabber.matcher.modes[i] != null) { + + String label = EnumChatFormatting.YELLOW + ""; + + switch(grabber.matcher.modes[i]) { + case "exact": label += "Item and meta match"; break; + case "wildcard": label += "Item matches"; break; + default: label += "Ore dict key matches: " + grabber.matcher.modes[i]; break; + } + + this.func_146283_a(Arrays.asList(new String[] { EnumChatFormatting.RED + "Right click to change", label }), x, y - 30); + } + } + } + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 97 <= x && guiLeft + 97 + 14 > x && guiTop + 30 < y && guiTop + 30 + 26 >= y) { + + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1.0F)); + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("whitelist", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(data, grabber.xCoord, grabber.yCoord, grabber.zCoord)); + } + } + + @Override + protected void drawGuiContainerForegroundLayer(int i, int j) { + String name = this.grabber.hasCustomInventoryName() ? this.grabber.getInventoryName() : I18n.format(this.grabber.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); + + if(grabber.isWhitelist) { + drawTexturedModalRect(guiLeft + 108, guiTop + 33, 176, 0, 3, 6); + } else { + drawTexturedModalRect(guiLeft + 108, guiTop + 47, 176, 0, 3, 6); + } + } +} diff --git a/src/main/java/com/hbm/inventory/gui/GUIWatz.java b/src/main/java/com/hbm/inventory/gui/GUIWatz.java index db0cbc54b..5153b1032 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIWatz.java +++ b/src/main/java/com/hbm/inventory/gui/GUIWatz.java @@ -4,11 +4,18 @@ import org.lwjgl.opengl.GL11; import com.hbm.inventory.container.ContainerWatz; import com.hbm.lib.RefStrings; +import com.hbm.packet.NBTControlPacket; +import com.hbm.packet.PacketDispatcher; +import com.hbm.render.util.GaugeUtil; +import com.hbm.render.util.GaugeUtil.Gauge; import com.hbm.tileentity.machine.TileEntityWatz; import net.minecraft.client.Minecraft; +import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.InventoryPlayer; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; import net.minecraft.util.ResourceLocation; public class GUIWatz extends GuiInfoContainer { @@ -40,16 +47,31 @@ public class GUIWatz extends GuiInfoContainer { protected void drawGuiContainerForegroundLayer(int i, int j) { this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 93, 4210752); - String flux = "" + ((int)(watz.fluxDisplay * 10)) / 10.0D; - this.fontRendererObj.drawString(flux, 159 - this.fontRendererObj.getStringWidth(flux), 105, 0x00ff00); + double scale = 1.25; + String flux = String.format("%,.1f", watz.fluxDisplay); + GL11.glScaled(1 / scale, 1 / scale, 1); + this.fontRendererObj.drawString(flux, (int) (161 * scale - this.fontRendererObj.getStringWidth(flux)), (int)(107 * scale), 0x00ff00); + GL11.glScaled(scale, scale, 1); + } + + @Override + protected void mouseClicked(int x, int y, int i) { + super.mouseClicked(x, y, i); + + if(guiLeft + 142 <= x && guiLeft + 142 + 18 > x && guiTop + 70 < y && guiTop + 70 + 18 >= y) { + NBTTagCompound control = new NBTTagCompound(); + control.setBoolean("lock", true); + PacketDispatcher.wrapper.sendToServer(new NBTControlPacket(control, watz.xCoord, watz.yCoord, watz.zCoord)); + mc.getSoundHandler().playSound(PositionedSoundRecord.func_147674_a(new ResourceLocation("gui.button.press"), 1F)); + } } @Override protected void drawGuiContainerBackgroundLayer(float interp, int x, int y) { Minecraft.getMinecraft().getTextureManager().bindTexture(texture); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - //float col = (float) (Math.sin(System.currentTimeMillis() / 500D) * 0.5 + 0.5); - //GL11.glColor4f(1.0F, col, col, 1.0F); + float col = MathHelper.clamp_float(1 - (float) Math.log(watz.heat / 100_000D + 1) * 0.4F, 0F, 1F); + GL11.glColor4f(1.0F, col, col, 1.0F); drawTexturedModalRect(guiLeft, guiTop, 0, 0, 131, 122); GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); @@ -59,6 +81,11 @@ public class GUIWatz extends GuiInfoContainer { drawTexturedModalRect(guiLeft + 105, guiTop + 96, 185, 26, 30, 26); drawTexturedModalRect(guiLeft + 9, guiTop + 96, 184, 0, 26, 26); + if(watz.isOn) drawTexturedModalRect(guiLeft + 147, guiTop + 8, 176, 0, 8, 8); + if(watz.isLocked) drawTexturedModalRect(guiLeft + 142, guiTop + 70, 210, 0, 18, 18); + + GaugeUtil.renderGauge(Gauge.ROUND_SMALL, guiLeft + 13, guiTop + 100, this.zLevel, 1 - col); + watz.tanks[0].renderTank(guiLeft + 143, guiTop + 69, this.zLevel, 4, 43); watz.tanks[1].renderTank(guiLeft + 149, guiTop + 69, this.zLevel, 4, 43); watz.tanks[2].renderTank(guiLeft + 155, guiTop + 69, this.zLevel, 4, 43); diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 665a65372..f6b839d9e 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -114,15 +114,15 @@ public class Mats { public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setShapes(WIRE, INGOT, DUST, PLATE, CASTPLATE, BLOCK); public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x183039, 0x030B0B, 0x376373).setShapes(INGOT, DUST, BLOCK); public static final NTMMaterial MAT_SATURN = makeSmeltable(_AS + 4, BIGMT, 0x4DA3AF, 0x00000C, 0x4DA3AF).setShapes(INGOT, DUST, BLOCK); + public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setShapes(INGOT, DUST, CASTPLATE, BLOCK); public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setShapes(INGOT, DUST, BLOCK); - public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setShapes(INGOT, DUST, CASTPLATE); public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).setShapes(INGOT); + public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setShapes(INGOT, DUST, CASTPLATE); + public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setShapes(INGOT, CASTPLATE); public static final NTMMaterial MAT_MAGTUNG = makeSmeltable(_AS + 8, MAGTUNG, 0x22A2A2, 0x0F0F0F, 0x22A2A2).setShapes(INGOT, DUST, BLOCK); public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setShapes(INGOT, DUST, PLATE, CASTPLATE, BLOCK); public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setShapes(DUST); public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setShapes(BLOCK); - public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setShapes(INGOT, DUST, CASTPLATE, BLOCK); - public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setShapes(INGOT, CASTPLATE); @Deprecated public static NTMMaterial makeSmeltable(int id, DictFrame dict, int color) { return makeSmeltable(id, dict, color, color, color); } @Deprecated public static NTMMaterial makeAdditive(int id, DictFrame dict, int color) { return makeAdditive(id, dict, color, color, color); } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index b3e31dae2..c067c89db 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -304,11 +304,8 @@ public class AssemblerRecipes { makeRecipe(new ComparableStack(ModBlocks.fusion_motor, 1), new AStack[] {new OreDictStack(TI.ingot(), 4), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.motor, 4), },250); makeRecipe(new ComparableStack(ModBlocks.fusion_heater, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(STEEL.plate528(), 2), new OreDictStack(OreDictManager.getReflector(), 2), new OreDictStack(CU.plate(), 4), new ComparableStack(ModItems.magnetron, 1), new ComparableStack(ModItems.wire_advanced_alloy, 4), },150); makeRecipe(new ComparableStack(ModBlocks.watz_element, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(ALLOY.plate(), 4), new ComparableStack(ModItems.rod_empty, 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 2), new ComparableStack(ModItems.wire_advanced_alloy, 4), },200); - makeRecipe(new ComparableStack(ModBlocks.watz_control, 1), new AStack[] {new OreDictStack(W.ingot(), 4), new OreDictStack(ALLOY.ingot(), 4), new OreDictStack(PB.ingot(), 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 4), new ComparableStack(ModItems.wire_advanced_alloy, 2), },250); makeRecipe(new ComparableStack(ModBlocks.watz_cooler, 1), new AStack[] {new OreDictStack(W.ingot(), 2), new OreDictStack(STEEL.ingot(), 2), new OreDictStack(KNO.dust(), 4), },300); - makeRecipe(new ComparableStack(ModBlocks.watz_end, 1), new AStack[] {new OreDictStack(W.ingot(), 2), new OreDictStack(PB.ingot(), 2), new OreDictStack(STEEL.ingot(), 3), },150); - makeRecipe(new ComparableStack(ModBlocks.watz_hatch, 1), new AStack[] {new ComparableStack(ModBlocks.reinforced_brick, 1), new OreDictStack(TI.plate(), 6), },200); - makeRecipe(new ComparableStack(ModBlocks.watz_conductor, 1), new AStack[] {new OreDictStack(W.ingot(), 2), new OreDictStack(PB.ingot(), 2), new OreDictStack(STEEL.ingot(), 2), new ComparableStack(ModItems.wire_red_copper, 6), new ComparableStack(ModItems.wire_magnetized_tungsten, 2), new ComparableStack(ModItems.fuse, 4), },250); + makeRecipe(new ComparableStack(ModBlocks.watz_end, 3), new AStack[] {new OreDictStack(ANY_RESISTANTALLOY.plateTriple()), new OreDictStack(B.ingot(), 3), new OreDictStack(STEEL.plate(), 9), }, 100); makeRecipe(new ComparableStack(ModBlocks.watz_core, 1), new AStack[] {new ComparableStack(ModBlocks.block_meteor, 1), new ComparableStack(ModItems.circuit_gold, 5), new ComparableStack(ModItems.circuit_schrabidium, 2), new ComparableStack(ModItems.wire_magnetized_tungsten, 12), },350); makeRecipe(new ComparableStack(ModBlocks.fwatz_hatch, 1), new AStack[] {new OreDictStack(W.ingot(), 6), new OreDictStack(CMB.plate(), 4), },250); makeRecipe(new ComparableStack(ModBlocks.fwatz_conductor, 1), new AStack[] {new OreDictStack(CMB.plate(), 2), new ComparableStack(ModItems.coil_magnetized_tungsten, 5), },250); diff --git a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java index d36b1ad1e..3569d3c52 100644 --- a/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CentrifugeRecipes.java @@ -12,6 +12,7 @@ import com.google.gson.stream.JsonWriter; import com.hbm.blocks.ModBlocks; import com.hbm.config.GeneralConfig; import com.hbm.handler.imc.IMCCentrifuge; +import static com.hbm.inventory.OreDictManager.*; import com.hbm.inventory.OreDictManager.DictFrame; import com.hbm.inventory.RecipesCommon; import com.hbm.inventory.RecipesCommon.AStack; @@ -140,115 +141,115 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.dust, 1), new ItemStack(ModItems.dust, 1) }); - recipes.put(new OreDictStack("oreCoal"), new ItemStack[] { + recipes.put(new OreDictStack(COAL.ore()), new ItemStack[] { new ItemStack(ModItems.powder_coal, 2), new ItemStack(ModItems.powder_coal, 2), new ItemStack(ModItems.powder_coal, 2), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreLignite"), new ItemStack[] { + recipes.put(new OreDictStack(LIGNITE.ore()), new ItemStack[] { new ItemStack(ModItems.powder_lignite, 2), new ItemStack(ModItems.powder_lignite, 2), new ItemStack(ModItems.powder_lignite, 2), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreIron"), new ItemStack[] { + recipes.put(new OreDictStack(IRON.ore()), new ItemStack[] { new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_iron, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreGold"), new ItemStack[] { + recipes.put(new OreDictStack(GOLD.ore()), new ItemStack[] { lbs ? new ItemStack(ModItems.powder_gold, 2) : new ItemStack(ModItems.powder_gold, 1), new ItemStack(ModItems.powder_gold, 1), lbs ? new ItemStack(ModItems.nugget_bismuth, 1) : new ItemStack(ModItems.powder_gold, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreDiamond"), new ItemStack[] { + recipes.put(new OreDictStack(DIAMOND.ore()), new ItemStack[] { new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), new ItemStack(ModItems.powder_diamond, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreEmerald"), new ItemStack[] { + recipes.put(new OreDictStack(EMERALD.ore()), new ItemStack[] { new ItemStack(ModItems.powder_emerald, 1), new ItemStack(ModItems.powder_emerald, 1), new ItemStack(ModItems.powder_emerald, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreTitanium"), new ItemStack[] { + recipes.put(new OreDictStack(TI.ore()), new ItemStack[] { lbs ? new ItemStack(ModItems.powder_titanium, 2) : new ItemStack(ModItems.powder_titanium, 1), lbs ? new ItemStack(ModItems.powder_titanium, 2) : new ItemStack(ModItems.powder_titanium, 1), new ItemStack(ModItems.powder_iron, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreQuartz"), new ItemStack[] { + recipes.put(new OreDictStack(NETHERQUARTZ.ore()), new ItemStack[] { new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.powder_quartz, 1), new ItemStack(ModItems.powder_lithium_tiny, 1), new ItemStack(Blocks.netherrack, 1) }); - recipes.put(new OreDictStack("oreTungsten"), new ItemStack[] { + recipes.put(new OreDictStack(W.ore()), new ItemStack[] { lbs ? new ItemStack(ModItems.powder_tungsten, 2) : new ItemStack(ModItems.powder_tungsten, 1), new ItemStack(ModItems.powder_tungsten, 1), new ItemStack(ModItems.powder_iron, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreCopper"), new ItemStack[] { + recipes.put(new OreDictStack(CU.ore()), new ItemStack[] { lbs ? new ItemStack(ModItems.powder_copper, 2) : new ItemStack(ModItems.powder_copper, 1), new ItemStack(ModItems.powder_copper, 1), new ItemStack(ModItems.powder_gold, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreAluminum"), new ItemStack[] { + recipes.put(new OreDictStack(AL.ore()), new ItemStack[] { new ItemStack(ModItems.powder_aluminium, 1), new ItemStack(ModItems.powder_aluminium, 1), new ItemStack(ModItems.powder_iron, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreLead"), new ItemStack[] { + recipes.put(new OreDictStack(PB.ore()), new ItemStack[] { lbs ? new ItemStack(ModItems.powder_lead, 2) : new ItemStack(ModItems.powder_lead, 1), lbs ? new ItemStack(ModItems.nugget_bismuth, 1) : new ItemStack(ModItems.powder_lead, 1), new ItemStack(ModItems.powder_gold, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreSchrabidium"), new ItemStack[] { + recipes.put(new OreDictStack(SA326.ore()), new ItemStack[] { new ItemStack(ModItems.powder_schrabidium, 1), new ItemStack(ModItems.powder_schrabidium, 1), new ItemStack(ModItems.nugget_solinium, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new ComparableStack(ModBlocks.ore_rare), new ItemStack[] { + recipes.put(new OreDictStack("oreRareEarth"), new ItemStack[] { new ItemStack(ModItems.powder_desh_mix, 1), new ItemStack(ModItems.nugget_zirconium, 1), new ItemStack(ModItems.nugget_zirconium, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("orePlutonium"), new ItemStack[] { + recipes.put(new OreDictStack(PU.ore()), new ItemStack[] { new ItemStack(ModItems.powder_plutonium, 1), new ItemStack(ModItems.powder_plutonium, 1), new ItemStack(ModItems.nugget_polonium, 3), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreUranium"), new ItemStack[] { + recipes.put(new OreDictStack(U.ore()), new ItemStack[] { lbs ? new ItemStack(ModItems.powder_uranium, 2) : new ItemStack(ModItems.powder_uranium, 1), lbs ? new ItemStack(ModItems.nugget_technetium, 2) : new ItemStack(ModItems.powder_uranium, 1), lbs ? new ItemStack(ModItems.nugget_ra226, 2) : new ItemStack(ModItems.nugget_ra226, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreThorium"), new ItemStack[] { + recipes.put(new OreDictStack(TH232.ore()), new ItemStack[] { new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_thorium, 1), new ItemStack(ModItems.powder_uranium, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreBeryllium"), new ItemStack[] { + recipes.put(new OreDictStack(BE.ore()), new ItemStack[] { new ItemStack(ModItems.powder_beryllium, 1), new ItemStack(ModItems.powder_beryllium, 1), new ItemStack(ModItems.powder_emerald, 1), new ItemStack(Blocks.gravel, 1) }); - recipes.put(new OreDictStack("oreRedstone"), new ItemStack[] { + recipes.put(new OreDictStack(REDSTONE.ore()), new ItemStack[] { new ItemStack(Items.redstone, 3), new ItemStack(Items.redstone, 3), lbs ? new ItemStack(ModItems.ingot_mercury, 3) : new ItemStack(ModItems.ingot_mercury, 1), @@ -260,7 +261,7 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.powder_niobium, 2), new ItemStack(Blocks.end_stone, 1) }); - recipes.put(new OreDictStack("oreLapis"), new ItemStack[] { + recipes.put(new OreDictStack(LAPIS.ore()), new ItemStack[] { new ItemStack(ModItems.powder_lapis, 3), new ItemStack(ModItems.powder_lapis, 3), new ItemStack(ModItems.powder_cobalt_tiny, 1), @@ -284,7 +285,7 @@ public class CentrifugeRecipes extends SerializableRecipe { new ItemStack(ModItems.ingot_phosphorus), new ItemStack(Blocks.netherrack) }); - recipes.put(new OreDictStack("oreCobalt"), new ItemStack[] { + recipes.put(new OreDictStack(CO.ore()), new ItemStack[] { new ItemStack(ModItems.powder_cobalt, 2), new ItemStack(ModItems.powder_iron, 1), new ItemStack(ModItems.powder_copper, 1), diff --git a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java index c4930766a..070e9f221 100644 --- a/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CrystallizerRecipes.java @@ -140,13 +140,19 @@ public class CrystallizerRecipes extends SerializableRecipe { registerRecipe(KEY_SAND, new CrystallizerRecipe(Blocks.clay, 20), new FluidStack(Fluids.COLLOID, 1_000)); + /// COMPAT CERTUS QUARTZ /// List quartz = OreDictionary.getOres("crystalCertusQuartz"); - if(quartz != null && !quartz.isEmpty()) { ItemStack qItem = quartz.get(0).copy(); qItem.stackSize = 12; registerRecipe("oreCertusQuartz", new CrystallizerRecipe(qItem, baseTime)); } + + /// COMPAT WHITE PHOSPHORUS DUST /// + List dustWhitePhosphorus = OreDictionary.getOres(P_WHITE.dust()); + if(dustWhitePhosphorus != null && !dustWhitePhosphorus.isEmpty()) { + registerRecipe(P_WHITE.dust(), new CrystallizerRecipe(new ItemStack(ModItems.ingot_phosphorus), utilityTime), new FluidStack(Fluids.AROMATICS, 50)); + } if(!IMCCrystallizer.buffer.isEmpty()) { recipes.putAll(IMCCrystallizer.buffer); diff --git a/src/main/java/com/hbm/inventory/recipes/CyclotronRecipes.java b/src/main/java/com/hbm/inventory/recipes/CyclotronRecipes.java index d552e73d6..f5030c34f 100644 --- a/src/main/java/com/hbm/inventory/recipes/CyclotronRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/CyclotronRecipes.java @@ -10,6 +10,7 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.stream.JsonWriter; +import static com.hbm.inventory.OreDictManager.*; import com.hbm.inventory.RecipesCommon.AStack; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.OreDictStack; @@ -41,8 +42,8 @@ public class CyclotronRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack("dustPolonium"), new ItemStack(ModItems.powder_astatine), liA); makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack("dustLanthanium"), new ItemStack(ModItems.powder_cerium), liA); makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack("dustActinium"), new ItemStack(ModItems.powder_thorium), liA); - makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack("dustUranium"), new ItemStack(ModItems.powder_neptunium), liA); - makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack("dustNeptunium"), new ItemStack(ModItems.powder_plutonium), liA); + makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack(U.dust()), new ItemStack(ModItems.powder_neptunium), liA); + makeRecipe(new ComparableStack(ModItems.part_lithium), new OreDictStack(NP237.dust()), new ItemStack(ModItems.powder_plutonium), liA); makeRecipe(new ComparableStack(ModItems.part_lithium), new ComparableStack(ModItems.powder_reiium), new ItemStack(ModItems.powder_weidanium), liA); /// LITHIUM END /// @@ -68,7 +69,7 @@ public class CyclotronRecipes extends SerializableRecipe { makeRecipe(new ComparableStack(ModItems.part_carbon), new ComparableStack(ModItems.powder_caesium), new ItemStack(ModItems.powder_lanthanium), caA); makeRecipe(new ComparableStack(ModItems.part_carbon), new ComparableStack(ModItems.powder_neodymium), new ItemStack(ModItems.powder_gold), caA); makeRecipe(new ComparableStack(ModItems.part_carbon), new ComparableStack(ModItems.ingot_mercury), new ItemStack(ModItems.powder_polonium), caA); - makeRecipe(new ComparableStack(ModItems.part_carbon), new ComparableStack(ModItems.powder_lead), new ItemStack(ModItems.powder_ra226),caA); + makeRecipe(new ComparableStack(ModItems.part_carbon), new OreDictStack(PB.dust()), new ItemStack(ModItems.powder_ra226),caA); makeRecipe(new ComparableStack(ModItems.part_carbon), new ComparableStack(ModItems.powder_astatine), new ItemStack(ModItems.powder_actinium), caA); makeRecipe(new ComparableStack(ModItems.part_carbon), new ComparableStack(ModItems.powder_australium), new ItemStack(ModItems.powder_verticium), caA); /// CARBON END /// @@ -93,7 +94,7 @@ public class CyclotronRecipes extends SerializableRecipe { int plA = 100; makeRecipe(new ComparableStack(ModItems.part_plutonium), new OreDictStack("dustPhosphorus"), new ItemStack(ModItems.powder_tennessine), plA); - makeRecipe(new ComparableStack(ModItems.part_plutonium), new OreDictStack("dustPlutonium"), new ItemStack(ModItems.powder_tennessine), plA); + makeRecipe(new ComparableStack(ModItems.part_plutonium), new OreDictStack(PU.dust()), new ItemStack(ModItems.powder_tennessine), plA); makeRecipe(new ComparableStack(ModItems.part_plutonium), new ComparableStack(ModItems.powder_tennessine), new ItemStack(ModItems.powder_reiium), plA); makeRecipe(new ComparableStack(ModItems.part_plutonium), new ComparableStack(ModItems.pellet_charged), new ItemStack(ModItems.nugget_schrabidium), 1000); makeRecipe(new ComparableStack(ModItems.part_plutonium), new ComparableStack(ModItems.powder_unobtainium), new ItemStack(ModItems.powder_daffergon), plA); diff --git a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java index 6ccbd510a..bd29e55bf 100644 --- a/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/MixerRecipes.java @@ -50,9 +50,9 @@ public class MixerRecipes extends SerializableRecipe { recipes.put(Fluids.SYNGAS, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.COALOIL, 500)).setStack2(new FluidStack(Fluids.STEAM, 500))); recipes.put(Fluids.OXYHYDROGEN, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.HYDROGEN, 500)).setStack2(new FluidStack(Fluids.OXYGEN, 500))); - recipes.put(Fluids.PETROIL_LEADED, new MixerRecipe(1_000, 40).setStack1(new FluidStack(Fluids.PETROIL, 800)).setSolid(new ComparableStack(ModItems.antiknock))); - recipes.put(Fluids.GASOLINE_LEADED, new MixerRecipe(1_000, 40).setStack1(new FluidStack(Fluids.GASOLINE, 800)).setSolid(new ComparableStack(ModItems.antiknock))); - recipes.put(Fluids.COALGAS_LEADED, new MixerRecipe(1_000, 40).setStack1(new FluidStack(Fluids.COALGAS, 800)).setSolid(new ComparableStack(ModItems.antiknock))); + recipes.put(Fluids.PETROIL_LEADED, new MixerRecipe(12_000, 40).setStack1(new FluidStack(Fluids.PETROIL, 10_000)).setSolid(new ComparableStack(ModItems.antiknock))); + recipes.put(Fluids.GASOLINE_LEADED, new MixerRecipe(12_000, 40).setStack1(new FluidStack(Fluids.GASOLINE, 10_000)).setSolid(new ComparableStack(ModItems.antiknock))); + recipes.put(Fluids.COALGAS_LEADED, new MixerRecipe(12_000, 40).setStack1(new FluidStack(Fluids.COALGAS, 10_000)).setSolid(new ComparableStack(ModItems.antiknock))); recipes.put(Fluids.DIESEL_REFORM, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.DIESEL, 900)).setStack2(new FluidStack(Fluids.REFORMATE, 100))); recipes.put(Fluids.DIESEL_CRACK_REFORM, new MixerRecipe(1_000, 50).setStack1(new FluidStack(Fluids.DIESEL_CRACK, 900)).setStack2(new FluidStack(Fluids.REFORMATE, 100))); diff --git a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java index 6cdaa21ba..adb944df5 100644 --- a/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/SILEXRecipes.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import static com.hbm.inventory.OreDictManager.*; import com.hbm.blocks.ModBlocks; import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.fluid.Fluids; @@ -29,8 +30,8 @@ public class SILEXRecipes { public static void register() { itemTranslation.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.UF6.getID()), new ComparableStack(ModItems.ingot_uranium)); - dictTranslation.put("dustUranium", "ingotUranium"); - recipes.put("ingotUranium", new SILEXRecipe(900, 100, EnumWavelengths.UV) + dictTranslation.put(U.dust(), U.ingot()); + recipes.put(U.ingot(), new SILEXRecipe(900, 100, EnumWavelengths.UV) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u235), 1)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_u238), 11)) ); @@ -46,8 +47,8 @@ public class SILEXRecipes { ); itemTranslation.put(new ComparableStack(ModItems.fluid_icon, 1, Fluids.PUF6.getID()), new ComparableStack(ModItems.ingot_plutonium)); - dictTranslation.put("dustPlutonium", "ingotPlutonium"); - recipes.put("ingotPlutonium", new SILEXRecipe(900, 100, 2) + dictTranslation.put(PU.dust(), PU.ingot()); + recipes.put(PU.ingot(), new SILEXRecipe(900, 100, 2) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu238), 3)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu239), 4)) .addOut(new WeightedRandomObject(new ItemStack(ModItems.nugget_pu240), 2)) diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index 4becbaf45..5c7672729 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -444,7 +444,7 @@ public class AnvilRecipes { new AStack[] {new ComparableStack(ModItems.nugget_bismuth, 2), new OreDictStack(U238.billet(), 2), new OreDictStack(NB.dust(), 1)}, new AnvilOutput(new ItemStack(ModItems.plate_bismuth, 1))).setTier(4)); constructionRecipes.add(new AnvilConstructionRecipe( - new AStack[] {new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 2), new OreDictStack(VOLCANIC.gem(), 1)}, + new AStack[] {new OreDictStack(EUPH.ingot(), 4), new OreDictStack(AT.dust(), 3), new OreDictStack(BI.dust(), 1), new OreDictStack(VOLCANIC.gem(), 1), new ComparableStack(ModItems.ingot_osmiridium)}, new AnvilOutput(new ItemStack(ModItems.plate_euphemium, 4))).setTier(6)); constructionRecipes.add(new AnvilConstructionRecipe( new AStack[] {new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModItems.powder_spark_mix, 2), new OreDictStack(DESH.ingot(), 1)}, diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java index b5f44ece0..5dd1bef82 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilSmithingMold.java @@ -36,7 +36,7 @@ public class AnvilSmithingMold extends AnvilSmithingRecipe { for(String otherPrefix : OreNames.prefixes) { if(otherPrefix.length() > matchesPrefix.name.length() && name.startsWith(otherPrefix)) { - continue; //ignore if there's a longer prefix that matches (i.e. a more accurate match) + return false; //ignore if there's a longer prefix that matches (i.e. a more accurate match) } } diff --git a/src/main/java/com/hbm/items/IAnimatedItem.java b/src/main/java/com/hbm/items/IAnimatedItem.java new file mode 100644 index 000000000..1457b72a2 --- /dev/null +++ b/src/main/java/com/hbm/items/IAnimatedItem.java @@ -0,0 +1,14 @@ +package com.hbm.items; + +import com.hbm.render.anim.BusAnimation; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; + +@SideOnly(Side.CLIENT) +public interface IAnimatedItem { + + public BusAnimation getAnimation(NBTTagCompound data, ItemStack stack); +} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index c9708afcd..d63f62630 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1802,6 +1802,7 @@ public class ModItems { public static Item chemistry_set_boron; public static Item blowtorch; public static Item acetylene_torch; + public static Item boltgun; public static Item overfuse; public static Item arc_electrode; public static Item arc_electrode_burnt; @@ -4408,6 +4409,7 @@ public class ModItems { chemistry_set_boron = new ItemCraftingDegradation(0).setUnlocalizedName("chemistry_set_boron"); blowtorch = new ItemBlowtorch().setUnlocalizedName("blowtorch"); acetylene_torch = new ItemBlowtorch().setUnlocalizedName("acetylene_torch"); + boltgun = new ItemBoltgun().setUnlocalizedName("boltgun"); overfuse = new ItemCustomLore().setUnlocalizedName("overfuse").setMaxStackSize(1).setFull3D().setTextureName(RefStrings.MODID + ":overfuse"); arc_electrode = new ItemCustomLore().setUnlocalizedName("arc_electrode").setMaxDamage(250).setCreativeTab(MainRegistry.controlTab).setMaxStackSize(1).setCreativeTab(MainRegistry.controlTab).setFull3D().setTextureName(RefStrings.MODID + ":arc_electrode"); arc_electrode_burnt = new Item().setUnlocalizedName("arc_electrode_burnt").setMaxStackSize(1).setFull3D().setTextureName(RefStrings.MODID + ":arc_electrode_burnt"); @@ -6431,15 +6433,12 @@ public class ModItems { GameRegistry.registerItem(chemistry_set_boron, chemistry_set_boron.getUnlocalizedName()); GameRegistry.registerItem(blowtorch, blowtorch.getUnlocalizedName()); GameRegistry.registerItem(acetylene_torch, acetylene_torch.getUnlocalizedName()); + GameRegistry.registerItem(boltgun, boltgun.getUnlocalizedName()); GameRegistry.registerItem(overfuse, overfuse.getUnlocalizedName()); GameRegistry.registerItem(arc_electrode, arc_electrode.getUnlocalizedName()); GameRegistry.registerItem(arc_electrode_burnt, arc_electrode_burnt.getUnlocalizedName()); GameRegistry.registerItem(arc_electrode_desh, arc_electrode_desh.getUnlocalizedName()); - //Particle Collider Items - //GameRegistry.registerItem(crystal_energy, crystal_energy.getUnlocalizedName()); - //GameRegistry.registerItem(pellet_coolant, pellet_coolant.getUnlocalizedName()); - //Particle Collider Fuel GameRegistry.registerItem(part_lithium, part_lithium.getUnlocalizedName()); GameRegistry.registerItem(part_beryllium, part_beryllium.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java index a83ed86c5..01c83055c 100644 --- a/src/main/java/com/hbm/items/machine/ItemRBMKRod.java +++ b/src/main/java/com/hbm/items/machine/ItemRBMKRod.java @@ -205,7 +205,7 @@ public class ItemRBMKRod extends Item { double avg = (heat + hullHeat + coreHeat) / 3D; this.setCoreHeat(stack, avg); this.setHullHeat(stack, avg); - return avg; + return avg - heat; } if(hullHeat <= heat) diff --git a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java index d56bfa6e9..0b782df9d 100644 --- a/src/main/java/com/hbm/items/machine/ItemWatzPellet.java +++ b/src/main/java/com/hbm/items/machine/ItemWatzPellet.java @@ -1,6 +1,7 @@ package com.hbm.items.machine; import java.util.List; +import java.util.Locale; import com.hbm.items.ItemEnumMulti; import com.hbm.items.ModItems; @@ -35,16 +36,18 @@ public class ItemWatzPellet extends ItemEnumMulti { public static enum EnumWatzType { - //TODO: durability SCHRABIDIUM( 0x32FFFF, 0x005C5C, 2_000, 10D, new FunctionLogarithmic(10), null, null), HES( 0x66DCD6, 0x023933, 1_500, 10D, null, null, null), - LES( 0xABB4A8, 0x0C1105, 500, 10D, null, null, null), MES( 0xCBEADF, 0x28473C, 1_000, 10D, null, null, null), - NP( 0xA6B2A6, 0x030F03, 0, 10D, null, null, null), + LES( 0xABB4A8, 0x0C1105, 500, 10D, null, null, null), + HEN( 0xA6B2A6, 0x030F03, 0, 10D, null, null, null), MEU( 0xC1C7BD, 0x2B3227, 0, 10D, null, null, null), MEP( 0x9AA3A0, 0x111A17, 0, 10D, null, null, null), LEAD( 0xA6A6B2, 0x03030F, 0, 0, null, null, new FunctionSqrt(10)), //standard absorber, negative coefficient - DU( 0xC1C7BD, 0x2B3227, 0, 0, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)); //absorber with positive coefficient + BORON( 0xBDC8D2, 0x29343E, 0, 0, null, null, new FunctionLinear(10)), //improved absorber, linear + DU( 0xC1C7BD, 0x2B3227, 0, 0, null, null, new FunctionQuadratic(1D, 1D).withDiv(100)), //absorber with positive coefficient + NQD( 0x4B4B4B, 0x121212, 0, 0, null, null, null), + NQR( 0x2D2D2D, 0x0B0B0B, 0, 0, null, null, null); public double yield = 1_000_000_000; public int colorLight; @@ -121,6 +124,8 @@ public class ItemWatzPellet extends ItemEnumMulti { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { EnumWatzType num = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + list.add(EnumChatFormatting.GREEN + "Depletion: " + String.format(Locale.US, "%.1f", getDurabilityForDisplay(stack) * 100D) + "%"); + String color = EnumChatFormatting.GOLD + ""; String reset = EnumChatFormatting.RESET + ""; diff --git a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java index 3e2285ec6..cb200d6ec 100644 --- a/src/main/java/com/hbm/items/tool/ItemBlowtorch.java +++ b/src/main/java/com/hbm/items/tool/ItemBlowtorch.java @@ -28,6 +28,7 @@ import net.minecraft.world.World; public class ItemBlowtorch extends Item implements IFillableItem { public ItemBlowtorch() { + this.setMaxStackSize(1); this.setFull3D(); this.setCreativeTab(MainRegistry.controlTab); } diff --git a/src/main/java/com/hbm/items/tool/ItemBoltgun.java b/src/main/java/com/hbm/items/tool/ItemBoltgun.java new file mode 100644 index 000000000..e0c1e0999 --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemBoltgun.java @@ -0,0 +1,78 @@ +package com.hbm.items.tool; + +import com.hbm.items.IAnimatedItem; +import com.hbm.lib.RefStrings; +import com.hbm.packet.AuxParticlePacketNT; +import com.hbm.packet.PacketDispatcher; +import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationKeyframe; +import com.hbm.render.anim.BusAnimationSequence; + +import api.hbm.block.IToolable; +import api.hbm.block.IToolable.ToolType; +import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class ItemBoltgun extends Item implements IAnimatedItem { + + public ItemBoltgun() { + this.setMaxStackSize(1); + } + + @Override + public Item setUnlocalizedName(String unlocalizedName) { + super.setUnlocalizedName(unlocalizedName); + this.setTextureName(RefStrings.MODID + ":"+ unlocalizedName); + return this; + } + + @Override + public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float fX, float fY, float fZ) { + + Block b = world.getBlock(x, y, z); + + if(b instanceof IToolable && ((IToolable)b).onScrew(world, player, x, y, z, side, fX, fY, fZ, ToolType.BOLT)) { + + if(!world.isRemote) { + + player.inventoryContainer.detectAndSendChanges(); + ForgeDirection dir = ForgeDirection.getOrientation(side); + double off = 0.25; + + 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, x + fX + dir.offsetX * off, y + fY + dir.offsetY * off, z + fZ + dir.offsetZ * off), new TargetPoint(world.provider.dimensionId, x, y, z, 50)); + + NBTTagCompound d0 = new NBTTagCompound(); + d0.setString("type", "anim"); + d0.setString("mode", "generic"); + PacketDispatcher.wrapper.sendTo(new AuxParticlePacketNT(d0, 0, 0, 0), (EntityPlayerMP) player); + } + + return false; + } + + return false; + } + + @Override + @SideOnly(Side.CLIENT) + public BusAnimation getAnimation(NBTTagCompound data, ItemStack stack) { + return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence() + .addKeyframe(new BusAnimationKeyframe(1, 0, 1, 50)) + .addKeyframe(new BusAnimationKeyframe(0, 0, 1, 100))); + } +} diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index 083a409b1..6d9f43fb0 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -630,7 +630,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); + (new Meteorite()).generate(world, rand, x, y, z, false, true, false); } if (GeneralConfig.enableNITAN) { diff --git a/src/main/java/com/hbm/lib/RefStrings.java b/src/main/java/com/hbm/lib/RefStrings.java index 07fe66f57..3eb20ac61 100644 --- a/src/main/java/com/hbm/lib/RefStrings.java +++ b/src/main/java/com/hbm/lib/RefStrings.java @@ -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 (4551)"; + public static final String VERSION = "1.0.27 BETA (4562)"; //HBM's Beta Naming Convention: //V T (X) //V -> next release version diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6c4ea730a..3115a9386 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -48,6 +48,7 @@ import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.machine.MachineFan.TileEntityFan; +import com.hbm.blocks.machine.WatzPump.TileEntityWatzPump; import com.hbm.entity.cart.*; import com.hbm.entity.effect.*; import com.hbm.entity.grenade.*; @@ -63,7 +64,9 @@ import com.hbm.handler.CasingEjector; import com.hbm.handler.HbmKeybinds; import com.hbm.handler.ImpactWorldHandler; import com.hbm.handler.HbmKeybinds.EnumKeybind; +import com.hbm.items.IAnimatedItem; import com.hbm.items.ModItems; +import com.hbm.lib.RefStrings; import com.hbm.particle.*; import com.hbm.particle.psys.engine.EventHandlerParticleEngine; import com.hbm.render.anim.*; @@ -313,6 +316,7 @@ public class ClientProxy extends ServerProxy { ClientRegistry.bindTileEntitySpecialRenderer(TileEntitySoyuzStruct.class, new RenderSoyuzMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityITERStruct.class, new RenderITERMultiblock()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityPlasmaStruct.class, new RenderPlasmaMultiblock()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatzStruct.class, new RenderWatzMultiblock()); //RBMK ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlManual.class, new RenderRBMKControlRod()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityRBMKControlAuto.class, new RenderRBMKControlRod()); @@ -332,7 +336,9 @@ public class ClientProxy extends ServerProxy { //ITER ClientRegistry.bindTileEntitySpecialRenderer(TileEntityITER.class, new RenderITER()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePlasmaHeater.class, new RenderPlasmaHeater()); + //Watz ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatz.class, new RenderWatz()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityWatzPump.class, new RenderWatzPump()); //doors ClientRegistry.bindTileEntitySpecialRenderer(TileEntityVaultDoor.class, new RenderVaultDoor()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityBlastDoor.class, new RenderBlastDoor()); @@ -424,6 +430,7 @@ public class ClientProxy extends ServerProxy { MinecraftForgeClient.registerItemRenderer(ModItems.mese_gavel, new ItemRenderGavel()); MinecraftForgeClient.registerItemRenderer(ModItems.crucible, new ItemRenderCrucible()); MinecraftForgeClient.registerItemRenderer(ModItems.chainsaw, new ItemRenderChainsaw()); + MinecraftForgeClient.registerItemRenderer(ModItems.boltgun, new ItemRenderBoltgun()); //guns MinecraftForgeClient.registerItemRenderer(ModItems.gun_rpg, new ItemRenderRpg()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_karl, new ItemRenderRpg()); @@ -571,6 +578,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityCog.class, new RenderCog()); RenderingRegistry.registerEntityRenderingHandler(EntitySawblade.class, new RenderSawblade()); RenderingRegistry.registerEntityRenderingHandler(EntityChemical.class, new RenderChemical()); + RenderingRegistry.registerEntityRenderingHandler(EntityMist.class, new RenderMist()); //grenades RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeGeneric.class, new RenderSnowball(ModItems.grenade_generic)); RenderingRegistry.registerEntityRenderingHandler(EntityGrenadeStrong.class, new RenderSnowball(ModItems.grenade_strong)); @@ -676,27 +684,28 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntityMovingPackage.class, new RenderMovingPackage()); RenderingRegistry.registerEntityRenderingHandler(EntityTNTPrimedBase.class, new RenderTNTPrimedBase()); //mobs - RenderingRegistry.registerEntityRenderingHandler(EntityNuclearCreeper.class, new RenderNuclearCreeper()); - RenderingRegistry.registerEntityRenderingHandler(EntityTaintedCreeper.class, new RenderTaintedCreeper()); - RenderingRegistry.registerEntityRenderingHandler(EntityHunterChopper.class, new RenderHunterChopper()); - RenderingRegistry.registerEntityRenderingHandler(EntityCyberCrab.class, new RenderCyberCrab()); - RenderingRegistry.registerEntityRenderingHandler(EntityTeslaCrab.class, new RenderTeslaCrab()); - RenderingRegistry.registerEntityRenderingHandler(EntityTaintCrab.class, new RenderTaintCrab()); - RenderingRegistry.registerEntityRenderingHandler(EntityMaskMan.class, new RenderMaskMan()); - RenderingRegistry.registerEntityRenderingHandler(EntityBOTPrimeHead.class, new RenderWormHead()); - RenderingRegistry.registerEntityRenderingHandler(EntityBOTPrimeBody.class, new RenderWormBody()); - RenderingRegistry.registerEntityRenderingHandler(EntityDuck.class, new RenderDuck(new ModelChicken(), 0.3F)); - RenderingRegistry.registerEntityRenderingHandler(EntityQuackos.class, new RenderQuacc(new ModelChicken(), 7.5F)); - RenderingRegistry.registerEntityRenderingHandler(EntityFBI.class, new RenderFBI()); - RenderingRegistry.registerEntityRenderingHandler(EntityRADBeast.class, new RenderRADBeast()); - RenderingRegistry.registerEntityRenderingHandler(EntityBlockSpider.class, new RenderBlockSpider()); - RenderingRegistry.registerEntityRenderingHandler(EntityUFO.class, new RenderUFO()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeZombie.class, new RenderSiegeZombie()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeUFO.class, new RenderSiegeUFO()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeCraft.class, new RenderSiegeCraft()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeSkeleton.class, new RenderSiegeSkeleton()); - RenderingRegistry.registerEntityRenderingHandler(EntitySiegeTunneler.class, new RenderSiegeTunneler()); - RenderingRegistry.registerEntityRenderingHandler(EntityGhost.class, new RenderGhost()); + RenderingRegistry.registerEntityRenderingHandler(EntityCreeperNuclear.class, new RenderCreeperUniversal(RefStrings.MODID + ":" + "textures/entity/creeper.png", RefStrings.MODID + ":" + "textures/entity/creeper_armor.png").setSwellMod(5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityCreeperTainted.class, new RenderCreeperUniversal(RefStrings.MODID + ":" + "textures/entity/creeper_tainted.png", RefStrings.MODID + ":" + "textures/entity/creeper_armor_taint.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityCreeperPhosgene.class, new RenderCreeperUniversal(RefStrings.MODID + ":" + "textures/entity/creeper_phosgene.png", "textures/entity/creeper/creeper_armor.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityHunterChopper.class, new RenderHunterChopper()); + RenderingRegistry.registerEntityRenderingHandler(EntityCyberCrab.class, new RenderCyberCrab()); + RenderingRegistry.registerEntityRenderingHandler(EntityTeslaCrab.class, new RenderTeslaCrab()); + RenderingRegistry.registerEntityRenderingHandler(EntityTaintCrab.class, new RenderTaintCrab()); + RenderingRegistry.registerEntityRenderingHandler(EntityMaskMan.class, new RenderMaskMan()); + RenderingRegistry.registerEntityRenderingHandler(EntityBOTPrimeHead.class, new RenderWormHead()); + RenderingRegistry.registerEntityRenderingHandler(EntityBOTPrimeBody.class, new RenderWormBody()); + RenderingRegistry.registerEntityRenderingHandler(EntityDuck.class, new RenderDuck(new ModelChicken(), 0.3F)); + RenderingRegistry.registerEntityRenderingHandler(EntityQuackos.class, new RenderQuacc(new ModelChicken(), 7.5F)); + RenderingRegistry.registerEntityRenderingHandler(EntityFBI.class, new RenderFBI()); + RenderingRegistry.registerEntityRenderingHandler(EntityRADBeast.class, new RenderRADBeast()); + RenderingRegistry.registerEntityRenderingHandler(EntityBlockSpider.class, new RenderBlockSpider()); + RenderingRegistry.registerEntityRenderingHandler(EntityUFO.class, new RenderUFO()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeZombie.class, new RenderSiegeZombie()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeUFO.class, new RenderSiegeUFO()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeCraft.class, new RenderSiegeCraft()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeSkeleton.class, new RenderSiegeSkeleton()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeTunneler.class, new RenderSiegeTunneler()); + RenderingRegistry.registerEntityRenderingHandler(EntityGhost.class, new RenderGhost()); //"particles" RenderingRegistry.registerEntityRenderingHandler(EntitySmokeFX.class, new MultiCloudRenderer(new Item[] { ModItems.smoke1, ModItems.smoke2, ModItems.smoke3, ModItems.smoke4, ModItems.smoke5, ModItems.smoke6, ModItems.smoke7, ModItems.smoke8 })); RenderingRegistry.registerEntityRenderingHandler(EntityBSmokeFX.class, new MultiCloudRenderer(new Item[] { ModItems.b_smoke1, ModItems.b_smoke2, ModItems.b_smoke3, ModItems.b_smoke4, ModItems.b_smoke5, ModItems.b_smoke6, ModItems.b_smoke7, ModItems.b_smoke8 })); @@ -1626,8 +1635,10 @@ public class ClientProxy extends ServerProxy { if("anim".equals(type)) { + String mode = data.getString("mode"); + /* crucible deploy */ - if("crucible".equals(data.getString("mode")) && player.getHeldItem() != null) { + if("crucible".equals(mode) && player.getHeldItem() != null) { BusAnimation animation = new BusAnimation() .addBus("GUARD_ROT", new BusAnimationSequence() @@ -1639,7 +1650,7 @@ public class ClientProxy extends ServerProxy { } /* crucible swing */ - if("cSwing".equals(data.getString("mode"))) { + if("cSwing".equals(mode)) { if(HbmAnimations.getRelevantTransformation("SWING_ROT")[0] == 0) { @@ -1662,7 +1673,7 @@ public class ClientProxy extends ServerProxy { } /* chainsaw swing */ - if("sSwing".equals(data.getString("mode")) || "lSwing".equals(data.getString("mode"))) { //temp for lance + if("sSwing".equals(mode) || "lSwing".equals(mode)) { //temp for lance int forward = 150; int sideways = 100; @@ -1705,6 +1716,19 @@ public class ClientProxy extends ServerProxy { HbmAnimations.hotbar[player.inventory.currentItem] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), animation); } } + + if("generic".equals(mode)) { + ItemStack stack = player.getHeldItem(); + + if(stack != null && stack.getItem() instanceof IAnimatedItem) { + IAnimatedItem item = (IAnimatedItem) stack.getItem(); + BusAnimation anim = item.getAnimation(data, stack); + + if(anim != null) { + HbmAnimations.hotbar[player.inventory.currentItem] = new Animation(player.getHeldItem().getItem().getUnlocalizedName(), System.currentTimeMillis(), anim); + } + } + } } if("tau".equals(type)) { diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index b01dd9c46..f0b062205 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -935,11 +935,13 @@ public class CraftingManager { int amount = (int) craneCasing[i * 2 + 1]; addRecipeAuto(new ItemStack(ModBlocks.crane_inserter, amount), new Object[] { "CCC", "C C", "CBC", 'C', casing, 'B', ModBlocks.conveyor }); addRecipeAuto(new ItemStack(ModBlocks.crane_extractor, amount), new Object[] { "CCC", "CPC", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); + addRecipeAuto(new ItemStack(ModBlocks.crane_grabber, amount), new Object[] { "C C", "P P", "CBC", 'C', casing, 'B', ModBlocks.conveyor, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC) }); } addRecipeAuto(new ItemStack(ModBlocks.crane_boxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_PLANKS, 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'C', ModBlocks.conveyor }); addRecipeAuto(new ItemStack(ModBlocks.crane_unboxer), new Object[] { "WWW", "WPW", "CCC", 'W', KEY_STICK, 'P', Items.shears, 'C', ModBlocks.conveyor }); addRecipeAuto(new ItemStack(ModBlocks.crane_router), new Object[] { "PIP", "ICI", "PIP", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', ModItems.plate_polymer, 'C', ModItems.circuit_copper }); + addRecipeAuto(new ItemStack(ModBlocks.crane_splitter), new Object[] { "III", "PCP", "III", 'P', DictFrame.fromOne(ModItems.part_generic, EnumPartType.PISTON_PNEUMATIC), 'I', STEEL.ingot(), 'C', ModItems.circuit_aluminium }); addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER1), new Object[] { ModItems.ingot_chainsteel, ASBESTOS.ingot(), ModItems.gem_alexandrite }); addShapelessAuto(DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER1, 3), new Object[] { DictFrame.fromOne(ModItems.parts_legendary, EnumLegendaryType.TIER2) }); diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index e352f2a77..c78c63b76 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -22,9 +22,9 @@ import com.hbm.entity.missile.EntityMissileBaseAdvanced; import com.hbm.entity.missile.EntityMissileCustom; import com.hbm.entity.mob.EntityCyberCrab; import com.hbm.entity.mob.EntityDuck; -import com.hbm.entity.mob.EntityNuclearCreeper; +import com.hbm.entity.mob.EntityCreeperNuclear; import com.hbm.entity.mob.EntityQuackos; -import com.hbm.entity.mob.EntityTaintedCreeper; +import com.hbm.entity.mob.EntityCreeperTainted; import com.hbm.entity.projectile.EntityBulletBase; import com.hbm.entity.projectile.EntityBurningFOEQ; import com.hbm.extprop.HbmLivingProps; @@ -38,6 +38,7 @@ import com.hbm.handler.EntityEffectHandler; import com.hbm.hazard.HazardSystem; import com.hbm.interfaces.IBomb; import com.hbm.handler.HTTPHandler; +import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.handler.SiegeOrchestrator; import com.hbm.items.IEquipReceiver; import com.hbm.items.ModItems; @@ -72,6 +73,7 @@ import com.hbm.world.generator.TimedGenerator; import cpw.mods.fml.common.eventhandler.EventPriority; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.PlayerEvent; +import cpw.mods.fml.common.gameevent.PlayerEvent.PlayerChangedDimensionEvent; import cpw.mods.fml.common.gameevent.TickEvent; import cpw.mods.fml.common.gameevent.TickEvent.Phase; import cpw.mods.fml.common.gameevent.TickEvent.WorldTickEvent; @@ -190,7 +192,7 @@ public class ModEventHandler { } @SubscribeEvent - public void onEntityConstructing(EntityEvent.EntityConstructing event) { + public void onEntityConstructing(EntityEvent.EntityConstructing event) { if(event.entity instanceof EntityPlayer) { @@ -207,6 +209,14 @@ public class ModEventHandler { HbmLivingProps.getData(living); //ditto } } + + @SubscribeEvent + public void onPlayerChaangeDimension(PlayerChangedDimensionEvent event) { + EntityPlayer player = event.player; + HbmPlayerProps data = HbmPlayerProps.getData(player); + data.setKeyPressed(EnumKeybind.JETPACK, false); + data.setKeyPressed(EnumKeybind.DASH, false); + } @SubscribeEvent(priority = EventPriority.HIGHEST) public void onEntityDeathFirst(LivingDeathEvent event) { @@ -274,7 +284,7 @@ public class ModEventHandler { event.entity.dropItem(ModItems.book_of_, 1); } - if(event.entity instanceof EntityTaintedCreeper && event.source == ModDamageSource.boxcar) { + if(event.entity instanceof EntityCreeperTainted && event.source == ModDamageSource.boxcar) { for(Object o : event.entity.worldObj.getEntitiesWithinAABB(EntityPlayer.class, event.entity.boundingBox.expand(50, 50, 50))) { EntityPlayer player = (EntityPlayer)o; @@ -567,7 +577,7 @@ public class ModEventHandler { if(entity instanceof EntityCreeper && eRad >= 200 && entity.getHealth() > 0) { if(event.world.rand.nextInt(3) == 0 ) { - EntityNuclearCreeper creep = new EntityNuclearCreeper(event.world); + EntityCreeperNuclear creep = new EntityCreeperNuclear(event.world); creep.setLocationAndAngles(entity.posX, entity.posY, entity.posZ, entity.rotationYaw, entity.rotationPitch); if(!entity.isDead) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 88ff8c69f..b442588d3 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -214,6 +214,7 @@ public class ResourceManager { //Watz public static final IModelCustom watz = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/reactors/watz.obj")); + public static final IModelCustom watz_pump = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/watz_pump.obj")); //FENSU public static final IModelCustom fensu = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/fensu.obj")); @@ -561,6 +562,7 @@ public class ResourceManager { //Watz public static final ResourceLocation watz_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/watz.png"); + public static final ResourceLocation watz_pump_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/watz_pump.png"); //FENSU public static final ResourceLocation fensu_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/fensu.png"); @@ -679,6 +681,7 @@ public class ResourceManager { public static final IModelCustom gavel = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/gavel.obj")); public static final IModelCustom crucible = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/crucible.obj")); public static final IModelCustom chainsaw = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/chainsaw.obj"), false); + public static final IModelCustom boltgun = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/boltgun.obj")); public static final IModelCustom hk69 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/hk69.obj")); public static final IModelCustom deagle = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/deagle.obj")); @@ -752,6 +755,7 @@ public class ResourceManager { public static final ResourceLocation crucible_guard = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/crucible_guard.png"); public static final ResourceLocation crucible_blade = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/crucible_blade.png"); public static final ResourceLocation chainsaw_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/chainsaw.png"); + public static final ResourceLocation boltgun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/boltgun.png"); public static final ResourceLocation hk69_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/hk69.png"); public static final ResourceLocation deagle_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/deagle.png"); diff --git a/src/main/java/com/hbm/packet/TEFluidPacket.java b/src/main/java/com/hbm/packet/TEFluidPacket.java index 078729c9f..49338eab5 100644 --- a/src/main/java/com/hbm/packet/TEFluidPacket.java +++ b/src/main/java/com/hbm/packet/TEFluidPacket.java @@ -11,6 +11,7 @@ import io.netty.buffer.ByteBuf; import net.minecraft.client.Minecraft; import net.minecraft.tileentity.TileEntity; +@Deprecated public class TEFluidPacket implements IMessage { int x; diff --git a/src/main/java/com/hbm/particle/psys/engine/PSysFX.java b/src/main/java/com/hbm/particle/psys/engine/PSysFX.java index 4abb6412c..685f17835 100644 --- a/src/main/java/com/hbm/particle/psys/engine/PSysFX.java +++ b/src/main/java/com/hbm/particle/psys/engine/PSysFX.java @@ -2,6 +2,7 @@ package com.hbm.particle.psys.engine; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; /** @@ -10,7 +11,7 @@ import net.minecraft.world.World; * @author hbm */ @SideOnly(Side.CLIENT) -public class PSysFX { +public abstract class PSysFX { public World world; public double posX; @@ -19,14 +20,62 @@ public class PSysFX { public double prevPosX; public double prevPosY; public double prevPosZ; - public double motionX; - public double motionY; - public double motionZ; public static double interpPosX; public static double interpPosY; public static double interpPosZ; - - public PSysFX() { + public AxisAlignedBB boundingBox; + public int particleAge; + public int particleMaxAge; + public boolean isExpired = false; + public boolean shouldExpireWhenUnloaded = true; + public boolean isUnloaded = false; + + public PSysFX(World world, double x, double y, double z) { + this.world = world; + this.posX = x; + this.posY = y; + this.posZ = z; + } + + public void updateParticle() { + this.prevPosX = posX; + this.prevPosY = posY; + this.prevPosZ = posZ; + this.isUnloaded = !world.getChunkProvider().chunkExists((int) Math.floor(posX) >> 4, (int) Math.floor(posZ) >> 4); + this.particleAge++; + + if(this.particleAge >= this.particleMaxAge) { + this.expire(); + } + + if(this.shouldExpireWhenUnloaded && this.isUnloaded) { + this.expire(); + } + } + + public abstract void renderParticle(); + + public AxisAlignedBB getBoundingBox() { + return this.boundingBox; + } + + public void setBoundingBox(AxisAlignedBB bb) { + this.boundingBox = bb; + } + + protected void setPosToAABB() { + AxisAlignedBB aabb = this.getBoundingBox(); + this.posX = (aabb.minX + aabb.maxX) / 2.0D; + this.posY = aabb.minY; + this.posZ = (aabb.minZ + aabb.maxZ) / 2.0D; + } + + public void expire() { + this.isExpired = true; + } + + public void setExpireOnUnload(boolean expire) { + this.shouldExpireWhenUnloaded = expire; } } diff --git a/src/main/java/com/hbm/particle/psys/engine/PSysFXMoving.java b/src/main/java/com/hbm/particle/psys/engine/PSysFXMoving.java new file mode 100644 index 000000000..9922b3575 --- /dev/null +++ b/src/main/java/com/hbm/particle/psys/engine/PSysFXMoving.java @@ -0,0 +1,87 @@ +package com.hbm.particle.psys.engine; + +import java.util.List; + +import com.hbm.lib.Library; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.world.World; + +@SideOnly(Side.CLIENT) +public abstract class PSysFXMoving extends PSysFX { + + public double motionX; + public double motionY; + public double motionZ; + boolean noClip = false; + /* using the forgedirection's ordinal as an index, this tells us what side of a block the particle has collided with */ + public boolean collisionData[] = new boolean[6]; + + public PSysFXMoving(World world, double x, double y, double z, double mX, double mY, double mZ) { + super(world, x, y, z); + this.motionX = mX; + this.motionY = mY; + this.motionZ = mZ; + } + + public double getParticleGravity() { + return 0.04D; + } + + public double getParticleDrag() { + return 0.98D; + } + + public void updateParticle() { + super.updateParticle(); + + if(!this.isUnloaded) { + this.motionX -= this.getParticleGravity(); + this.motionX *= this.getParticleDrag(); + this.motionY *= this.getParticleDrag(); + this.motionZ *= this.getParticleDrag(); + + this.move(motionX, motionY, motionZ); + } + } + + public void move(double x, double y, double z) { + + double x0 = x; + double y0 = y; + double z0 = z; + + this.collisionData = new boolean[6]; + + if(!noClip) { + List list = this.world.getCollidingBoundingBoxes(null, this.getBoundingBox().expand(x, y, z)); + + for(AxisAlignedBB aabb : list) y = aabb.calculateYOffset(this.getBoundingBox(), y); + this.setBoundingBox(this.getBoundingBox().offset(0.0D, y, 0.0D)); + + for(AxisAlignedBB aabb : list) x = aabb.calculateXOffset(this.getBoundingBox(), x); + this.setBoundingBox(this.getBoundingBox().offset(x, 0.0D, 0.0D)); + + for(AxisAlignedBB aabb : list) z = aabb.calculateZOffset(this.getBoundingBox(), z); + this.setBoundingBox(this.getBoundingBox().offset(0.0D, 0.0D, z)); + + } else { + this.setBoundingBox(this.getBoundingBox().offset(x, y, z)); + } + + this.setPosToAABB(); + + if(x0 != x && x > 0) this.collisionData[Library.NEG_X.ordinal()] = true; + if(x0 != x && x < 0) this.collisionData[Library.POS_X.ordinal()] = true; + if(y0 != y && y > 0) this.collisionData[Library.NEG_Y.ordinal()] = true; + if(y0 != y && y < 0) this.collisionData[Library.POS_Y.ordinal()] = true; + if(z0 != z && z > 0) this.collisionData[Library.NEG_Z.ordinal()] = true; + if(z0 != z && z < 0) this.collisionData[Library.POS_Z.ordinal()] = true; + + if(x0 != x) this.motionX = 0.0D; + if(y0 != y) this.motionY = 0.0D; + if(z0 != z) this.motionZ = 0.0D; + } +} diff --git a/src/main/java/com/hbm/particle/psys/engine/ParticleEngine.java b/src/main/java/com/hbm/particle/psys/engine/ParticleEngine.java index 6c46b7b19..8f2742ad3 100644 --- a/src/main/java/com/hbm/particle/psys/engine/ParticleEngine.java +++ b/src/main/java/com/hbm/particle/psys/engine/ParticleEngine.java @@ -29,17 +29,17 @@ public class ParticleEngine { } public void updateParticles() { - + for(FXLayer layer : layers) layer.updateLayer(); } public void renderParticles(float interp) { - + for(FXLayer layer : layers) layer.renderLayer(interp); } public static class FXLayer { protected ResourceLocation batchTexture; - protected List particles; + protected List particles; public FXLayer() { } @@ -51,7 +51,7 @@ public class ParticleEngine { } - protected void renderLayer() { + protected void renderLayer(float interp) { } } diff --git a/src/main/java/com/hbm/potion/HbmPotion.java b/src/main/java/com/hbm/potion/HbmPotion.java index 084826705..48031fddf 100644 --- a/src/main/java/com/hbm/potion/HbmPotion.java +++ b/src/main/java/com/hbm/potion/HbmPotion.java @@ -7,7 +7,7 @@ import com.hbm.blocks.bomb.BlockTaint; import com.hbm.config.GeneralConfig; import com.hbm.config.PotionConfig; import com.hbm.entity.mob.EntityTaintCrab; -import com.hbm.entity.mob.EntityTaintedCreeper; +import com.hbm.entity.mob.EntityCreeperTainted; import com.hbm.explosion.ExplosionLarge; import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; @@ -102,7 +102,7 @@ public class HbmPotion extends Potion { if(this == taint) { - if(!(entity instanceof EntityTaintedCreeper) && !(entity instanceof EntityTaintCrab) && entity.worldObj.rand.nextInt(40) == 0) + if(!(entity instanceof EntityCreeperTainted) && !(entity instanceof EntityTaintCrab) && entity.worldObj.rand.nextInt(40) == 0) entity.attackEntityFrom(ModDamageSource.taint, (level + 1)); if(GeneralConfig.enableHardcoreTaint && !entity.worldObj.isRemote) { diff --git a/src/main/java/com/hbm/render/block/RenderSplitter.java b/src/main/java/com/hbm/render/block/RenderSplitter.java index 3b85f3e18..9ec29dfe4 100644 --- a/src/main/java/com/hbm/render/block/RenderSplitter.java +++ b/src/main/java/com/hbm/render/block/RenderSplitter.java @@ -2,7 +2,6 @@ package com.hbm.render.block; import org.lwjgl.opengl.GL11; -import com.hbm.blocks.ModBlocks; import com.hbm.blocks.network.CraneSplitter; import com.hbm.main.ResourceManager; import com.hbm.render.util.ObjUtil; @@ -11,7 +10,6 @@ import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.util.IIcon; import net.minecraft.world.IBlockAccess; import net.minecraftforge.client.model.obj.WavefrontObject; @@ -28,11 +26,11 @@ public class RenderSplitter implements ISimpleBlockRenderingHandler { GL11.glRotated(-90, 0, 1, 0); GL11.glTranslatef(0F, -0.5F, 0.5F); tessellator.startDrawingQuads(); - ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.splitter, ModBlocks.block_steel.getIcon(0, 0), tessellator, 0, false); + drawSplitter(tessellator, block, true, 0, false); tessellator.draw(); GL11.glTranslatef(0F, 0F, -1F); tessellator.startDrawingQuads(); - ObjUtil.renderWithIcon((WavefrontObject) ResourceManager.splitter, ModBlocks.block_steel.getIcon(0, 0), tessellator, 0, false); + drawSplitter(tessellator, block, false, 0, false); tessellator.draw(); GL11.glPopMatrix(); @@ -54,26 +52,26 @@ public class RenderSplitter implements ISimpleBlockRenderingHandler { if(meta == 14 || meta == 3) rotation = 180F / 180F * (float)Math.PI; boolean isLeft = meta >= 12; - - CraneSplitter splitter = (CraneSplitter) block; - IIcon conveyor = splitter.iconBelt; - - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Top", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Bottom", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - if(isLeft) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Left", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - if(!isLeft) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Right", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Back", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Front", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Inner", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerLeft", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerRight", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerTop", ModBlocks.block_steel.getIcon(0, 0), tessellator, rotation, true); - ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerBottom", conveyor, tessellator, rotation, true); - + drawSplitter(tessellator, block, isLeft, rotation, true); tessellator.addTranslation(-x - 0.5F, -y, -z - 0.5F); return true; } + + private static void drawSplitter(Tessellator tessellator, Block block, boolean isLeft, float rotation, boolean shadeNormals) { + CraneSplitter splitter = (CraneSplitter) block; + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Top", isLeft ? splitter.iconTopLeft : splitter.iconTopRight, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Bottom", isLeft ? splitter.iconTopRight : splitter.iconTopLeft , tessellator, rotation, shadeNormals); + if(isLeft) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Left", splitter.iconLeft, tessellator, rotation, shadeNormals); + if(!isLeft) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Right", splitter.iconRight, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Back", isLeft ? splitter.iconBackLeft : splitter.iconBackRight, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Front", isLeft ? splitter.iconFrontLeft : splitter.iconFrontRight, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "Inner", splitter.iconInner, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerLeft", splitter.iconInnerSide, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerRight", splitter.iconInnerSide, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerTop", splitter.iconInnerSide, tessellator, rotation, shadeNormals); + ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.splitter, "InnerBottom", splitter.iconBelt, tessellator, rotation, shadeNormals); + } @Override public boolean shouldRender3DInInventory(int modelId) { diff --git a/src/main/java/com/hbm/render/entity/effect/RenderMist.java b/src/main/java/com/hbm/render/entity/effect/RenderMist.java new file mode 100644 index 000000000..89230a555 --- /dev/null +++ b/src/main/java/com/hbm/render/entity/effect/RenderMist.java @@ -0,0 +1,18 @@ +package com.hbm.render.entity.effect; + +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; + +public class RenderMist extends Render { + + @Override + public void doRender(Entity entity, double x, double y, double z, float f0, float f1) { + + } + + @Override + protected ResourceLocation getEntityTexture(Entity entity) { + return null; + } +} diff --git a/src/main/java/com/hbm/render/entity/mob/RenderCreeperUniversal.java b/src/main/java/com/hbm/render/entity/mob/RenderCreeperUniversal.java new file mode 100644 index 000000000..198be27b0 --- /dev/null +++ b/src/main/java/com/hbm/render/entity/mob/RenderCreeperUniversal.java @@ -0,0 +1,92 @@ +package com.hbm.render.entity.mob; + +import org.lwjgl.opengl.GL11; + +import net.minecraft.client.renderer.entity.RenderCreeper; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.util.MathHelper; +import net.minecraft.util.ResourceLocation; + +public class RenderCreeperUniversal extends RenderCreeper { + + private final ResourceLocation creeperTextures; + private final ResourceLocation armoredCreeperTextures; + private float swellMod = 1.0F; + + public RenderCreeperUniversal(String texture, String overlay) { + super(); + + creeperTextures = new ResourceLocation(texture); + armoredCreeperTextures = new ResourceLocation(overlay); + } + + public RenderCreeperUniversal setSwellMod(float mod) { + this.swellMod = mod; + return this; + } + + @Override + protected void preRenderCallback(EntityCreeper creeper, float interp) { + float swell = creeper.getCreeperFlashIntensity(interp); + float flash = 1.0F + MathHelper.sin(swell * 100.0F) * swell * 0.01F; + + if(swell < 0.0F) { + swell = 0.0F; + } + + if(swell > 1.0F) { + swell = 1.0F; + } + + swell *= swell; + swell *= swell; + swell *= swellMod; + float scaleHorizontal = (1.0F + swell * 0.4F) * flash; + float scaleVertical = (1.0F + swell * 0.1F) / flash; + GL11.glScalef(scaleHorizontal, scaleVertical, scaleHorizontal); + } + + @Override + protected int shouldRenderPass(EntityCreeper creeper, int pass, float interp) { + if(creeper.getPowered()) { + if(creeper.isInvisible()) { + GL11.glDepthMask(false); + } else { + GL11.glDepthMask(true); + } + + if(pass == 1) { + float time = (float) creeper.ticksExisted + interp; + this.bindTexture(armoredCreeperTextures); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + float x = time * 0.01F; + float y = time * 0.01F; + GL11.glTranslatef(x, y, 0.0F); + this.setRenderPassModel(this.creeperModel); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_BLEND); + float flashColor = 0.5F; + GL11.glColor4f(flashColor, flashColor, flashColor, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + return 1; + } + + if(pass == 2) { + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + } + } + + return -1; + } + + @Override + protected ResourceLocation getEntityTexture(EntityCreeper p_110775_1_) { + return creeperTextures; + } +} diff --git a/src/main/java/com/hbm/render/entity/mob/RenderNuclearCreeper.java b/src/main/java/com/hbm/render/entity/mob/RenderNuclearCreeper.java deleted file mode 100644 index 54bba99bb..000000000 --- a/src/main/java/com/hbm/render/entity/mob/RenderNuclearCreeper.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.hbm.render.entity.mob; - -import org.lwjgl.opengl.GL11; - -import com.hbm.entity.mob.EntityNuclearCreeper; -import com.hbm.lib.RefStrings; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelCreeper; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; - -public class RenderNuclearCreeper extends RenderLiving -{ - private static final ResourceLocation armoredCreeperTextures = new ResourceLocation(RefStrings.MODID + ":" + "textures/entity/creeper_armor.png"); - private static final ResourceLocation creeperTextures = new ResourceLocation(RefStrings.MODID + ":" + "textures/entity/creeper.png"); - /** The creeper model. */ - private ModelBase creeperModel = new ModelCreeper(2.0F); - - public RenderNuclearCreeper() - { - super(new ModelCreeper(), 0.5F); - } - - /** - * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: - * entityLiving, partialTickTime - */ - protected void preRenderCallback(EntityNuclearCreeper p_77041_1_, float p_77041_2_) - { - float f1 = p_77041_1_.getCreeperFlashIntensity(p_77041_2_); - float f2 = 1.0F + MathHelper.sin(f1 * 100.0F) * f1 * 0.01F; - - if (f1 < 0.0F) - { - f1 = 0.0F; - } - - if (f1 > 1.0F) - { - f1 = 1.0F; - } - - f1 *= f1; - f1 *= f1; - float f3 = (1.0F + f1 * 0.4F) * f2; - float f4 = (1.0F + f1 * 0.1F) / f2; - GL11.glScalef(f3, f4, f3); - } - - /** - * Returns an ARGB int color back. Args: entityLiving, lightBrightness, partialTickTime - */ - protected int getColorMultiplier(EntityNuclearCreeper p_77030_1_, float p_77030_2_, float p_77030_3_) - { - float f2 = p_77030_1_.getCreeperFlashIntensity(p_77030_3_); - - if ((int)(f2 * 10.0F) % 2 == 0) - { - return 0; - } - else - { - int i = (int)(f2 * 0.2F * 255.0F); - - if (i < 0) - { - i = 0; - } - - if (i > 255) - { - i = 255; - } - - short short1 = 255; - short short2 = 255; - short short3 = 255; - return i << 24 | short1 << 16 | short2 << 8 | short3; - } - } - - /** - * Queries whether should render the specified pass or not. - */ - protected int shouldRenderPass(EntityNuclearCreeper p_77032_1_, int p_77032_2_, float p_77032_3_) - { - if (p_77032_1_.getPowered()) - { - if (p_77032_1_.isInvisible()) - { - GL11.glDepthMask(false); - } - else - { - GL11.glDepthMask(true); - } - - if (p_77032_2_ == 1) - { - float f1 = p_77032_1_.ticksExisted + p_77032_3_; - this.bindTexture(armoredCreeperTextures); - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glLoadIdentity(); - float f2 = f1 * 0.01F; - float f3 = f1 * 0.01F; - GL11.glTranslatef(f2, f3, 0.0F); - this.setRenderPassModel(this.creeperModel); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glEnable(GL11.GL_BLEND); - float f4 = 0.5F; - GL11.glColor4f(f4, f4, f4, 1.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); - return 1; - } - - if (p_77032_2_ == 2) - { - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glLoadIdentity(); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - } - } - - return -1; - } - - protected int inheritRenderPass(EntityNuclearCreeper p_77035_1_, int p_77035_2_, float p_77035_3_) - { - return -1; - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - protected ResourceLocation getEntityTexture(EntityNuclearCreeper p_110775_1_) - { - return creeperTextures; - } - - /** - * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: - * entityLiving, partialTickTime - */ - @Override - protected void preRenderCallback(EntityLivingBase p_77041_1_, float p_77041_2_) - { - this.preRenderCallback((EntityNuclearCreeper)p_77041_1_, p_77041_2_); - } - - /** - * Returns an ARGB int color back. Args: entityLiving, lightBrightness, partialTickTime - */ - @Override - protected int getColorMultiplier(EntityLivingBase p_77030_1_, float p_77030_2_, float p_77030_3_) - { - return this.getColorMultiplier((EntityNuclearCreeper)p_77030_1_, p_77030_2_, p_77030_3_); - } - - /** - * Queries whether should render the specified pass or not. - */ - @Override - protected int shouldRenderPass(EntityLivingBase p_77032_1_, int p_77032_2_, float p_77032_3_) - { - return this.shouldRenderPass((EntityNuclearCreeper)p_77032_1_, p_77032_2_, p_77032_3_); - } - - @Override - protected int inheritRenderPass(EntityLivingBase p_77035_1_, int p_77035_2_, float p_77035_3_) - { - return this.inheritRenderPass((EntityNuclearCreeper)p_77035_1_, p_77035_2_, p_77035_3_); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - @Override - protected ResourceLocation getEntityTexture(Entity p_110775_1_) - { - return this.getEntityTexture((EntityNuclearCreeper)p_110775_1_); - } -} diff --git a/src/main/java/com/hbm/render/entity/mob/RenderTaintedCreeper.java b/src/main/java/com/hbm/render/entity/mob/RenderTaintedCreeper.java deleted file mode 100644 index ecdd0f3e4..000000000 --- a/src/main/java/com/hbm/render/entity/mob/RenderTaintedCreeper.java +++ /dev/null @@ -1,189 +0,0 @@ -package com.hbm.render.entity.mob; - -import org.lwjgl.opengl.GL11; - -import com.hbm.entity.mob.EntityTaintedCreeper; -import com.hbm.lib.RefStrings; - -import net.minecraft.client.model.ModelBase; -import net.minecraft.client.model.ModelCreeper; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.MathHelper; -import net.minecraft.util.ResourceLocation; - -public class RenderTaintedCreeper extends RenderLiving -{ - private static final ResourceLocation armoredCreeperTextures = new ResourceLocation(RefStrings.MODID + ":" + "textures/entity/creeper_armor_taint.png"); - private static final ResourceLocation creeperTextures = new ResourceLocation(RefStrings.MODID + ":" + "textures/entity/creeper_tainted.png"); - /** The creeper model. */ - private ModelBase creeperModel = new ModelCreeper(2.0F); - - public RenderTaintedCreeper() - { - super(new ModelCreeper(), 0.5F); - } - - /** - * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: - * entityLiving, partialTickTime - */ - protected void preRenderCallback(EntityTaintedCreeper p_77041_1_, float p_77041_2_) - { - float f1 = p_77041_1_.getCreeperFlashIntensity(p_77041_2_); - float f2 = 1.0F + MathHelper.sin(f1 * 100.0F) * f1 * 0.01F; - - if (f1 < 0.0F) - { - f1 = 0.0F; - } - - if (f1 > 1.0F) - { - f1 = 1.0F; - } - - f1 *= f1; - f1 *= f1; - float f3 = (1.0F + f1 * 0.4F) * f2; - float f4 = (1.0F + f1 * 0.1F) / f2; - GL11.glScalef(f3, f4, f3); - } - - /** - * Returns an ARGB int color back. Args: entityLiving, lightBrightness, partialTickTime - */ - protected int getColorMultiplier(EntityTaintedCreeper p_77030_1_, float p_77030_2_, float p_77030_3_) - { - float f2 = p_77030_1_.getCreeperFlashIntensity(p_77030_3_); - - if ((int)(f2 * 10.0F) % 2 == 0) - { - return 0; - } - else - { - int i = (int)(f2 * 0.2F * 255.0F); - - if (i < 0) - { - i = 0; - } - - if (i > 255) - { - i = 255; - } - - short short1 = 255; - short short2 = 255; - short short3 = 255; - return i << 24 | short1 << 16 | short2 << 8 | short3; - } - } - - /** - * Queries whether should render the specified pass or not. - */ - protected int shouldRenderPass(EntityTaintedCreeper p_77032_1_, int p_77032_2_, float p_77032_3_) - { - if (p_77032_1_.getPowered()) - { - if (p_77032_1_.isInvisible()) - { - GL11.glDepthMask(false); - } - else - { - GL11.glDepthMask(true); - } - - if (p_77032_2_ == 1) - { - float f1 = p_77032_1_.ticksExisted + p_77032_3_; - this.bindTexture(armoredCreeperTextures); - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glLoadIdentity(); - float f2 = f1 * 0.01F; - float f3 = f1 * 0.01F; - GL11.glTranslatef(f2, f3, 0.0F); - this.setRenderPassModel(this.creeperModel); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glEnable(GL11.GL_BLEND); - float f4 = 0.5F; - GL11.glColor4f(f4, f4, f4, 1.0F); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); - return 1; - } - - if (p_77032_2_ == 2) - { - GL11.glMatrixMode(GL11.GL_TEXTURE); - GL11.glLoadIdentity(); - GL11.glMatrixMode(GL11.GL_MODELVIEW); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_BLEND); - } - } - - return -1; - } - - protected int inheritRenderPass(EntityTaintedCreeper p_77035_1_, int p_77035_2_, float p_77035_3_) - { - return -1; - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - protected ResourceLocation getEntityTexture(EntityTaintedCreeper p_110775_1_) - { - return creeperTextures; - } - - /** - * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: - * entityLiving, partialTickTime - */ - @Override - protected void preRenderCallback(EntityLivingBase p_77041_1_, float p_77041_2_) - { - this.preRenderCallback((EntityTaintedCreeper)p_77041_1_, p_77041_2_); - } - - /** - * Returns an ARGB int color back. Args: entityLiving, lightBrightness, partialTickTime - */ - @Override - protected int getColorMultiplier(EntityLivingBase p_77030_1_, float p_77030_2_, float p_77030_3_) - { - return this.getColorMultiplier((EntityTaintedCreeper)p_77030_1_, p_77030_2_, p_77030_3_); - } - - /** - * Queries whether should render the specified pass or not. - */ - @Override - protected int shouldRenderPass(EntityLivingBase p_77032_1_, int p_77032_2_, float p_77032_3_) - { - return this.shouldRenderPass((EntityTaintedCreeper)p_77032_1_, p_77032_2_, p_77032_3_); - } - - @Override - protected int inheritRenderPass(EntityLivingBase p_77035_1_, int p_77035_2_, float p_77035_3_) - { - return this.inheritRenderPass((EntityTaintedCreeper)p_77035_1_, p_77035_2_, p_77035_3_); - } - - /** - * Returns the location of an entity's texture. Doesn't seem to be called unless you call Render.bindEntityTexture. - */ - @Override - protected ResourceLocation getEntityTexture(Entity p_110775_1_) - { - return this.getEntityTexture((EntityTaintedCreeper)p_110775_1_); - } -} diff --git a/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java b/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java index ac68222fe..58bc4da95 100644 --- a/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java +++ b/src/main/java/com/hbm/render/entity/projectile/RenderChemical.java @@ -29,12 +29,6 @@ public class RenderChemical extends Render { EntityChemical chem = (EntityChemical) entity; ChemicalStyle style = chem.getStyle(); - if(chem.lastClientPosX == -1 && chem.lastClientPosY == -1 && chem.lastClientPosZ == -1) { - chem.lastClientPosX = chem.posX - chem.motionX; - chem.lastClientPosY = chem.posY - chem.motionY; - chem.lastClientPosZ = chem.posZ - chem.motionZ; - } - if(style == ChemicalStyle.AMAT || style == ChemicalStyle.LIGHTNING) renderAmatBeam(chem, f1); @@ -47,10 +41,6 @@ public class RenderChemical extends Render { this.bindEntityTexture(chem); renderGasFire(chem, f1); } - - chem.lastClientPosX = chem.prevPosX + (chem.posX - chem.prevPosX) * f1; - chem.lastClientPosY = chem.prevPosX + (chem.posY - chem.prevPosY) * f1; - chem.lastClientPosZ = chem.prevPosX + (chem.posZ - chem.prevPosZ) * f1; GL11.glPopMatrix(); } diff --git a/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java b/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java new file mode 100644 index 000000000..6ab331111 --- /dev/null +++ b/src/main/java/com/hbm/render/item/ItemRenderBoltgun.java @@ -0,0 +1,99 @@ +package com.hbm.render.item; + +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 ItemRenderBoltgun 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.glShadeModel(GL11.GL_SMOOTH); + Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.boltgun_tex); + + switch(type) { + + case EQUIPPED_FIRST_PERSON: + + double s0 = 0.15D; + GL11.glTranslated(0.5, 0.35, -0.25F); + GL11.glRotated(15, 0, 0, 1); + GL11.glRotated(80, 0, 1, 0); + GL11.glScaled(s0, s0, s0); + + GL11.glPushMatrix(); + double[] anim = HbmAnimations.getRelevantTransformation("RECOIL"); + GL11.glTranslated(0, 0, -anim[0]); + ResourceManager.boltgun.renderPart("Barrel"); + GL11.glPopMatrix(); + + break; + + case EQUIPPED: + + double scale = 0.25D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(10, 0, 1, 0); + GL11.glRotated(10, 0, 0, 1); + GL11.glRotated(10, 1, 0, 0); + GL11.glTranslated(1.5, -0.25, 1); + + break; + + case ENTITY: + + double s1 = 0.1D; + GL11.glScaled(s1, s1, s1); + break; + + case INVENTORY: + + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + + double s = 1.75D; + GL11.glTranslated(7, 10, 0); + GL11.glRotated(-90, 0, 1, 0); + GL11.glRotated(-135, 1, 0, 0); + GL11.glScaled(s, s, -s); + + break; + + default: break; + } + + ResourceManager.boltgun.renderPart("Gun"); + if(type != type.EQUIPPED_FIRST_PERSON) { + ResourceManager.boltgun.renderPart("Barrel"); + } + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderChainsaw.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderChainsaw.java index 26522b8ef..f758b99b8 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderChainsaw.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderChainsaw.java @@ -12,8 +12,6 @@ import net.minecraft.util.MathHelper; import net.minecraftforge.client.IItemRenderer; public class ItemRenderChainsaw implements IItemRenderer { - - public ItemRenderChainsaw() { } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { @@ -29,7 +27,6 @@ public class ItemRenderChainsaw implements IItemRenderer { @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { - return type == ItemRenderType.ENTITY && (helper == ItemRendererHelper.ENTITY_ROTATION || helper == ItemRendererHelper.ENTITY_BOBBING); } diff --git a/src/main/java/com/hbm/render/tileentity/RenderWatz.java b/src/main/java/com/hbm/render/tileentity/RenderWatz.java index b37cf2761..4fae3299a 100644 --- a/src/main/java/com/hbm/render/tileentity/RenderWatz.java +++ b/src/main/java/com/hbm/render/tileentity/RenderWatz.java @@ -26,5 +26,4 @@ public class RenderWatz extends TileEntitySpecialRenderer { GL11.glPopMatrix(); } - } diff --git a/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java b/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java new file mode 100644 index 000000000..973029bf9 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderWatzMultiblock.java @@ -0,0 +1,62 @@ +package com.hbm.render.tileentity; + +import org.lwjgl.opengl.GL11; + +import com.hbm.blocks.ModBlocks; +import com.hbm.render.util.SmallBlockPronter; + +import net.minecraft.client.renderer.texture.TextureMap; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.tileentity.TileEntity; + +public class RenderWatzMultiblock extends TileEntitySpecialRenderer { + + @Override + public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) { + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + bindTexture(TextureMap.locationBlocksTexture); + SmallBlockPronter.startDrawing(); + + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 0F, 1F, 0F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 0F, 2F, 0F); + + for(int i = 0; i < 3; i++) { + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 1F, i, 0F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 2F, i, 0F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 0F, i, 1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 0F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, -1F, i, 0F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, -2F, i, 0F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 0F, i, -1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 0F, i, -2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 1F, i, 1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, 1F, i, -1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, -1F, i, 1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_element, 0, -1F, i, -1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 2F, i, 1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 2F, i, -1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 1F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, -1F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, -2F, i, 1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, -2F, i, -1F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, 1F, i, -2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_cooler, 0, -1F, i, -2F); + for(int j = -1; j < 2; j++) { + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, 3F, i, j); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, j, i, 3F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, -3F, i, j); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, j, i, -3F); + } + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, 2F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, 2F, i, -2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, -2F, i, 2F); + SmallBlockPronter.drawSmolBlockAt(ModBlocks.watz_end, 0, -2F, i, -2F); + } + + SmallBlockPronter.draw(); + + GL11.glPopMatrix(); + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RenderWatzPump.java b/src/main/java/com/hbm/render/tileentity/RenderWatzPump.java new file mode 100644 index 000000000..4805281fe --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderWatzPump.java @@ -0,0 +1,54 @@ +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.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; + +public class RenderWatzPump extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float f) { + + GL11.glPushMatrix(); + + GL11.glTranslatef((float) x + 0.5F, (float) y, (float) z + 0.5F); + + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_LIGHTING); + + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.watz_pump_tex); + ResourceManager.watz_pump.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.watz_pump); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase() { + public void renderInventory() { + GL11.glTranslated(0, -1.5, 0); + double scale = 5; + GL11.glScaled(scale, scale, scale); + } + public void renderCommon() { + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.watz_pump_tex); + ResourceManager.watz_pump.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + }}; + } +} diff --git a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java index 26a0d0625..49ef618d6 100644 --- a/src/main/java/com/hbm/render/tileentity/RendererObjTester.java +++ b/src/main/java/com/hbm/render/tileentity/RendererObjTester.java @@ -26,18 +26,8 @@ import net.minecraftforge.client.model.IModelCustom; public class RendererObjTester extends TileEntitySpecialRenderer { private static final ResourceLocation objTesterModelRL = new ResourceLocation(/*"/assets/" + */RefStrings.MODID, "models/TestObj.obj"); - //private static final ResourceLocation objTesterModelRL = new ResourceLocation(/*"/assets/" + */RefStrings.MODID, "models/Prototype.obj"); - private IModelCustom objTesterModel; - private ResourceLocation objTesterTexture; - - public RendererObjTester() - { - objTesterModel = AdvancedModelLoader.loadModel(objTesterModelRL); - objTesterTexture = new ResourceLocation(RefStrings.MODID, "textures/models/TestObj.png"); - //objTesterTexture = new ResourceLocation(RefStrings.MODID, "textures/models/Prototype.png"); - } - @Override + @Override public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float f) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y, z + 0.5); diff --git a/src/main/java/com/hbm/render/util/SmallBlockPronter.java b/src/main/java/com/hbm/render/util/SmallBlockPronter.java index 7c19b3441..50486e05b 100644 --- a/src/main/java/com/hbm/render/util/SmallBlockPronter.java +++ b/src/main/java/com/hbm/render/util/SmallBlockPronter.java @@ -2,19 +2,26 @@ package com.hbm.render.util; import org.lwjgl.opengl.GL11; +import com.hbm.interfaces.Spaghetti; + +import net.minecraft.block.Block; +import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.Tessellator; +import net.minecraft.util.IIcon; +import net.minecraftforge.common.util.ForgeDirection; public class SmallBlockPronter { static float pixel = 1F/16F; /** - * Bind the required texture yourself bruh + * Bind the required texture yourself bruh <- ding dong, 2023 bob speaking, fuck this guy * @param loc * @param x * @param y * @param z */ + @Deprecated @Spaghetti("this is horseshit") public static void renderSmolBlockAt(float x, float y, float z) { GL11.glPushMatrix(); GL11.glTranslatef(x - 1, y - 1, z); @@ -64,4 +71,65 @@ public class SmallBlockPronter { GL11.glPopMatrix(); } + + public static void startDrawing() { + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + OpenGlHelper.glBlendFunc(770, 771, 1, 0); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.75F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDepthMask(false); + Tessellator.instance.startDrawingQuads(); + } + + public static void draw() { + Tessellator.instance.draw(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_LIGHTING); + } + + public static void drawSmolBlockAt(Block b, int meta, float x, float y, float z) { + + Tessellator tesseract = Tessellator.instance; + IIcon iconTop = b.getIcon(ForgeDirection.UP.ordinal(), meta); + IIcon iconBottom = b.getIcon(ForgeDirection.DOWN.ordinal(), meta); + IIcon iconNorth = b.getIcon(ForgeDirection.NORTH.ordinal(), meta); + IIcon iconSouth = b.getIcon(ForgeDirection.SOUTH.ordinal(), meta); + IIcon iconEast = b.getIcon(ForgeDirection.EAST.ordinal(), meta); + IIcon iconWest = b.getIcon(ForgeDirection.WEST.ordinal(), meta); + + tesseract.setNormal(0F, 1F, 0F); + + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconSouth.getMaxU(), iconSouth.getMinV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconSouth.getMinU(), iconSouth.getMinV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconSouth.getMinU(), iconSouth.getMaxV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconSouth.getMaxU(), iconSouth.getMaxV()); + + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 11 * pixel / 2, iconEast.getMaxU(), iconEast.getMinV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconEast.getMinU(), iconEast.getMinV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconEast.getMinU(), iconEast.getMaxV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 11 * pixel / 2, z + 11 * pixel / 2, iconEast.getMaxU(), iconEast.getMaxV()); + + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 11 * pixel / 2, iconNorth.getMaxU(), iconNorth.getMinV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 11 * pixel / 2, iconNorth.getMinU(), iconNorth.getMinV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2,y + 11 * pixel / 2, z + 11 * pixel / 2, iconNorth.getMinU(), iconNorth.getMaxV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 11 * pixel / 2, z + 11 * pixel / 2, iconNorth.getMaxU(), iconNorth.getMaxV()); + + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconWest.getMaxU(), iconWest.getMinV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 11 * pixel / 2, iconWest.getMinU(), iconWest.getMinV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 11 * pixel / 2, z + 11 * pixel / 2, iconWest.getMinU(), iconWest.getMaxV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconWest.getMaxU(), iconWest.getMaxV()); + + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 11 * pixel / 2, iconTop.getMaxU(), iconTop.getMinV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 11 * pixel / 2, iconTop.getMinU(), iconTop.getMinV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconTop.getMinU(), iconTop.getMaxV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 1 - 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconTop.getMaxU(), iconTop.getMaxV()); + + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 11 * pixel / 2, z + 11 * pixel / 2, iconBottom.getMaxU(), iconBottom.getMinV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 11 * pixel / 2, z + 11 * pixel / 2, iconBottom.getMinU(), iconBottom.getMinV()); + tesseract.addVertexWithUV(x + 1 - 11 * pixel / 2, y + 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconBottom.getMinU(), iconBottom.getMaxV()); + tesseract.addVertexWithUV(x + 11 * pixel / 2, y + 11 * pixel / 2, z + 1 - 11 * pixel / 2, iconBottom.getMaxU(), iconBottom.getMaxV()); + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index b4e7437c3..e8d059972 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -11,7 +11,9 @@ import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; +import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.MachineFan.TileEntityFan; +import com.hbm.blocks.machine.WatzPump.TileEntityWatzPump; import com.hbm.blocks.network.BlockCablePaintable.TileEntityCablePaintable; import com.hbm.blocks.network.CableDiode.TileEntityDiode; import com.hbm.blocks.network.FluidDuctGauge.TileEntityPipeGauge; @@ -77,6 +79,7 @@ public class TileMappings { put(TileEntityMachineTeleporter.class, "tileentity_teleblock"); put(TileEntityHatch.class, "tileentity_seal_lid"); put(TileEntityMachineIGenerator.class, "tileentity_igenerator"); + put(TileEntityPartEmitter.class, "tileentity_partemitter"); put(TileEntityDummy.class, "tileentity_dummy"); put(TileEntityMachineCyclotron.class, "tileentity_cyclotron"); put(TileEntityOilDuct.class, "tileentity_oil_duct"); @@ -165,6 +168,7 @@ public class TileMappings { put(TileEntityMachineFENSU.class, "tileentity_fensu"); put(TileEntityTrappedBrick.class, "tileentity_trapped_brick"); put(TileEntityPlasmaStruct.class, "tileentity_plasma_struct"); + put(TileEntityWatzStruct.class, "tileentity_watz_struct"); put(TileEntityHadronDiode.class, "tileentity_hadron_diode"); put(TileEntityHadronPower.class, "tileentity_hadron_power"); put(TileEntityHadron.class, "tileentity_hadron"); @@ -183,7 +187,6 @@ public class TileMappings { put(TileEntityPipeBaseNT.class, "tileentity_pipe_base"); put(TileEntityPipePaintable.class, "tileentity_pipe_paintable"); put(TileEntityPipeGauge.class, "tileentity_pipe_gauge"); - put(TileEntityWatz.class, "tileentity_watz"); put(TileEntityMachineBAT9000.class, "tileentity_bat9000"); put(TileEntityMachineOrbus.class, "tileentity_orbus"); @@ -306,6 +309,9 @@ public class TileMappings { put(TileEntityReactorZirnox.class, "tileentity_zirnox"); put(TileEntityZirnoxDestroyed.class, "tileentity_zirnox_destroyed"); + + put(TileEntityWatz.class, "tileentity_watz"); + put(TileEntityWatzPump.class, "tileentity_watz_pump"); } private static void putPile() { @@ -347,6 +353,7 @@ public class TileMappings { put(TileEntityCraneInserter.class, "tileentity_inserter"); put(TileEntityCraneExtractor.class, "tileentity_extractor"); + put(TileEntityCraneGrabber.class, "tileentity_grabber"); put(TileEntityCraneBoxer.class, "tileentity_boxer"); put(TileEntityCraneUnboxer.class, "tileentity_unboxer"); put(TileEntityCraneRouter.class, "tileentity_router"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java index 9204a1dbd..96e338e2a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineMixer.java @@ -145,23 +145,11 @@ public class TileEntityMachineMixer extends TileEntityMachineBase implements INB if(recipe == null) return false; - if(recipe.input1 != null) { - - if(recipe.input1.type != tanks[0].getTankType()) { - tanks[0].setTankType(recipe.input1.type); - } - - if(tanks[0].getFill() < recipe.input1.fill) return false; - } - - if(recipe.input2 != null) { - - if(recipe.input2.type != tanks[1].getTankType()) { - tanks[1].setTankType(recipe.input2.type); - } - - if(tanks[1].getFill() < recipe.input2.fill) return false; - } + tanks[0].setTankType(recipe.input1 != null ? recipe.input1.type : Fluids.NONE); + tanks[1].setTankType(recipe.input2 != null ? recipe.input2.type : Fluids.NONE); + + if(recipe.input1 != null && tanks[0].getFill() < recipe.input1.fill) return false; + if(recipe.input2 != null && tanks[1].getFill() < recipe.input2.fill) return false; /* simplest check would usually go first, but fluid checks also do the setup and we want that to happen even without power */ if(this.power < getConsumption()) return false; diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java index 8a0bfc0ac..d6e7d9e1a 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineSchrabidiumTransmutator.java @@ -1,6 +1,7 @@ package com.hbm.tileentity.machine; import com.hbm.config.VersatileConfig; +import com.hbm.inventory.OreDictManager; import com.hbm.inventory.container.ContainerMachineSchrabidiumTransmutator; import com.hbm.inventory.gui.GUIMachineSchrabidiumTransmutator; import com.hbm.inventory.recipes.MachineRecipes; @@ -50,7 +51,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB public boolean isItemValidForSlot(int i, ItemStack stack) { switch (i) { case 0: - if (MachineRecipes.mODE(stack, "ingotUranium")) + if (MachineRecipes.mODE(stack, OreDictManager.U.ingot())) return true; break; case 2: @@ -113,7 +114,7 @@ public class TileEntityMachineSchrabidiumTransmutator extends TileEntityMachineB } public boolean canProcess() { - if (power >= 4990000 && slots[0] != null && MachineRecipes.mODE(slots[0], "ingotUranium") && slots[2] != null + if (power >= 4990000 && slots[0] != null && MachineRecipes.mODE(slots[0], OreDictManager.U.ingot()) && slots[2] != null && slots[2].getItem() == ModItems.redcoil_capacitor && ItemCapacitor.getDura(slots[2]) > 0 && (slots[1] == null || (slots[1] != null && slots[1].getItem() == VersatileConfig.getTransmutatorItem() diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java b/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java index c40358133..fcab378f7 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityTesla.java @@ -5,7 +5,6 @@ import java.util.List; import com.hbm.blocks.ModBlocks; import com.hbm.entity.mob.EntityCyberCrab; -import com.hbm.entity.mob.EntityNuclearCreeper; import com.hbm.entity.mob.EntityTaintCrab; import com.hbm.entity.mob.EntityTeslaCrab; import com.hbm.lib.Library; @@ -134,10 +133,6 @@ public class TileEntityTesla extends TileEntityMachineBase implements IEnergyUse ((EntityCreeper)e).getDataWatcher().updateObject(17, Byte.valueOf((byte)1)); } - if(e instanceof EntityNuclearCreeper) { - ((EntityNuclearCreeper)e).getDataWatcher().updateObject(17, Byte.valueOf((byte)1)); - } - double offset = 0; if(source != null && e instanceof EntityPlayer && worldObj.isRemote) diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java index f5e8f68de..4b8bc95e3 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatz.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import com.hbm.blocks.ModBlocks; import com.hbm.interfaces.IControlReceiver; import com.hbm.inventory.container.ContainerWatz; import com.hbm.inventory.fluid.Fluids; @@ -28,6 +29,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; @@ -40,6 +42,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand public double fluxLastBase; //flux created by the previous passive emission, only used for display public double fluxLastReaction; //flux created by the previous reaction, used for the next reaction public double fluxDisplay; + public boolean isOn; /* lock types for item IO */ public boolean isLocked = false; @@ -64,6 +67,7 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand if(!worldObj.isRemote && !updateLock()) { + boolean turnedOn = worldObj.getBlock(xCoord, yCoord + 3, zCoord) == ModBlocks.watz_pump && worldObj.getIndirectPowerLevelTo(xCoord, yCoord + 5, zCoord, 0) > 0; List segments = new ArrayList(); segments.add(this); this.subscribeToTop(); @@ -97,11 +101,18 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand } /* update reaction, top to bottom */ - this.updateReaction(null, sharedTanks); + this.updateReaction(null, sharedTanks, turnedOn); for(int i = 1; i < segments.size(); i++) { TileEntityWatz segment = segments.get(i); TileEntityWatz above = segments.get(i - 1); - segment.updateReaction(above, sharedTanks); + segment.updateReaction(above, sharedTanks, turnedOn); + } + + /* send sync packets (order doesn't matter) */ + for(TileEntityWatz segment : segments) { + segment.isOn = turnedOn; + segment.sendPacket(sharedTanks); + segment.heat *= 0.99; //cool 1% per tick } /* re-distribute fluid from shared tanks back into actual tanks, bottom to top */ @@ -109,28 +120,18 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand TileEntityWatz segment = segments.get(i); for(int j = 0; j < 3; j++) { int min = Math.min(segment.tanks[j].getMaxFill(), sharedTanks[j].getFill()); - segment.tanks[j].setFill(min); sharedTanks[j].setFill(sharedTanks[j].getFill() - min); + segment.tanks[j].setFill(min); } } - /* send sync packets (order doesn't matter) */ - for(TileEntityWatz segment : segments) { - segment.sendPacket(sharedTanks); - segment.heat *= 0.99; //cool 1% per tick - } - segments.get(segments.size() - 1).sendOutBottom(); } } /** basic sanity checking, usually wouldn't do anything except when NBT loading borks */ public void setupCoolant() { - - if(!tanks[0].getTankType().hasTrait(FT_Heatable.class)) { - tanks[0].setTankType(Fluids.COOLANT); - } - + tanks[0].setTankType(Fluids.COOLANT); tanks[1].setTankType(tanks[0].getTankType().getTrait(FT_Heatable.class).getFirstStep().typeProduced); } @@ -148,62 +149,69 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand int cycles = Math.min(heatCycles, Math.min(hotCycles, coolCycles)); this.heat -= cycles * step.heatReq; - tanks[0].setFill(tanks[0].getFill() - coolCycles * step.amountReq); - tanks[1].setFill(tanks[1].getFill() + hotCycles * step.amountProduced); + tanks[0].setFill(tanks[0].getFill() - cycles * step.amountReq); + tanks[1].setFill(tanks[1].getFill() + cycles * step.amountProduced); } /** enforces strict top to bottom update order (instead of semi-random based on placement) */ - public void updateReaction(TileEntityWatz above, FluidTank[] tanks) { + public void updateReaction(TileEntityWatz above, FluidTank[] tanks, boolean turnedOn) { - List pellets = new ArrayList(); - - for(int i = 0; i < 24; i++) { - ItemStack stack = slots[i]; - if(stack != null && stack.getItem() == ModItems.watz_pellet) { - pellets.add(stack); - } - } - - double baseFlux = 0D; - - /* init base flux */ - for(ItemStack stack : pellets) { - EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); - baseFlux += type.passive; - } - - double inputFlux = baseFlux + fluxLastReaction; - double addedFlux = 0D; - double addedHeat = 0D; - - for(ItemStack stack : pellets) { - EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); - Function burnFunc = type.burnFunc; - Function heatMod = type.heatMult; + if(turnedOn) { + List pellets = new ArrayList(); - if(burnFunc != null) { - double mod = heatMod != null ? heatMod.effonix(heat) : 1D; - double burn = burnFunc.effonix(inputFlux) * mod; - ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn); - addedFlux += burn; - addedHeat += type.heatEmission * burn; - tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * burn)); + for(int i = 0; i < 24; i++) { + ItemStack stack = slots[i]; + if(stack != null && stack.getItem() == ModItems.watz_pellet) { + pellets.add(stack); + } } - } - - for(ItemStack stack : pellets) { - EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); - Function absorbFunc = type.absorbFunc; - if(absorbFunc != null) { - addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction); + double baseFlux = 0D; + + /* init base flux */ + for(ItemStack stack : pellets) { + EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + baseFlux += type.passive; } + + double inputFlux = baseFlux + fluxLastReaction; + double addedFlux = 0D; + double addedHeat = 0D; + + for(ItemStack stack : pellets) { + EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + Function burnFunc = type.burnFunc; + Function heatMod = type.heatMult; + + if(burnFunc != null) { + double mod = heatMod != null ? heatMod.effonix(heat) : 1D; + double burn = burnFunc.effonix(inputFlux) * mod; + ItemWatzPellet.setYield(stack, ItemWatzPellet.getYield(stack) - burn); + addedFlux += burn; + addedHeat += type.heatEmission * burn; + tanks[2].setFill(tanks[2].getFill() + (int) Math.round(type.mudContent * burn)); + } + } + + for(ItemStack stack : pellets) { + EnumWatzType type = EnumUtil.grabEnumSafely(EnumWatzType.class, stack.getItemDamage()); + Function absorbFunc = type.absorbFunc; + + if(absorbFunc != null) { + addedHeat += absorbFunc.effonix(baseFlux + fluxLastReaction); + } + } + + this.heat += addedHeat; + this.fluxLastBase = baseFlux; + this.fluxLastReaction = addedFlux; + + } else { + this.fluxLastBase = 0; + this.fluxLastReaction = 0; + } - this.heat += addedHeat; - this.fluxLastBase = baseFlux; - this.fluxLastReaction = addedFlux; - if(above != null) { for(int i = 0; i < 24; i++) { ItemStack stackBottom = slots[i]; @@ -235,12 +243,25 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand NBTTagCompound data = new NBTTagCompound(); data.setInteger("heat", this.heat); + data.setBoolean("isOn", isOn); + data.setBoolean("lock", isLocked); data.setDouble("flux", this.fluxLastReaction + this.fluxLastBase); for(int i = 0; i < tanks.length; i++) { tanks[i].writeToNBT(data, "t" + i); } this.networkPack(data, 25); } + + @Override + public void networkUnpack(NBTTagCompound nbt) { + this.heat = nbt.getInteger("heat"); + this.isOn = nbt.getBoolean("isOn"); + this.isLocked = nbt.getBoolean("lock"); + this.fluxDisplay = nbt.getDouble("flux"); + for(int i = 0; i < tanks.length; i++) { + tanks[i].readFromNBT(nbt, "t" + i); + } + } /** Prevent manual updates when another segment is above this one */ public boolean updateLock() { @@ -272,14 +293,49 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand new DirPos(xCoord, yCoord - 1, zCoord - 2, ForgeDirection.DOWN) }; } - + @Override - public void networkUnpack(NBTTagCompound nbt) { - this.heat = nbt.getInteger("heat"); - this.fluxDisplay = nbt.getDouble("flux"); - for(int i = 0; i < tanks.length; i++) { - tanks[i].readFromNBT(nbt, "t" + i); + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + + NBTTagList list = nbt.getTagList("locks", 10); + + for(int i = 0; i < list.tagCount(); i++) { + NBTTagCompound nbt1 = list.getCompoundTagAt(i); + byte b0 = nbt1.getByte("slot"); + if(b0 >= 0 && b0 < slots.length) { + locks[b0] = ItemStack.loadItemStackFromNBT(nbt1); + } } + + for(int i = 0; i < tanks.length; i++) tanks[i].readFromNBT(nbt, "t" + i); + this.fluxLastBase = nbt.getDouble("lastFluxB"); + this.fluxLastReaction = nbt.getDouble("lastFluxR"); + + this.isLocked = nbt.getBoolean("isLocked"); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + + NBTTagList list = new NBTTagList(); + + for(int i = 0; i < locks.length; i++) { + if(locks[i] != null) { + NBTTagCompound nbt1 = new NBTTagCompound(); + nbt1.setByte("slot", (byte) i); + locks[i].writeToNBT(nbt1); + list.appendTag(nbt1); + } + } + nbt.setTag("locks", list); + + for(int i = 0; i < tanks.length; i++) tanks[i].writeToNBT(nbt, "t" + i); + nbt.setDouble("lastFluxB", fluxLastBase); + nbt.setDouble("lastFluxR", fluxLastReaction); + + nbt.setBoolean("isLocked", isLocked); } @Override @@ -307,7 +363,9 @@ public class TileEntityWatz extends TileEntityMachineBase implements IFluidStand @Override public boolean isItemValidForSlot(int i, ItemStack stack) { - return stack.getItem() == ModItems.watz_pellet; + if(stack.getItem() != ModItems.watz_pellet) return false; + if(!this.isLocked) return true; + return this.locks[i] != null && this.locks[i].getItem() == stack.getItem() && locks[i].getItemDamage() == stack.getItemDamage(); } @Override diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java b/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java new file mode 100644 index 000000000..f363b5945 --- /dev/null +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityWatzStruct.java @@ -0,0 +1,104 @@ +package com.hbm.tileentity.machine; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.machine.Watz; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.block.Block; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityWatzStruct extends TileEntity { + + @Override + public void updateEntity() { + + if(worldObj.isRemote) return; + if(worldObj.getTotalWorldTime() % 20 != 0) return; + + /* + * skeptics may say that his is shit. i don't necessarily disagree, but it was both easy and quick to do + * and it remains readable and not terribly long, so who the fuck cares. + */ + if(!cbr(ModBlocks.watz_cooler, 0, 1, 0)) return; + if(!cbr(ModBlocks.watz_cooler, 0, 2, 0)) return; + + for(int i = 0; i < 3; i++) { + if(!cbr(ModBlocks.watz_element, 1, i, 0)) return; + if(!cbr(ModBlocks.watz_element, 2, i, 0)) return; + if(!cbr(ModBlocks.watz_element, 0, i, 1)) return; + if(!cbr(ModBlocks.watz_element, 0, i, 2)) return; + if(!cbr(ModBlocks.watz_element, -1, i, 0)) return; + if(!cbr(ModBlocks.watz_element, -2, i, 0)) return; + if(!cbr(ModBlocks.watz_element, 0, i, -1)) return; + if(!cbr(ModBlocks.watz_element, 0, i, -2)) return; + if(!cbr(ModBlocks.watz_element, 1, i, 1)) return; + if(!cbr(ModBlocks.watz_element, 1, i, -1)) return; + if(!cbr(ModBlocks.watz_element, -1, i, 1)) return; + if(!cbr(ModBlocks.watz_element, -1, i, -1)) return; + if(!cbr(ModBlocks.watz_cooler, 2, i, 1)) return; + if(!cbr(ModBlocks.watz_cooler, 2, i, -1)) return; + if(!cbr(ModBlocks.watz_cooler, 1, i, 2)) return; + if(!cbr(ModBlocks.watz_cooler, -1, i, 2)) return; + if(!cbr(ModBlocks.watz_cooler, -2, i, 1)) return; + if(!cbr(ModBlocks.watz_cooler, -2, i, -1)) return; + if(!cbr(ModBlocks.watz_cooler, 1, i, -2)) return; + if(!cbr(ModBlocks.watz_cooler, -1, i, -2)) return; + + for(int j = -1; j < 2; j++) { + if(!cbr(ModBlocks.watz_end, 3, i, j)) return; + if(!cbr(ModBlocks.watz_end, j, i, 3)) return; + if(!cbr(ModBlocks.watz_end, -3, i, j)) return; + if(!cbr(ModBlocks.watz_end, j, i, -3)) return; + } + if(!cbr(ModBlocks.watz_end, 2, i, 2)) return; + if(!cbr(ModBlocks.watz_end, 2, i, -2)) return; + if(!cbr(ModBlocks.watz_end, -2, i, 2)) return; + if(!cbr(ModBlocks.watz_end, -2, i, -2)) return; + } + + Watz watz = (Watz)ModBlocks.watz; + BlockDummyable.safeRem = true; + worldObj.setBlock(xCoord, yCoord, zCoord, ModBlocks.watz, this.getBlockMetadata() + BlockDummyable.offset, 3); + watz.fillSpace(worldObj, xCoord, yCoord, zCoord, ForgeDirection.NORTH, 0); + BlockDummyable.safeRem = false; + } + + /** [G]et [B]lock at [R]elative position */ + private Block gbr(int x, int y, int z) { + return worldObj.getBlock(xCoord + x, yCoord + y, zCoord + z); + } + + /** [C]heck [B]lock at [R]elative position */ + private boolean cbr(Block b, int x, int y, int z) { + return b == gbr(x, y, z); + } + + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 3, + yCoord, + zCoord - 3, + xCoord + 4, + yCoord + 3, + zCoord + 4 + ); + } + + return bb; + } + + @Override + @SideOnly(Side.CLIENT) + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } +} diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java index 980717cce..e04bef058 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityMachineCatalyticCracker.java @@ -1,17 +1,10 @@ package com.hbm.tileentity.machine.oil; -import java.util.ArrayList; -import java.util.List; - import com.hbm.blocks.BlockDummyable; -import com.hbm.interfaces.IFluidAcceptor; -import com.hbm.interfaces.IFluidSource; import com.hbm.inventory.FluidStack; -import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; import com.hbm.inventory.recipes.CrackingRecipes; -import com.hbm.lib.Library; import com.hbm.tileentity.INBTPacketReceiver; import com.hbm.tileentity.TileEntityLoadedBase; import com.hbm.util.Tuple.Pair; @@ -24,20 +17,17 @@ import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.AxisAlignedBB; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements IFluidSource, IFluidAcceptor, INBTPacketReceiver, IFluidStandardTransceiver { +public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase implements INBTPacketReceiver, IFluidStandardTransceiver { public FluidTank[] tanks; - public List list1 = new ArrayList(); - public List list2 = new ArrayList(); - public List list3 = new ArrayList(); public TileEntityMachineCatalyticCracker() { tanks = new FluidTank[5]; - tanks[0] = new FluidTank(Fluids.BITUMEN, 4000, 0); - tanks[1] = new FluidTank(Fluids.STEAM, 8000, 1); - tanks[2] = new FluidTank(Fluids.OIL, 4000, 2); - tanks[3] = new FluidTank(Fluids.PETROLEUM, 4000, 3); - tanks[4] = new FluidTank(Fluids.SPENTSTEAM, 800, 4); + tanks[0] = new FluidTank(Fluids.BITUMEN, 4000); + tanks[1] = new FluidTank(Fluids.STEAM, 8000); + tanks[2] = new FluidTank(Fluids.OIL, 4000); + tanks[3] = new FluidTank(Fluids.PETROLEUM, 4000); + tanks[4] = new FluidTank(Fluids.SPENTSTEAM, 800); } @Override @@ -51,14 +41,11 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl updateConnections(); this.worldObj.theProfiler.endStartSection("catalyticCracker_do_recipe"); - if(worldObj.getTotalWorldTime() % 20 == 0) + if(worldObj.getTotalWorldTime() % 5 == 0) crack(); this.worldObj.theProfiler.endStartSection("catalyticCracker_send_fluid"); if(worldObj.getTotalWorldTime() % 10 == 0) { - fillFluidInit(tanks[2].getTankType()); - fillFluidInit(tanks[3].getTankType()); - fillFluidInit(tanks[4].getTankType()); for(DirPos pos : getConPos()) { for(int i = 2; i <= 4; i++) { @@ -149,63 +136,6 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl for(int i = 0; i < 5; i++) tanks[i].writeToNBT(nbt, "tank" + i); } - - @Override - public void setFillForSync(int fill, int index) { - if(index < 5 && tanks[index] != null) - tanks[index].setFill(fill); - } - - @Override - public void setFluidFill(int fill, FluidType type) { - for(FluidTank tank : tanks) { - if(tank.getTankType() == type) { - tank.setFill(fill); - } - } - } - - @Override - public void setTypeForSync(FluidType type, int index) { - this.tanks[index].setTankType(type); - } - - @Override - public int getFluidFill(FluidType type) { - for(FluidTank tank : tanks) { - if(tank.getTankType() == type) { - return tank.getFill(); - } - } - return 0; - } - - @Override - public int getMaxFluidFill(FluidType type) { - if(type == tanks[0].getTankType()) - return tanks[0].getMaxFill(); - else if(type == tanks[1].getTankType()) - return tanks[1].getMaxFill(); - else - return 0; - } - - @Override - public void fillFluidInit(FluidType type) { - - ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); - ForgeDirection rot = dir.getRotation(ForgeDirection.UP); - - fillFluid(xCoord + dir.offsetX * 4 + rot.offsetX * 1, yCoord, zCoord + dir.offsetZ * 4 + rot.offsetZ * 1, this.getTact(), type); - fillFluid(xCoord + dir.offsetX * 4 - rot.offsetX * 2, yCoord, zCoord + dir.offsetZ * 4 - rot.offsetZ * 2, this.getTact(), type); - fillFluid(xCoord - dir.offsetX * 4 + rot.offsetX * 1, yCoord, zCoord - dir.offsetZ * 4 + rot.offsetZ * 1, this.getTact(), type); - fillFluid(xCoord - dir.offsetX * 4 - rot.offsetX * 2, yCoord, zCoord - dir.offsetZ * 4 - rot.offsetZ * 2, this.getTact(), type); - - fillFluid(xCoord + dir.offsetX * 2 + rot.offsetX * 3, yCoord, zCoord + dir.offsetZ * 2 + rot.offsetZ * 3, this.getTact(), type); - fillFluid(xCoord + dir.offsetX * 2 - rot.offsetX * 4, yCoord, zCoord + dir.offsetZ * 2 - rot.offsetZ * 4, this.getTact(), type); - fillFluid(xCoord - dir.offsetX * 2 + rot.offsetX * 3, yCoord, zCoord - dir.offsetZ * 2 + rot.offsetZ * 3, this.getTact(), type); - fillFluid(xCoord - dir.offsetX * 2 - rot.offsetX * 4, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 4, this.getTact(), type); - } protected DirPos[] getConPos() { @@ -223,31 +153,6 @@ public class TileEntityMachineCatalyticCracker extends TileEntityLoadedBase impl new DirPos(xCoord - dir.offsetX * 2 - rot.offsetX * 4, yCoord, zCoord - dir.offsetZ * 2 - rot.offsetZ * 4, rot.getOpposite()) }; } - - @Override - public void fillFluid(int x, int y, int z, boolean newTact, FluidType type) { - Library.transmitFluid(x, y, z, newTact, this, worldObj, type); - } - - @Override - public boolean getTact() { - return worldObj.getTotalWorldTime() % 20 < 10; - } - - @Override - public List getFluidList(FluidType type) { - if(type == tanks[2].getTankType()) return list1; - if(type == tanks[3].getTankType()) return list2; - if(type == tanks[4].getTankType()) return list3; - return new ArrayList(); - } - - @Override - public void clearFluidList(FluidType type) { - if(type == tanks[2].getTankType()) list1.clear(); - if(type == tanks[3].getTankType()) list2.clear(); - if(type == tanks[4].getTankType()) list3.clear(); - } AxisAlignedBB bb = null; diff --git a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java index 307c87f9e..7ac708861 100644 --- a/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java +++ b/src/main/java/com/hbm/tileentity/machine/oil/TileEntityOilDrillBase.java @@ -199,7 +199,7 @@ public abstract class TileEntityOilDrillBase extends TileEntityMachineBase imple public int getDelayEff() { int delay = getDelay(); - return Math.max((delay - (delay / 4 * this.speedLevel) + (delay / 10 * this.energyLevel) / this.overLevel), 1); + return Math.max((delay - (delay / 4 * this.speedLevel) + (delay / 10 * this.energyLevel)) / this.overLevel, 1); } public abstract int getPowerReq(); diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java index 5704599fa..1043fb572 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityMachineBattery.java @@ -222,7 +222,10 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I //if it's just a consumer, buffer it as a subscriber } else if(te instanceof IEnergyConnector) { - consumers.add((IEnergyConnector) te); + IEnergyConnector con = (IEnergyConnector) te; + if(con.canConnect(dir.getOpposite())) { + consumers.add((IEnergyConnector) te); + } } } diff --git a/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java new file mode 100644 index 000000000..ba50abcea --- /dev/null +++ b/src/main/java/com/hbm/tileentity/network/TileEntityCraneGrabber.java @@ -0,0 +1,195 @@ +package com.hbm.tileentity.network; + +import java.util.List; + +import com.hbm.blocks.ModBlocks; +import com.hbm.blocks.network.CraneInserter; +import com.hbm.entity.item.EntityMovingItem; +import com.hbm.interfaces.IControlReceiver; +import com.hbm.inventory.container.ContainerCraneGrabber; +import com.hbm.inventory.gui.GUICraneGrabber; +import com.hbm.items.ModItems; +import com.hbm.module.ModulePatternMatcher; +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.block.Block; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; +import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class TileEntityCraneGrabber extends TileEntityMachineBase implements IGUIProvider, IControlReceiver { + + public boolean isWhitelist = false; + public ModulePatternMatcher matcher; + + public TileEntityCraneGrabber() { + super(11); + this.matcher = new ModulePatternMatcher(9); + } + + public void nextMode(int i) { + this.matcher.nextMode(worldObj, slots[i], i); + } + + @Override + public String getName() { + return "container.craneGrabber"; + } + + @Override + public void updateEntity() { + + if(!worldObj.isRemote) { + + int delay = 20; + + if(slots[10] != null && slots[10].getItem() == ModItems.upgrade_ejector) { + switch(slots[10].getItemDamage()) { + case 0: delay = 10; break; + case 1: delay = 5; break; + case 2: delay = 2; break; + } + } + + if(worldObj.getTotalWorldTime() % delay == 0 && !this.worldObj.isBlockIndirectlyGettingPowered(xCoord, yCoord, zCoord)) { + int amount = 1; + + if(slots[9] != null && slots[9].getItem() == ModItems.upgrade_stack) { + switch(slots[9].getItemDamage()) { + case 0: amount = 4; break; + case 1: amount = 16; break; + case 2: amount = 64; break; + } + } + + ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); + TileEntity te = worldObj.getTileEntity(xCoord - dir.offsetX, yCoord - dir.offsetY, zCoord - dir.offsetZ); + + int[] access = null; + ISidedInventory sided = null; + + if(te instanceof ISidedInventory) { + sided = (ISidedInventory) te; + access = CraneInserter.masquerade(sided, dir.ordinal()); + } + + if(te instanceof IInventory) { + + /* + * due to this really primitive way of just offsetting the AABB instead of contracting it, there's a wacky + * edge-case where it's possible to feed the grabber by inserting items from the side if there's a triple + * lane conveyor in front of the grabbing end. this is such a non-issue that i'm not going to bother trying + * to fuck with the AABB further, since that's just a major headache for no practical benefit + */ + double reach = 1D; + if(this.getBlockMetadata() > 1) { //ignore if pointing up or down + Block b = worldObj.getBlock(xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ); + if(b == ModBlocks.conveyor_double) reach = 0.5D; + if(b == ModBlocks.conveyor_triple) reach = 0.33D; + } + + double x = xCoord + dir.offsetX * reach; + double y = yCoord + dir.offsetY * reach; + double z = zCoord + dir.offsetZ * reach; + List items = worldObj.getEntitiesWithinAABB(EntityMovingItem.class, AxisAlignedBB.getBoundingBox(x + 0.1875D, y + 0.1875D, z + 0.1875D, x + 0.8125D, y + 0.8125D, z + 0.8125D)); + + for(EntityMovingItem item : items) { + ItemStack stack = item.getItemStack(); + boolean match = this.matchesFilter(stack); + if(this.isWhitelist && !match || !this.isWhitelist && match) continue; + + ItemStack copy = stack.copy(); + int toAdd = Math.min(stack.stackSize, amount); + copy.stackSize = toAdd; + ItemStack ret = CraneInserter.addToInventory((IInventory) te, access, copy, dir.ordinal()); + int didAdd = toAdd - (ret != null ? ret.stackSize : 0); + stack.stackSize -= didAdd; + + if(stack.stackSize <= 0) { + item.setDead(); + } + + amount -= didAdd; + if(amount <= 0) { + break; + } + } + } + } + + + NBTTagCompound data = new NBTTagCompound(); + data.setBoolean("isWhitelist", isWhitelist); + this.matcher.writeToNBT(data); + this.networkPack(data, 15); + } + } + + public void networkUnpack(NBTTagCompound nbt) { + this.isWhitelist = nbt.getBoolean("isWhitelist"); + this.matcher.modes = new String[this.matcher.modes.length]; + this.matcher.readFromNBT(nbt); + } + + public boolean matchesFilter(ItemStack stack) { + + for(int i = 0; i < 9; i++) { + ItemStack filter = slots[i]; + + if(filter != null && this.matcher.isValidForFilter(filter, i, stack)) { + return true; + } + } + + return false; + } + + @Override + public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new ContainerCraneGrabber(player.inventory, this); + } + + @Override + @SideOnly(Side.CLIENT) + public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { + return new GUICraneGrabber(player.inventory, this); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + this.isWhitelist = nbt.getBoolean("isWhitelist"); + this.matcher.readFromNBT(nbt); + } + + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + nbt.setBoolean("isWhitelist", this.isWhitelist); + this.matcher.writeToNBT(nbt); + } + + @Override + public boolean hasPermission(EntityPlayer player) { + return Vec3.createVectorHelper(xCoord - player.posX, yCoord - player.posY, zCoord - player.posZ).lengthVector() < 20; + } + + @Override + public void receiveControl(NBTTagCompound data) { + if(data.hasKey("whitelist")) { + this.isWhitelist = !this.isWhitelist; + } + } +} diff --git a/src/main/java/com/hbm/util/ArmorRegistry.java b/src/main/java/com/hbm/util/ArmorRegistry.java index 06e69f8a9..fc1a20601 100644 --- a/src/main/java/com/hbm/util/ArmorRegistry.java +++ b/src/main/java/com/hbm/util/ArmorRegistry.java @@ -117,13 +117,4 @@ public class ArmorRegistry { this.lang = lang; } } - - /*public static enum ArmorClass { - MASK_FILTERED, - MASK_OXY, - GOGGLES, - HAZMAT_HEAT, - HAZMAT_RADIATION, - HAZMAT_BIO; - }*/ } diff --git a/src/main/java/com/hbm/util/ContaminationUtil.java b/src/main/java/com/hbm/util/ContaminationUtil.java index 612d8b23b..c09b3ba4a 100644 --- a/src/main/java/com/hbm/util/ContaminationUtil.java +++ b/src/main/java/com/hbm/util/ContaminationUtil.java @@ -3,7 +3,7 @@ package com.hbm.util; import java.util.HashSet; import com.hbm.entity.mob.EntityDuck; -import com.hbm.entity.mob.EntityNuclearCreeper; +import com.hbm.entity.mob.EntityCreeperNuclear; import com.hbm.entity.mob.EntityQuackos; import com.hbm.extprop.HbmLivingProps; import com.hbm.handler.HazmatRegistry; @@ -65,7 +65,7 @@ public class ContaminationUtil { return true; if(immuneEntities.isEmpty()) { - immuneEntities.add(EntityNuclearCreeper.class); + immuneEntities.add(EntityCreeperNuclear.class); immuneEntities.add(EntityMooshroom.class); immuneEntities.add(EntityZombie.class); immuneEntities.add(EntitySkeleton.class); diff --git a/src/main/java/com/hbm/util/StatHelper.java b/src/main/java/com/hbm/util/StatHelper.java index f938aca8d..356d1da0a 100644 --- a/src/main/java/com/hbm/util/StatHelper.java +++ b/src/main/java/com/hbm/util/StatHelper.java @@ -50,7 +50,7 @@ public class StatHelper { initBlockMineStats(); initItemUseStats(); initItemBreakStats(); - } catch(Exception ex) { } // just to be sure + } catch(Throwable ex) { } // just to be sure } /** @@ -69,7 +69,7 @@ public class StatHelper { int i = Item.getIdFromItem(item); try { StatList.objectCraftStats[i] = registerStat(new StatCrafting("stat.craftItem." + i, new ChatComponentTranslation("stat.craftItem", new Object[] { (new ItemStack(item)).func_151000_E() }), item)); - } catch(Exception ex) { } + } catch(Throwable ex) { } } } @@ -89,7 +89,7 @@ public class StatHelper { StatList.mineBlockStatArray[i] = registerStat(new StatCrafting("stat.mineBlock." + i, new ChatComponentTranslation("stat.mineBlock", new Object[] { (new ItemStack(block)).func_151000_E() }), Item.getItemFromBlock(block))); StatList.objectMineStats.add((StatCrafting) StatList.mineBlockStatArray[i]); } - } catch(Exception ex) { } + } catch(Throwable ex) { } } } @@ -109,7 +109,7 @@ public class StatHelper { if(!(item instanceof ItemBlock)) { StatList.itemStats.add((StatCrafting) StatList.objectUseStats[i]); } - } catch(Exception ex) { } + } catch(Throwable ex) { } } } @@ -128,7 +128,7 @@ public class StatHelper { if(item.isDamageable()) { StatList.objectBreakStats[i] = registerStat(new StatCrafting("stat.breakItem." + i, new ChatComponentTranslation("stat.breakItem", new Object[] { (new ItemStack(item)).func_151000_E() }), item)); } - } catch(Exception ex) { } + } catch(Throwable ex) { } } } diff --git a/src/main/java/com/hbm/world/feature/DeepLayer.java b/src/main/java/com/hbm/world/feature/DeepLayer.java index 5e50efd0d..b8f29cf41 100644 --- a/src/main/java/com/hbm/world/feature/DeepLayer.java +++ b/src/main/java/com/hbm/world/feature/DeepLayer.java @@ -19,15 +19,13 @@ public class DeepLayer { @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { + + World world = event.world; + if(world.provider == null || world.provider.dimensionId != 0) return; if(this.noise == null) { this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + 19), 4); } - - World world = event.world; - - if(world.provider.dimensionId != 0) - return; int cX = event.chunkX; int cZ = event.chunkZ; diff --git a/src/main/java/com/hbm/world/feature/Meteorite.java b/src/main/java/com/hbm/world/feature/Meteorite.java index 3f78561a6..c383eefa0 100644 --- a/src/main/java/com/hbm/world/feature/Meteorite.java +++ b/src/main/java/com/hbm/world/feature/Meteorite.java @@ -25,17 +25,19 @@ public class Meteorite { public static boolean safeMode = false; - public void generate(World world, Random rand, int x, int y, int z, boolean safe, boolean allowSpecials) { + public void generate(World world, Random rand, int x, int y, int z, boolean safe, boolean allowSpecials, boolean damagingImpact) { safeMode = safe; if(replacables.isEmpty()) { generateReplacables(); } - List list = (List) world.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(x - 7.5, y - 7.5, z - 7.5, x + 7.5, y + 7.5, z + 7.5)); - - for(Entity e : list) { - e.attackEntityFrom(ModDamageSource.meteorite, 1000); + if(damagingImpact) { + List list = (List) world.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(x - 7.5, y - 7.5, z - 7.5, x + 7.5, y + 7.5, z + 7.5)); + + for(Entity e : list) { + e.attackEntityFrom(ModDamageSource.meteorite, 1000); + } } if(WorldConfig.enableSpecialMeteors && allowSpecials) diff --git a/src/main/java/com/hbm/world/feature/OreCave.java b/src/main/java/com/hbm/world/feature/OreCave.java index 2be6aa77a..eed1cdfdc 100644 --- a/src/main/java/com/hbm/world/feature/OreCave.java +++ b/src/main/java/com/hbm/world/feature/OreCave.java @@ -73,17 +73,14 @@ public class OreCave { @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { - if(event.world.provider.dimensionId != this.dim) return; + World world = event.world; + + if(world.provider == null || world.provider.dimensionId != this.dim) return; if(this.noise == null) { this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + (ore.getID() * 31) + yLevel), 2); } - World world = event.world; - - if(world.provider.dimensionId != 0) - return; - int cX = event.chunkX; int cZ = event.chunkZ; diff --git a/src/main/java/com/hbm/world/feature/OreLayer.java b/src/main/java/com/hbm/world/feature/OreLayer.java index 85b051525..b0411b147 100644 --- a/src/main/java/com/hbm/world/feature/OreLayer.java +++ b/src/main/java/com/hbm/world/feature/OreLayer.java @@ -67,17 +67,14 @@ public class OreLayer { @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { - if(event.world.provider.dimensionId != this.dim) return; + World world = event.world; + + if(world.provider == null || world.provider.dimensionId != this.dim) return; if(this.noise == null) { this.noise = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + (ore.getID() * 31) + yLevel), 4); } - World world = event.world; - - if(world.provider.dimensionId != 0) - return; - int cX = event.chunkX; int cZ = event.chunkZ; diff --git a/src/main/java/com/hbm/world/feature/OreLayer3D.java b/src/main/java/com/hbm/world/feature/OreLayer3D.java index 6c7f97da2..67fecb388 100644 --- a/src/main/java/com/hbm/world/feature/OreLayer3D.java +++ b/src/main/java/com/hbm/world/feature/OreLayer3D.java @@ -33,17 +33,14 @@ public class OreLayer3D { @SubscribeEvent public void onDecorate(DecorateBiomeEvent.Pre event) { + + World world = event.world; - if(event.world.provider.dimensionId != this.dim) return; + if(world.provider == null || world.provider.dimensionId != this.dim) return; if(this.noiseX == null) this.noiseX = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + 101), 4); if(this.noiseY == null) this.noiseY = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + 102), 4); if(this.noiseZ == null) this.noiseZ = new NoiseGeneratorPerlin(new Random(event.world.getSeed() + 103), 4); - - World world = event.world; - - if(world.provider.dimensionId != 0) - return; int cX = event.chunkX; int cZ = event.chunkZ; diff --git a/src/main/java/com/hbm/world/feature/SchistStratum.java b/src/main/java/com/hbm/world/feature/SchistStratum.java index d0fd94bb4..f16f4b93a 100644 --- a/src/main/java/com/hbm/world/feature/SchistStratum.java +++ b/src/main/java/com/hbm/world/feature/SchistStratum.java @@ -24,7 +24,7 @@ public class SchistStratum { World world = event.world; - if(world.provider.dimensionId != 0) + if(world.provider == null || world.provider.dimensionId != 0) return; int cX = event.chunkX; diff --git a/src/main/resources/META-INF/HBM_at.cfg b/src/main/resources/META-INF/HBM_at.cfg new file mode 100644 index 000000000..1cc05d2b5 --- /dev/null +++ b/src/main/resources/META-INF/HBM_at.cfg @@ -0,0 +1,10 @@ +# It's access transformer time, baby! +# Cracks open stupid as shit keywords that are being used wrong because Mojang shouldn't be entrusted with computers. +# After changing anything here, run `./gradlew clean setupDecompWorkspace`, this should scrap all the cached nonsense and patch the src to reflect changes made. + +# EntityCreeper +public net.minecraft.entity.monster.EntityCreeper field_82225_f # fuseTime +public net.minecraft.entity.monster.EntityCreeper func_146077_cc()V # explode + +# RenderCreeper +public net.minecraft.client.renderer.entity.RenderCreeper field_77064_a # creeperModel diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index bc6b2877e..bc3b244fb 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -281,6 +281,7 @@ container.chemplant=Chemiewerk container.compactLauncher=Kompakt-Startrampe container.craneBoxer=Förderband-Verpacker container.craneExtractor=Förderband-Auswerfer +container.craneGrabber=Förderband-Greifer container.craneInserter=Förderband-Einsetzer container.craneRouter=Förderband-Sortierer container.craneUnboxer=Förderband-Entpacker @@ -502,6 +503,7 @@ entity.hbm.entity_ntm_ufo.name=Marsianisches Invasionsschiff entity.entity_mob_hunter_chopper.name=Jagdschrauber entity.entity_mob_mask_man.name=Maskenmann entity.entity_mob_nuclear_creeper.name=Nuklearer Creeper +entity.entity_mob_phosgene_creeper.name=Phosgen-Creeper entity.entity_mob_tainted_creeper.name=Verseuchter Creeper entity.entity_taint_crab.name=Verseuchte Krabbe entity.entity_tesla_crab.name=Tesla-Krabbe @@ -3225,6 +3227,30 @@ item.waste_u235.name=Erschöpfter Uran-235-Kernbrennstoff item.waste_u233.name=Erschöpfter Uran-233-Kernbrennstoff item.waste_uranium.name=Erschöpfter Urankernbrennstoff item.watch.name=Zerbrochene Taschenuhr +item.watz_pellet.boron.name=Bor-Absorberpellet +item.watz_pellet.du.name=Abgereichertes Uran-Absorberpellet +item.watz_pellet.hes.name=HES-Watzpellet +item.watz_pellet.lead.name=Blei-Absorberpellet +item.watz_pellet.les.name=LES-Watzpellet +item.watz_pellet.mes.name=MES-Watzpellet +item.watz_pellet.mep.name=MEP-Watzpellet +item.watz_pellet.meu.name=MEU-Watzpellet +item.watz_pellet.nqd.name=Angereichertes Naquadah-Watzpellet +item.watz_pellet.nqr.name=Naquadria-Watzpellet +item.watz_pellet.hen.name=HEN-Watzpellet +item.watz_pellet.schrabidium.name=Schrabidium-Watzpellet +item.watz_pellet_depleted.boron.name=Bor-Absorberpellet (Erschöpft) +item.watz_pellet_depleted.du.name=Abgereichertes Uran-Absorberpellet (Erschöpft) +item.watz_pellet_depleted.hes.name=HES-Watzpellet (Erschöpft) +item.watz_pellet_depleted.lead.name=Blei-Absorberpellet (Erschöpft) +item.watz_pellet_depleted.les.name=LES-Watzpellet (Erschöpft) +item.watz_pellet_depleted.mes.name=MES-Watzpellet (Erschöpft) +item.watz_pellet_depleted.mep.name=MEP-Watzpellet (Erschöpft) +item.watz_pellet_depleted.meu.name=MEU-Watzpellet (Erschöpft) +item.watz_pellet_depleted.nqd.name=Angereichertes Naquadah-Watzpellet (Erschöpft) +item.watz_pellet_depleted.nqr.name=Naquadria-Watzpellet (Erschöpft) +item.watz_pellet_depleted.hen.name=HEN-Watzpellet (Erschöpft) +item.watz_pellet_depleted.schrabidium.name=Schrabidium-Watzpellet (Erschöpft) item.weapon_bat.name=Richards Standard item.weapon_bat_nail.name=Das Klischee item.weapon_golf_club.name=Schläger des russischen Mafiosos @@ -3581,8 +3607,10 @@ tile.conveyor_triple.name=Dreispuriges Förderband tile.corium_block.name=Corium tile.crane_boxer.name=Förderband-Verpacker tile.crane_extractor.name=Förderband-Auswerfer +tile.crane_grabber.name=Förderband-Greifer tile.crane_inserter.name=Förderband-Einsetzer tile.crane_router.name=Förderband-Sortierer +tile.crate_splitter.name=Förderband-Teiler tile.crane_unboxer.name=Förderband-Entpacker tile.crashed_bomb.name=Blindgänger tile.crate.name=Vorratskiste diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 47acb3efb..e8656695b 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -26,8 +26,8 @@ achievement.c20_5.desc=??? achievement.c20_5=Chapter [TWENTY POINT FIVE] achievement.c44.desc=Galvanized! I mean, zinc! achievement.c44=Chapter 44 -achievement.centrifuge.desc=centrifugal force is fake don't @ me -achievement.centrifuge=Centripetal Force +achievement.centrifuge.desc=centrifugal force is real don't @ me +achievement.centrifuge=Centrifugal Force achievement.chemplant.desc=Now you're thinking with chemicals! achievement.chemplant=The Factory Grows Pt. 2 achievement.chicagoPile.desc="How were the natives?" / "Very friendly." @@ -572,6 +572,7 @@ container.chemplant=Chemical Plant container.compactLauncher=Compact Launch Pad container.craneBoxer=Conveyor Boxer container.craneExtractor=Conveyor Ejector +container.craneGrabber=Conveyor Grabber container.craneInserter=Conveyor Inserter container.craneRouter=Conveyor Router container.craneUnboxer=Conveyor Unboxer @@ -947,6 +948,7 @@ entity.hbm.entity_ntm_ufo.name=Martian Invasion Ship entity.entity_mob_hunter_chopper.name=Hunter Chopper entity.entity_mob_mask_man.name=Mask Man entity.entity_mob_nuclear_creeper.name=Nuclear Creeper +entity.entity_mob_phosgene_creeper.name=Phosgene Creeper entity.entity_mob_tainted_creeper.name=Tainted Creeper entity.entity_taint_crab.name=Taint Crab entity.entity_tesla_crab.name=Tesla Crab @@ -4017,6 +4019,30 @@ item.waste_uranium.name=Depleted Uranium Fuel item.waste_zfb_mox.name=Depleted ZFB MOX Fuel item.watch.name=Broken Pocket Watch item.watch.desc=A small blue pocket watch.$It's glass has a few cracks in it,$and some shards are missing.$It stopped ticking at 2:34. +item.watz_pellet.boron.name=Boron Absorber Pellet +item.watz_pellet.du.name=Depleted Uranium Absorber Pellet +item.watz_pellet.hes.name=HES Watz Pellet +item.watz_pellet.lead.name=Lead Absorber Pellet +item.watz_pellet.les.name=LES Watz Pellet +item.watz_pellet.mes.name=MES Watz Pellet +item.watz_pellet.mep.name=MEP Watz Pellet +item.watz_pellet.meu.name=MEU Watz Pellet +item.watz_pellet.nqd.name=Enriched Naquadah Watz Pellet +item.watz_pellet.nqr.name=Naquadria Watz Pellet +item.watz_pellet.hen.name=HEN Watz Pellet +item.watz_pellet.schrabidium.name=Schrabidium Watz Pellet +item.watz_pellet_depleted.boron.name=Boron Absorber Pellet (Depleted) +item.watz_pellet_depleted.du.name=Depleted Uranium Absorber Pellet (Depleted) +item.watz_pellet_depleted.hes.name=HES Watz Pellet (Depleted) +item.watz_pellet_depleted.lead.name=Lead Absorber Pellet (Depleted) +item.watz_pellet_depleted.les.name=LES Watz Pellet (Depleted) +item.watz_pellet_depleted.mes.name=MES Watz Pellet (Depleted) +item.watz_pellet_depleted.mep.name=MEP Watz Pellet (Depleted) +item.watz_pellet_depleted.meu.name=MEU Watz Pellet (Depleted) +item.watz_pellet_depleted.nqd.name=Enriched Naquadah Watz Pellet (Depleted) +item.watz_pellet_depleted.nqr.name=Naquadria Watz Pellet (Depleted) +item.watz_pellet_depleted.hen.name=HEN Watz Pellet (Depleted) +item.watz_pellet_depleted.schrabidium.name=Schrabidium Watz Pellet (Depleted) item.weapon_bat.name=Richard's Default item.weapon_bat_nail.name=The Cliché item.weapon_golf_club.name=Russian Mobster's Club @@ -4390,8 +4416,10 @@ tile.conveyor_triple.name=Triple-Lane Conveyor Belt tile.corium_block.name=Corium tile.crane_boxer.name=Conveyor Boxer tile.crane_extractor.name=Conveyor Ejector +tile.crane_grabber.name=Conveyor Grabber tile.crane_inserter.name=Conveyor Inserter tile.crane_router.name=Conveyor Sorter +tile.crane_splitter.name=Conveyor Splitter tile.crane_unboxer.name=Conveyor Unboxer tile.crashed_bomb.name=Dud tile.crate.name=Supply Crate @@ -4414,6 +4442,7 @@ tile.deco_asbestos.name=Asbestos Roof tile.deco_beryllium.name=Beryllium Deco Block tile.deco_computer.ibm_300pl.name=IBM Personal Computer 300PL tile.deco_emitter.name=Deco Light Emitter +tile.part_emitter.name=Deco Particle Emitter tile.deco_lead.name=Lead Deco Block tile.deco_rbmk.name=RBMK Deco Block tile.deco_rbmk_smooth.name=Smooth RBMK Deco Block diff --git a/src/main/resources/assets/hbm/lang/ru_RU.lang b/src/main/resources/assets/hbm/lang/ru_RU.lang index e6c3ce951..46a1df9df 100644 --- a/src/main/resources/assets/hbm/lang/ru_RU.lang +++ b/src/main/resources/assets/hbm/lang/ru_RU.lang @@ -1996,6 +1996,9 @@ tile.conveyor_chute.name=Конвейерный желоб tile.conveyor_double.name=Двухполосная конвейер tile.conveyor_lift.name=Конвейерный цепной лифт tile.conveyor_triple.name=Трёхполосный конвейер +container.craneGrabber=Конвейерный сборщик +tile.crane_grabber.name=Конвейерный сборщик +tile.crane_splitter.name=Конвейерный разделитель container.turretArty=Грег tile.turret_arty.name=Артиллерийская турель "Грег" container.heaterFirebox=Топка @@ -2950,6 +2953,7 @@ tile.block_cap_sunset.name=Блок крышек от Сансет Сарсап tile.block_tritium.name=Блок тритиевых пробирок tile.hazmat.name=Блок защитной ткани tile.deco_emitter.name=Декоративный источник света +tile.part_emitter.name=Декоративный источник частиц tile.plant_flower.foxglove.name=Наперстянка tile.plant_flower.nightshade.name=Белладонна tile.plant_flower.tobacco.name=Табак @@ -5077,6 +5081,31 @@ item.pellet_neptunium.name=Нептуниевая Ватцз-пеллета item.pellet_lead.name=Свинцовая пеллета item.pellet_advanced.name=Улучшитель производительности Ватцз +item.watz_pellet.boron.name=Поглощающая Ватцз-пеллета из бора +item.watz_pellet.du.name=Поглощающая Ватцз-пеллета из обедненного урана +item.watz_pellet.hes.name=Ватцз-пеллета из высокообогащенного шрабидия +item.watz_pellet.lead.name=Поглощающая Ватцз-пеллета из свинца +item.watz_pellet.les.name=Ватцз-пеллета из низкообогащенного шрабидия +item.watz_pellet.mes.name=Ватцз-пеллета из среднеобогащенного шрабидия +item.watz_pellet.mep.name=Ватцз-пеллета из среднеобогащенного плутония +item.watz_pellet.meu.name=Ватцз-пеллета из среднеобогащенного урана +item.watz_pellet.nqd.name=Ватцз-пеллета из обогащенного наквадаха +item.watz_pellet.nqr.name=Ватцз-пеллета из наквадрии +item.watz_pellet.hen.name=Ватцз-пеллета из высокообогащенного наквадаха +item.watz_pellet.schrabidium.name=Ватцз-пеллета из чистого шрабидия +item.watz_pellet_depleted.boron.name=Поглощающая Ватцз-пеллета из бора (Обедненная) +item.watz_pellet_depleted.du.name=Поглощающая Ватцз-пеллета из обедненного урана (Обедненная) +item.watz_pellet_depleted.hes.name=Ватцз-пеллета из высокообогащенного шрабидия (Обедненная) +item.watz_pellet_depleted.lead.name=Поглощающая Ватцз-пеллета из свинца (Обедненная) +item.watz_pellet_depleted.les.name=Ватцз-пеллета из низкообогащенного шрабидия (Обедненная) +item.watz_pellet_depleted.mes.name=Ватцз-пеллета из среднеобогащенного шрабидия (Обедненная) +item.watz_pellet_depleted.mep.name=Ватцз-пеллета из среднеобогащенного плутония (Обедненная) +item.watz_pellet_depleted.meu.name=Ватцз-пеллета из среднеобогащенного урана (Обедненная) +item.watz_pellet_depleted.nqd.name=Ватцз-пеллета из обогащенного наквадаха (Обедненная) +item.watz_pellet_depleted.nqr.name=Ватцз-пеллета из наквадрии (Обедненная) +item.watz_pellet_depleted.hen.name=Ватцз-пеллета из высокообогащенного наквадаха (Обедненная) +item.watz_pellet_depleted.schrabidium.name=Ватцз-пеллета из чистого шрабидия (Обедненная) + item.titanium_filter.name=Титановый фильтр item.deuterium_filter.name=Дейтериевый фильтр item.catalytic_converter.name=Каталитический конвертер diff --git a/src/main/resources/assets/hbm/lang/zh_CN.lang b/src/main/resources/assets/hbm/lang/zh_CN.lang index c182cfeef..f9c97e3d1 100644 --- a/src/main/resources/assets/hbm/lang/zh_CN.lang +++ b/src/main/resources/assets/hbm/lang/zh_CN.lang @@ -51,7 +51,7 @@ achievement.fiend2.desc=更卑鄙 achievement.fiend2=残忍2:更残忍 achievement.fiend=残忍 achievement.freytag.desc=英勇的救生员 -achievement.freytag=Freytag +achievement.freytag=弗雷塔格 achievement.fusion.desc=氘核、海卫一与能量的舞蹈。 achievement.fusion=聚合 achievement.gasCent.desc=贫铀讨厌他! @@ -66,6 +66,8 @@ achievement.horizonsStart.desc=将一个小伙子送上月球 achievement.horizonsStart=地平线? achievement.impossible.desc=你不可能取得该成就 achievement.impossible=简直不可能 +achievement.inferno.desc=“把它变成灰烬!这还不够!投更多的炸弹!” +achievement.inferno=食人行动 achievement.manhattan.desc=1945年8月6日 8:15 achievement.manhattan=曼哈顿计划 achievement.meltdown.desc=你走了这么远,怎么能把事情搞砸? @@ -144,7 +146,7 @@ armor.rocketBoots=火箭靴 armor.sprintBoost=冲刺辅助加速 armor.thermal=热成像 armor.threshold=伤害阈值 %s -armor.vats=这是一个测试,以证明这些书的e[B]ic换行功能。 字体比例是可自定义的,换行符也会相应调整,这使得编写新页面非常容易。 +armor.vats=敌对生物HUD armor.yield=抵御低于%s的伤害 armorMod.all=所有 armorMod.applicableTo=适用于: @@ -163,7 +165,7 @@ armorMod.type.servo=伺服电机 armorMod.type.special=特殊 battery.mode.buffer=输入/输出模式 battery.mode.input=输入模式 -battery.mode.off=OffW +battery.mode.off=关闭W battery.mode.output=输出模式 battery.priority.high=充电优先级:高 battery.priority.high.desc=总是需要优先装满的紧急缓冲区 @@ -340,56 +342,56 @@ book_lore.book_syringe.page.1=a little addendum to my fifth message, obviously y book_lore.book_syringe.page.2=syringe goes into slot %d book_lore.resignation_note.name=辞职信 book_lore.resignation_note.author=科斯马 -book_lore.resignation_note.page.1=Management downsized our department again yesterday. Those idiots only have themselves to blame, I don't know what they were expecting after that fiasco. Who the hell leaks that sort of information? We're losing millions and -book_lore.resignation_note.page.2=it's ME who's the one out of a job now. I'M the one being asked to resign. I hope you asshats finally learn from your overabundance of mistakes and take that stick out of your ass. -book_lore.resignation_note.page.3=I'm not coming back on Friday. Just send the paycheck. +book_lore.resignation_note.page.1=管理层昨天又对我们的部门进行裁员了。那群白痴要怪只能怪他们自己,我都不知道他们在那场惨败后还在期待什么。到底是谁他妈泄露了那种程度的信息? +book_lore.resignation_note.page.2=我们损失了几百万,而且现在失业的还是爷。老子希望你们这帮混蛋最后能从你们的一堆问题中学到点教训然后给爷滚去自闭。 +book_lore.resignation_note.page.3=我周五不回来了。工资寄过来就行。 book_lore.memo_stocks.name=公司内部备忘录 -book_lore.memo_stocks.page.1=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.1=投资者报告 - $$最新的季度报告中提供的数据存在一些明显的差异。财政部所作出一些调整是明智的,因此不必有任何担忧。 book_lore.memo_schrab_gsa.name=内部备忘录 -book_lore.memo_schrab_gsa.page.1=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.2=a 40%% profit on related operations, let alone the possibility of future contracts. Due to the confidential nature, all fiscal evidence is to remain private. +book_lore.memo_schrab_gsa.page.1=合同管理记录 - 法务部在与美国国防部后勤局的谈判中取得了突破。他们批准了450亿的联邦采购服务总署投资资金用于异变金属的采购与研究。 +book_lore.memo_schrab_gsa.page.2=就目前预期来看,这将至少产生40%的利润,更不必说以后行动所产生的利润,同时这将使我们未来有机会签订更多合同。鉴于此事的保密性质,所有财政证据都将为机密级别 book_lore.memo_schrab_rd.name=内部备忘录 -book_lore.memo_schrab_rd.page.1=Research & Development - $ $ Our main production method of saralloy has been through the new particle accelerator. However, the energy costs are exorbitantly high compared to the amount of output. -book_lore.memo_schrab_rd.page.2=Doctor Schrabauer, however, has discovered a new interaction - called "Strange Lepton Oscillation" - that could significantly reduce costs. Through a not entirely understood process, supplied electrons are transmuted into extremely -book_lore.memo_schrab_rd.page.3=high-energy photons, through a strange charm. This is an extreme exception to many established particle conversion laws, but preliminary experiments have proved that these protons transmute into up and down quarks, eventually creating saralloy. -book_lore.memo_schrab_rd.page.4=Strangely, the prototype requires Tungsten alloyed with small amounts of saralloy. In addition, a special capacitor is required to negate the leftover positive charge. +book_lore.memo_schrab_rd.page.1=研发 - 目前我们主要生产方法是使用新型粒子加速器。然而,与产出量相比,能源成本高得惊人。 +book_lore.memo_schrab_rd.page.2=然而,Schrabauer博士发现了一种全新的相互作用——暂称为“奇异轻子振荡”——该作用可以显著降低生产成本。通过一个目前未被完全理解的的过程,提供的电子被一种奇特的“魔力”转化为极高能量的光子。 +book_lore.memo_schrab_rd.page.3=这是许多已明确的粒子转换定律的极端例外。但初步实验证明,这些质子先转变为上下夸克,最终形成了异变金属。奇怪的是,原型机中需要钨与少量异变金属合金化所得到的合金。 +book_lore.memo_schrab_rd.page.4=除此之外,还需要一个特殊的电容器用来抵消掉多余的正电荷。 book_lore.memo_schrab_nuke.name=研究报告 -book_lore.memo_schrab_nuke.author=Doctor Schrabauer -book_lore.memo_schrab_nuke.page.1=Our most recent investigation led us to the effects of nuclear explosions on materials. Thanks to our grant money, we *accidentally* tested our theory on direct saralloy synthesis from uranium. -book_lore.memo_schrab_nuke.page.2=Only our cyclotron has actually created saralloy previously. However, at our underground shot at Everwerpen, miniscule traces of saralloy were found in uranium ore at the site. All pure, metallic uranium nearby had fissioned. -book_lore.memo_schrab_nuke.page.3=As such, given enough uranium ore concentrated around an explosive, or perhaps even a dirty bomb rich in waste containing fissionable material, one could hypothetically create enough saralloy to collect manually. -book_lore.insanity_1.name=Torn Page -book_lore.insanity_1.author=D Ferguson +book_lore.memo_schrab_nuke.author=Schrabauer博士 +book_lore.memo_schrab_nuke.page.1=最近的调查使我们了解了核爆炸对材料造成的影响。多亏外界给我们的赠款,我们*意外地*测试了铀直接合成异变金属的理论。 +book_lore.memo_schrab_nuke.page.2=而此前我们只在回旋加速器中制作出异变金属。但这次,我们在对Everwerpen的地下拍摄中,在该地点的铀矿石中发现了微量的异变金属。其附近所有的纯金属铀则都发生了裂变。 +book_lore.memo_schrab_nuke.page.3=因此,如果有足够多的铀矿石集中在核弹周围,甚至可能只需要一个富含裂变物质废料的脏弹,就有可能制造出质量大到可以被直接收集的异变金属。 +book_lore.insanity_1.name=残缺的纸张 +book_lore.insanity_1.author=D·弗格森 book_lore.insanity_1.page.1=August 6th $ $ Months, no, years worth of dicking about wrestling with investors and operating the greatest energy hog in the northern hemisphere has finally paid off. book_lore.insanity_1.page.2=While we aren't entirely sure what exactly we found - given we ran gigavolt collisions on particles that were still poorly documented - the results couldn't have been more exciting. book_lore.insanity_1.page.3=We haven't found a name for whatever it is we've found, nor are we sure if we're looking at a new type of particle, a wormhole leading into another dimension, or satan's anus, but I'm sure our PR people can come up with something. -book_lore.insanity_2.name=Torn Page -book_lore.insanity_2.author=D Ferguson +book_lore.insanity_2.name=残缺的纸张 +book_lore.insanity_2.author=D·弗格森 book_lore.insanity_2.page.1=August 8th $ $ We've kept "The Thing" (yes that's what we call it for now) in magnetic isolation for the past days. Spectroscopy tests ended up breaking our spectrometer, but we managed to gain some useful data. book_lore.insanity_2.page.2=For starters, this thing glows like a christmas tree, radiation photons of about every wavelength you could think of enveloped by a powerful infrared corona. The logical conclusion is that looking at it with your naked book_lore.insanity_2.page.3=eye would most likely kill you. Now that begs the question: How can a particle this tiny radiate such immense energy? What are you hiding, little man? -book_lore.insanity_3.name=Torn Page -book_lore.insanity_3.author=D Ferguson +book_lore.insanity_3.name=残缺的纸张 +book_lore.insanity_3.author=D·弗格森 book_lore.insanity_3.page.1=August 22nd $ $ I haven't slept right in days. Doc said he couldn't find anything. Been on all sorts of medication now, but the headaches only get worse. Lab boys suspect it might be contamination from the incident two weeks ago. book_lore.insanity_3.page.2=Doc said it's not that likely, ARS is different. I might need to take some time off if this continues. The Thing is still in containment, the lab boys speculate if the field goes down, the entire complex turns into a mushroom cloud. book_lore.insanity_3.page.3=I'm not sure how administration can keep this calm, but i don't get paid enough to waste thoughts on that. -book_lore.insanity_4.name=Torn Page -book_lore.insanity_4.author=D Ferguson +book_lore.insanity_4.name=残缺的纸张 +book_lore.insanity_4.author=D·弗格森 book_lore.insanity_4.page.1=August 28th $ $ They denied my request for leave and I've been pushing through the past few days. Headaches are getting worse. I'm not the only one who's feeling it, either. Some of the lab boys are in a similar situation. book_lore.insanity_4.page.2=All the while The Thing has left the complex - GOOD. Some suits came in yesterday and had it shipped off, god knows where. One of the lab boys, Zachary, said they're probably burying the containment vessel in the desert, slowly book_lore.insanity_4.page.3=trying to "fizzle out" The Thing far off from civilization. I say let's shoot it into space. Needless to say, our investors cut all funding for the time being. I should start looking for another job. -book_lore.insanity_5.name=Torn Page -book_lore.insanity_5.author=D Ferguson +book_lore.insanity_5.name=残缺的纸张 +book_lore.insanity_5.author=D·弗格森 book_lore.insanity_5.page.1=September 11th $ $ I'm having this re-occurring nightmare. I'm walking around in an open space and there's these people everywhere, people in rubber suits and freakishly deformed faces. It's always the same nightmare, book_lore.insanity_5.page.2=and one of the guys from the lab I've spoken with lately has had the same dream. Meanwhile my post has been rather boring, the accelerator has been shut down, all ongoing projects are on halt and our budget is slowly melting away. book_lore.insanity_5.page.3=Something is telling me that The Thing is still out there somewhere. I can feel it. -book_lore.insanity_6.name=Torn Page -book_lore.insanity_6.author=D Ferguson +book_lore.insanity_6.name=残缺的纸张 +book_lore.insanity_6.author=D·弗格森 book_lore.insanity_6.page.1=October 3rd $ $ Half the staff is dead, most of the rest is in the ICU. My condition hasn't changed in the past weeks, for better or worse. book_lore.insanity_6.page.2=Reality is starting to feel less and less real however. Sometimes I look up into the sky at night and hallucinate that thing we discovered all those weeks ago. book_lore.insanity_6.page.3=That same brilliant sheen of crimson that our spectrometer spat out. My doc says it's delirium and stress caused by the incident, and perhaps hes right, but the meds aren't working at all. -book_lore.insanity_7.name=Torn Page -book_lore.insanity_7.author=D Ferguson +book_lore.insanity_7.name=残缺的纸张 +book_lore.insanity_7.author=D·弗格森 book_lore.insanity_7.page.1=December 12th $ $ I've been out of a job, but to be honest I'm somewhat thankful about it. My old workplace has gone up in flames - or so they say. book_lore.insanity_7.page.2=The seismological observatory a couple miles south recorded constant earthquakes for days on end, not that anyone else would have noticed this deep in the desert. book_lore.insanity_7.page.3=I have concluded that this place was cursed, making everyone sick and then descending into hell like some sort of Edgar Allan Poe story. Good riddance. @@ -432,7 +434,7 @@ cannery.foundryChannel.3=当无法供应出口或模具时,材料将流入相 cannery.foundryChannel.4=剩余材料可以用铲子清除。 cannery.silex=FEL & SILEX cannery.silex.0=自由电子激光器(FEL)利用能量和激光晶体产生强大的激光束。 -cannery.silex.1=小心,因为激光会燃烧/熔化较弱的方块。。。 +cannery.silex.1=小心,因为激光会烧毁或熔化较脆弱的方块… cannery.silex.2=…但不是防爆的。 cannery.silex.3=FEL用于为激光同位素分离室(SILEX)提供能量。FEL和SILEX必须至少相隔两个方块。 cannery.silex.4=激光必须通过SILEX的玻璃开口进入。在错误的方向上入射可能会摧毁它。 @@ -500,6 +502,7 @@ chem.LPG=石油天然气液化 chem.LUBRICANT=润滑剂混合 chem.METH=甲基苯丙胺合成 chem.NITAN=NITAN牌超级燃料混合 +chem.NITRIC_ACID=硝酸生产 chem.OIL_SAND=沥青砂提取 chem.OSMIRIDIUM_DEATH=锇酸溶液生产 chem.PEROXIDE=过氧化氢生产 @@ -527,6 +530,7 @@ chem.SF_PETROLEUM=石油气固化 chem.SF_RECLAIMED=再生油固化 chem.SF_SMEAR=工业油固化 chem.SOLID_FUEL=固体火箭燃料生产 +chem.SOLVENT=有机溶剂混合 chem.STEAM=烧水 chem.SULFURIC_ACID=硫酸生产 chem.TEL=四乙基铅混合 @@ -670,6 +674,7 @@ container.soyuzLauncher=联盟号发射平台 container.storageDrum=核废料处理桶 container.teleLinker=炮塔ID管理 container.teleporter=传送机 +container.turbinegas=联合循环燃气轮机 container.turretArty=重炮炮塔“格雷格” container.turretChekhov=重机枪炮塔“契诃夫的枪” container.turretFriendly=轻机枪炮塔“友好先生” @@ -679,6 +684,7 @@ container.turretHoward=双联守门员近防系统“霍华德” container.turretJeremy=重炮炮塔“杰里米” container.turretMaxwell=高能微波炮塔”麦克斯韦” container.turretRichard= 火箭炮塔“理查德” +container.turretSentry=哨兵炮塔“布朗” container.turretTauon=陶子发射器炮塔“陶恩” container.uf6_tank=六氟化铀储罐 container.wasteDrum=乏燃料池 @@ -751,12 +757,6 @@ death.attack.taint=%1$s 死于恶性肿瘤 death.attack.tau=%1$s 被 %2$s 用带负电荷的陶子射穿 death.attack.tauBlast=%1$s 对XVL1456充能时间过长,被炸成碎片 death.attack.teleporter=%1$s 被传送到虚空 -desc.item.pileRod=§e使用钻孔石墨插入$§E使用螺丝刀拔出$ -desc.item.rtgDecay=衰变为:%s -desc.item.rtgHeat=功率级别:%s -desc.item.wasteCooling=在乏燃料池中冷却 -desc.item.zirnoxBreedingRod=§2[ZIRNOX增殖棒]$§e放在燃料棒旁边增殖$§e持续 %d 刻 -desc.item.zirnoxRod=§a[ZIRNOX燃料棒]$§e每刻产生 %1$d 热量$§e持续 %2$d 刻 desc.gui.assembler.warning=§c错误:§r此机器需要装配机模板! desc.gui.chemplant.warning=§c错误:§r此机器需要化工厂模板! desc.gui.gasCent.enrichment=§2浓缩§r$浓缩铀需要串联$两个离心机串联将离心出$铀燃料,四个离心机串联$将完全分离出铀235。 @@ -773,6 +773,9 @@ desc.gui.rtg.pellets=接受的靶丸: desc.gui.rtg.pelletHeat=%s (%s 热量) desc.gui.rtg.pelletPower=%s (%s HE/刻) desc.gui.template=§9模板§r$模板可由$机器模板文件夹制作。 +desc.gui.turbinegas.automode=§2自动涡轮机节流模式§r$通过单击“AUTO”按钮,涡轮机$将根据网络所需的功率自动调整发电量$ +desc.gui.turbinegas.fuels=§6可接受的燃料:§r +desc.gui.turbinegas.warning=§c燃油或润滑油液位低!§r desc.gui.upgrade=§l可接受的升级:§r desc.gui.upgrade.afterburner=*§d加力燃烧§r:堆叠至3级 desc.gui.upgrade.effectiveness=*§a效率§r:堆叠至3级 @@ -783,6 +786,136 @@ desc.gui.zirnox.coolant=§3冷却剂§r$CO2将热量从堆芯转移到水中$这 desc.gui.zirnox.pressure=§6压力§r$排放二氧化碳可以降低压力$然而,压力过低,冷却效率和蒸汽产量将降低$小心熔毁! desc.gui.zirnox.warning1=§c错误:§r反应堆正常运行需要水! desc.gui.zirnox.warning2=§c错误:§r二氧化碳是反应堆正常运行所必需的! +desc.item.ammo.con_accuracy2=- 精度大幅降低 +desc.item.ammo.con_damage=- 伤害大幅降低 +desc.item.ammo.con_heavy_wear=- 大幅增加磨损 +desc.item.ammo.con_ling_fire=- 没有火焰 +desc.item.ammo.con_nn=- 甚至没有核爆 +desc.item.ammo.con_no_damage=- 没有伤害 +desc.item.ammo.con_no_explode1=- 非爆炸性 +desc.item.ammo.con_no_explode2=- 不破坏方块 +desc.item.ammo.con_no_explode3=- 无破片伤害 +desc.item.ammo.con_no_fire=- 不能引起燃烧 +desc.item.ammo.con_no_mirv=- 不建议在原始MIRV上使用 +desc.item.ammo.con_no_projectile=- 无抛射物 +desc.item.ammo.con_penetration=- 无穿透能力 +desc.item.ammo.con_radius=- 减小爆炸半径 +desc.item.ammo.con_range2=- 大幅降低射程 +desc.item.ammo.con_sing_projectile=- 单个弹头 +desc.item.ammo.con_speed=- 弹丸速度降低 +desc.item.ammo.con_super_wear=- 磨损严重增加 +desc.item.ammo.con_wear=- 加剧磨损 +desc.item.ammo.neu_40mm=* 这是一枚40毫米的榴弹,我们把它挤到枪管里! +desc.item.ammo.neu_blank=* 这是空包弹 +desc.item.ammo.neu_boat=* 船 +desc.item.ammo.neu_boxcar=* 车厢 +desc.item.ammo.neu_building=* 建筑物 +desc.item.ammo.neu_chlorophyte=* 叶绿 +desc.item.ammo.neu_eraser=* 用于消除重大错误 +desc.item.ammo.neu_fun=* 全家其乐无穷! +desc.item.ammo.neu_heavy_metal=* 重金属 +desc.item.ammo.neu_homing=* 追踪 +desc.item.ammo.neu_jolt=* 震荡 +desc.item.ammo.neu_less_bouncy=* 弹性更小 +desc.item.ammo.neu_maskman_flechette=* 曳光弹,同时引发一场贫铀飞镖弹风暴 +desc.item.ammo.neu_maskman_meteorite=* 高伤害,同时召唤小陨石 +desc.item.ammo.neu_more_bouncy=* 额外弹性 +desc.item.ammo.neu_no_bounce=* 没有弹性 +desc.item.ammo.neu_no_con=* 没有缺点 +desc.item.ammo.neu_starmetal=* 星辉金属 +desc.item.ammo.neu_tracer=* 示踪剂 +desc.item.ammo.neu_uhh=* Uhhh +desc.item.ammo.neu_warcrime1=* 从技术上讲犯下了战争罪 +desc.item.ammo.neu_warcrime2=* 一发触犯两条战争罪! +desc.item.ammo.pro_accurate1=+ 提升精度 +desc.item.ammo.pro_accurate2=+ 近乎完美的精度 +desc.item.ammo.pro_balefire=+ 野火 +desc.item.ammo.pro_bomb_count=+ 炸弹数量增加 +desc.item.ammo.pro_caustic=+ 腐蚀性 +desc.item.ammo.pro_chainsaw=+ 电锯 +desc.item.ammo.pro_chlorine=+ 氯气 +desc.item.ammo.pro_damage=+ 提升伤害 +desc.item.ammo.pro_damage_slight=+ 高于平均伤害 +desc.item.ammo.pro_emp=+ EMP +desc.item.ammo.pro_explosive=+ 爆炸 +desc.item.ammo.pro_fallout=+ 辐射尘 +desc.item.ammo.pro_fit_357=+ 适用于所有.357枪械 +desc.item.ammo.pro_flames=+ 火焰喷射量增加 +desc.item.ammo.pro_gravity=+ 下坠降低 +desc.item.ammo.pro_heavy_damage=+ 大幅增加伤害 +desc.item.ammo.pro_incendiary=+ 能引起燃烧 +desc.item.ammo.pro_lunatic=+ 疯子 +desc.item.ammo.pro_marauder=+ 立即消除烦人的和不平衡的敌人 +desc.item.ammo.pro_mining=+ 爆炸使所有方块掉落 +desc.item.ammo.pro_no_gravity=+ 不受重力影响 +desc.item.ammo.pro_nuclear=+ 核爆 +desc.item.ammo.pro_penetration=+ 穿透 +desc.item.ammo.pro_percussion=+ 冲击波 +desc.item.ammo.pro_phosphorus=+ 可致磷烧伤 +desc.item.ammo.pro_phosphorus_splash=+ 磷飞溅 +desc.item.ammo.pro_poison_gas=+ 毒物飞溅 +desc.item.ammo.pro_radius=+ 增加爆炸半径 +desc.item.ammo.pro_radius_high=+ 大幅增加爆炸半径 +desc.item.ammo.pro_range=+ 增加射程 +desc.item.ammo.pro_rocket=+ 火箭 +desc.item.ammo.pro_rocket_propelled=+ 火箭推进 +desc.item.ammo.pro_shrapnel=+ 破片 +desc.item.ammo.pro_speed=+ 提高弹头飞行速度 +desc.item.ammo.pro_stunning=+ 眩晕 +desc.item.ammo.pro_toxic=+ 剧毒 +desc.item.ammo.pro_wear=+ 减少磨损 +desc.item.ammo.pro_withering=+ 凋零 +desc.item.armorMod.display=显示已安装的装甲模块 +desc.item.battery.charge=储能: %s / %sHE +desc.item.battery.chargePerc=储能: %s%% +desc.item.battery.chargeRate=充电效率: %sHE/刻 +desc.item.battery.dischargeRate=放电效率: %sHE/刻 +desc.item.durability=耐久: %s +desc.item.grenade.fuse=引信: %s +desc.item.grenade.fuseImpact=碰炸 +desc.item.grenade.fuseInstant=瞬发 +desc.item.gun.ammo=弹药 %s +desc.item.gun.ammoBelt=从背包中使用 +desc.item.gun.ammoEnergy=能耗; %sHE 每发 +desc.item.gun.ammoEnergyAlt=%sHE 每发 +desc.item.gun.ammoMag=%s / %s +desc.item.gun.ammoType=弹药类型: %s +desc.item.gun.ammoTypeAlt=辅助弹药: %s +desc.item.gun.damage=伤害: %s - %s +desc.item.gun.damageAlt=伤害: %s +desc.item.gun.lore=查看深入的知识 +desc.item.gun.loreFunc=查看深入功能 +desc.item.gun.manufacturer=制造商: %s +desc.item.gun.name=名称: %s +desc.item.gun.penetration=装甲穿透值: %s +desc.item.kitArmor=装甲将被新的装备取代。 +desc.item.kitHaz=装甲将被防护服取代。 +desc.item.kitPack=真便宜! +desc.item.kitPool=请在打开前清空背包库存! +desc.item.pileRod=§e使用钻孔石墨插入$§E使用螺丝刀拔出$ + + + +desc.item.rtgDecay=衰变为:%s +desc.item.rtgHeat=功率级别:%s +desc.item.storage.capacity=容量 %s%%s +desc.item.storage.proscons=查看利弊列表 +desc.misc.357=.357 马格南 +desc.misc.556=.223 雷明顿 +desc.misc.762=.308 温彻斯特 +desc.misc.func=§n-- 作用 -- +desc.misc.lanthanum="镧" +desc.misc.lctrl=§8按住 <§e§o左CTRL§8§o> %s +desc.misc.lore=§n-- 知识 -- +desc.misc.lshift=§8按住 <§e§o左SHIFT§8§o> %s +desc.misc.luna=§o20x155mm Lunatic +desc.misc.meltPoint=熔点: §c%s +desc.misc.noPos=未设置位置! +desc.misc.pos=将位置设置为:%s,%s,%s +desc.misc.posSet=位置已设置! +desc.item.wasteCooling=在乏燃料池中冷却 +desc.item.zirnoxBreedingRod=§2[ZIRNOX增殖棒]$§e放在燃料棒旁边增殖$§e持续 %d 刻 +desc.item.zirnoxRod=§a[ZIRNOX燃料棒]$§e每刻产生 %1$d 热量$§e持续 %2$d 刻 digamma.playerDigamma=玩家F-迪伽马辐照水平: digamma.playerHealth=玩家所受F-迪伽马辐照影响: digamma.playerRes=玩家F-迪伽马防护水平: @@ -822,6 +955,127 @@ geiger.playerRad=玩家辐射: geiger.playerRes=辐射抗性: geiger.title=盖革计数器 geiger.title.dosimeter=剂量计 +gun.make.ARMALITE=阿玛莱特公司 +gun.make.AUTO_ORDINANCE=美国自动武器公司 +gun.make.BAE=英国宇航系统公司 +gun.make.BENELLI=伯奈利武器公司 +gun.make.BLACK_MESA=黑山研究所 +gun.make.CERIX=赛里克斯·马格努斯锻造世界 +gun.make.COLT=柯尔特制造公司 +gun.make.COMBINE=世界工会 +gun.make.CUBE=Cube 2: Sauerbraten +gun.make.ENZINGER=Enzinger工会 +gun.make.EQUESTRIA=小马国导弹系统 +gun.make.FLIMFLAM=FlimFlam“欺骗”工业 +gun.make.F_STRONG=史特朗堡 +gun.make.GLORIA=GLORIA公司 +gun.make.HASBRO=孩之宝 +gun.make.H_AND_K=黑克勒和科赫武器公司 +gun.make.H_AND_R=哈林顿-理查森武器公司 +gun.make.IF=蹄铁军工 +gun.make.IMI=以色列军事工业 +gun.make.IMI_BIGMT=以色列军事工业公司/大型MT +gun.make.LANGFORD=朗福德研究实验室 +gun.make.LUNA=月球防御公司 +gun.make.MAGNUM_R_IMI=马格南研究公司 / 以色列军事工业公司 +gun.make.MANN=Open Mann Co. +gun.make.MAXIM=海勒姆·马克沁 +gun.make.METRO=地铁枪手 +gun.make.MWT=MWT原型实验室 +gun.make.NAZI=埃尔福特机械制造厂 +gun.make.NONE=- +gun.make.RAYTHEON=导弹系统公司 +gun.make.ROCKWELL=罗克韦尔国际公司 +gun.make.ROCKWELL_U=罗克韦尔国际公司? +gun.make.RYAN=莱恩工业 +gun.make.SAAB=萨博博福斯动力公司 +gun.make.SACO=萨科防卫军械 +gun.make.TULSKY=图拉武器厂 +gun.make.UAC=联合宇宙航空公司 +gun.make.UNKNOWN=??? +gun.make.WESTTEK=WestTek研究设施 +gun.make.WGW=威廉·古斯特洛夫·维尔克 +gun.make.WINCHESTER=温彻斯特速射武器公司 +gun.make.WINCHESTER_BIGMT=温彻斯特速射武器公司/大型MT +gun.name.ar15_50=AR-15 .50BMG型 +gun.name.baeAR=英国制式突击步枪 +gun.name.bel=野火蛋发射器 +gun.name.benelli=伯奈利M4 Super 90霰弹枪 +gun.name.benelliDrum=伯奈利M4 Super 90霰弹枪 (泵动供弹改进型) +gun.name.bio=RI No. 2 Mark 1 +gun.name.bolter=Manticora Pattern爆弹枪 +gun.name.cPython=柯尔特蟒蛇 +gun.name.cz53=CZ53 单兵转轮机枪 +gun.name.cz57=CZ57 复仇者机枪 +gun.name.dart=针枪 +gun.name.deagle=以色列军事工业公司沙漠之鹰 +gun.name.emp=EMP投射器 +gun.name.extinguisher=PROTEX灭火器6kg +gun.name.ffiV=FFI Viper +gun.name.ffiVInox=FFI Viper Inox +gun.name.ffiVLead=FFI Viper Lead +gun.name.ffiVN1=FFI Viper N1 +gun.name.ffiVN2=FFI Viper N2 +gun.name.ffiVUltra=FFI Viper Ultra +gun.name.ffivBling=FFI Viper Bling +gun.name.ffivSatur=FFI Viper D-25A +gun.name.g36=HK G36突击步枪 +gun.name.gPistol=HK69A1 手持单发榴弹发射器 +gun.name.gustav=卡尔·古斯塔夫M1无后坐力炮 +gun.name.ifHorseshoe=IF-18 蹄铁 +gun.name.ifPit=IF-18 蹄铁 Bottomless Pit +gun.name.ifScope=IF-18 蹄铁 Scoped +gun.name.ifStorm=IF-18 蹄铁 Silver Storm +gun.name.ifVanity=IF-18 蹄铁 Vanity +gun.name.karl=M1 卡尔·古斯塔夫 +gun.name.ks23=KS-23霰弹枪 +gun.name.lacunae=Auntie Lacunae +gun.name.lasetDet=霍普维尔激光雷管 +gun.name.lunaAR=1986 Bishamonten式突击步枪 +gun.name.lunaGun=1978 Rāhula type Standard Issue Sidearm (Revision 2) +gun.name.lunaHLR=1944 Chang'e type Light Machine Gun +gun.name.lunaShotty=1978 Guan Yu type Scattergun (Revision 1) +gun.name.lunaSMG=1956 ānanda type Submachine Gun +gun.name.lunaSniper=1915 Hou Yi type Anti-Material Rifle +gun.name.lunaTWR=Time Warp Rifle +gun.name.m2=M2式勃朗宁大口径重机枪 +gun.name.m42=M-42战术核弹发射器 +gun.name.m42MIRV=M-42实验MIRV +gun.name.m60=7.62毫米口径M60机枪 +gun.name.maxim=马克沁机枪 +gun.name.maximDouble=双重马克沁机枪 +gun.name.mg3=MG-42通用机枪 +gun.name.mp40=MP40冲锋枪 +gun.name.nerf=某些无良记者眼中的大规模杀伤性武器 +gun.name.osipr=守望标准型脉冲步枪 +gun.name.panz=反坦克火箭来复枪 54 +gun.name.quadro=OpenQuadro便携式导弹发射器 +gun.name.revolverCursed=不列颠标准问题电动手枪 +gun.name.sauer=绍尔猎枪 +gun.name.spas12=弗兰基SPAS-12式12号霰弹枪 +gun.name.spiw=H&R SPIW +gun.name.stinger=FIM-92毒刺便携式防空系统 +gun.name.stingerOneSky=The One Sky 毒刺便携式防空系统 +gun.name.supershotty=双管战斗霰弹枪 +gun.name.tau=XVL1456 陶子加农炮 +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.uacDMR=UAC-30 Designated Marksman Rifle +gun.name.uacLMG=UAC-49 Light Machine Gun +gun.name.uacPistol=UAC-B950 .45 Standard Issue Handgun +gun.name.uacSMG=UAC-17 Compact Sub-Machine Gun +gun.name.uboinik=Uboinik Revolving Shotgun +gun.name.uzi=IMI Uzi +gun.name.uziSatur=IMI Uzi D-25A +gun.name.win1887=温彻斯特M1887杠杆式连发霰弹枪 +gun.name.win1887Inox=温彻斯特M1887杠杆式连发霰弹枪 Inox +gun.name.win20Inox=温彻斯特20型Inox +gun.name.win20Poly=温彻斯特20型聚合物 +gun.name.win20Satur=温彻斯特20型 D-25A +gun.name.zomg=EMC101棱镜负能量炮 hadron.analysis=正在分析... hadron.buttonOn=分析室启动(如果存在) hadron.buttonOff=分析室关闭 @@ -881,6 +1135,8 @@ hbmfluid.balefire=野火火箭燃料 hbmfluid.biofuel=生物燃料 hbmfluid.biogas=沼气 hbmfluid.bitumen=沥青 +hbmfluid.blood=血 +hbmfluid.blood_hot=热的血 hbmfluid.carbondioxide=二氧化碳 hbmfluid.coalcreosote=煤焦杂酚油 hbmfluid.coalgas=煤汽油 @@ -920,9 +1176,11 @@ hbmfluid.mug_hot=热的Mug牌树根饮料 hbmfluid.naphtha=石脑油 hbmfluid.naphtha_crack=裂化石脑油 hbmfluid.nitan=NITAN牌100号超级燃料 +hbmfluid.nitric_acid=硝酸 hbmfluid.none=无 hbmfluid.oil=原油 hbmfluid.oxygen=液氧 +hbmfluid.oxyhydrogen=氢氧混合气 hbmfluid.pain=Pn(III) 钽铁溶液 hbmfluid.petroil=汽油 hbmfluid.petroil_leaded=含铅石油 @@ -940,10 +1198,12 @@ hbmfluid.sas3=三硫化Sa hbmfluid.schrabidic=Sa酸 hbmfluid.seedslurry=播种浆料 hbmfluid.smear=工业油 +hbmfluid.solvent=有机溶剂 hbmfluid.spentsteam=低压蒸汽 hbmfluid.steam=蒸汽 hbmfluid.sulfuric_acid=硫酸 hbmfluid.superhotsteam=超热蒸汽 +hbmfluid.syngas=合成气 hbmfluid.tritium=氚 hbmfluid.uf6=六氟化铀 hbmfluid.ultrahotsteam=超浓密蒸汽 @@ -1091,6 +1351,7 @@ item.ammo_12gauge.name=12号鹿弹 item.ammo_12gauge_du.name=12号鹿弹[铀涂层] item.ammo_12gauge_incendiary.name=12号鹿弹[燃烧] item.ammo_12gauge_marauder.name=12号战术反掠夺鹿弹 +item.ammo_12gauge_percussion.name=12号冲击火药帽 item.ammo_12gauge_shrapnel.name=12号鹿弹[榴霰弹] item.ammo_12gauge_sleek.name=12号鹿弹[IF-R&D] item.ammo_20gauge.name=20号鹿弹 @@ -1117,6 +1378,9 @@ item.ammo_44_pip.name=.44马格南子弹[车厢] item.ammo_44_rocket.name=.44马格南火箭 item.ammo_44_silver.name=.44马格南子弹[建筑] item.ammo_44_star.name=.44马格南子弹[星辉] +item.ammo_45.name=.45 ACP 子弹 +item.ammo_45_ap.name=.45 ACP 子弹[AP] +item.ammo_45_du.name=.45 ACP 子弹[贫铀] item.ammo_4gauge.name=四号鹿弹 item.ammo_4gauge_balefire.name=23mm野火榴弹 item.ammo_4gauge_canister.name=23mm 火箭弹[榴霰弹] @@ -1171,6 +1435,12 @@ item.ammo_5mm_star.name=5mm子弹[星辉] item.ammo_75bolt.name=.75弹匣(30发) item.ammo_75bolt_incendiary.name=.75燃烧弹匣(30发) item.ammo_75bolt_he.name=.75高爆弹匣(30发) +item.ammo_762.name=7.62mm 子弹 +item.ammo_762_ap.name=7.62mm 子弹[AP] +item.ammo_762_du.name=7.62mm 子弹[贫铀] +item.ammo_762_k.name=7.62mm 空包弹 +item.ammo_762_phosphorus.name=7.62mm 子弹[白磷] +item.ammo_762_tracer.name=7.62mm 子弹[曳光] item.ammo_9mm.name=9mm子弹 item.ammo_9mm_ap.name=9mm子弹[AP] item.ammo_9mm_chlorophyte.name=9mm子弹[叶绿] @@ -1215,6 +1485,9 @@ item.ammo_grenade_toxic.name=40mm榴弹[化学] item.ammo_grenade_tracer.name=40mm训练榴弹 item.ammo_himars_standard.name=M28制导炮兵火箭弹舱 item.ammo_himars_single.name=M39A1制导炮兵火箭弹舱 +item.ammo_luna.name=Lunatic狙击弹 +item.ammo_luna_explosive.name=Lunatic狙击爆炸弹 +item.ammo_luna_incendiary.name=Lunatic狙击燃烧弹 item.ammo_mirv.name=迷你MIRV item.ammo_mirv_high.name=迷你MIRV (高当量) item.ammo_mirv_low.name=迷你MIRV (低当量) @@ -1294,7 +1567,9 @@ item.asbestos_helmet.name=防火头盔 item.asbestos_legs.name=防火护腿 item.asbestos_plate.name=防火胸甲 item.ashglasses.name=防灰烬护目镜 +item.assembly_45.name=.45 ACP子弹[待装配] item.assembly_556.name=5.56mm子弹[待装配] +item.assembly_762.name=7.62mm子弹[待装配] item.assembly_actionexpress.name=.50 AE子弹[待装配] item.assembly_calamity.name=.50 BMG子弹[待装配] item.assembly_desh.name=Desh子弹[待装配] @@ -1302,6 +1577,7 @@ item.assembly_gold.name=金子弹[待装配] item.assembly_iron.name=铁子弹[待装配] item.assembly_lacunae.name=.5mm子弹[待装配] item.assembly_lead.name=玻璃子弹[待装配] +item.assembly_luna.name=Lunatic狙击子弹[待装配] item.assembly_nightmare.name=钨子弹[待装配] item.assembly_nopip.name=.44马格南[待装配] item.assembly_nuke.name=迷你核弹外壳 @@ -1312,7 +1588,7 @@ item.assembly_steel.name=铅子弹[待装配] item.assembly_template.name=装配机模板: item.assembly_uzi.name=.22 LR子弹[待装配] item.attachment_mask.name=附加型防毒面具 -item.attachment_mask_mono.name=可接入式防一氧化碳面罩 +item.attachment_mask_mono.name=可接入式半面罩防毒面具 item.australium_iii.name=MkIII寿命延长剂 item.australium_iv.name=MkIV寿命延长剂 item.australium_v.name=MkV寿命延长剂 @@ -1323,6 +1599,7 @@ item.balefire_scrambled.name=炒野火蛋 item.ball_dynamite.name=硝糖炸药 item.ball_fireclay.name=耐火粘土 item.ball_tnt.name=TNT炸药 +item.ballistic_gauntlet.name=防弹护具 item.ballistite.name=混合无烟火药 item.bandaid.name=邦迪创可贴 item.bathwater.name=有毒肥皂水 @@ -1443,12 +1720,7 @@ item.blade_meteorite.name=陨石刀 item.blade_titanium.name=钛扇片 item.blade_tungsten.name=钨强化扇片 item.blades_advanced_alloy.name=高级合金刀片 -item.blades_aluminium.name=铝制刀片 -item.blades_combine_steel.name=CMB钢刀片 item.blades_desh.name=Desh制刀片 -item.blades_gold.name=金制刀片 -item.blades_iron.name=铁制刀片 -item.blades_schrabidium.name=Sa326刀片 item.blades_steel.name=钢制刀片 item.blades_titanium.name=钛制刀片 item.blowtorch.name=喷灯 @@ -1530,36 +1802,62 @@ item.canister_petroil.name=桶装汽油 item.canister_reoil.name=桶装再生油 item.canister_smear.name=桶装工业油 item.canned_asbestos.name=石棉罐头 +item.canned_asbestos.desc=尝尝石棉肺! item.canned_ass.name=驴罐头 +item.canned_ass.desc=100%优质驴肉!* item.canned_bark.name=松树皮罐头 +item.canned_bark.desc=更加的“松”脆! item.canned_beef.name=牛肉罐头 +item.canned_beef.desc=几个世纪前,一头牛为此而死。 item.canned_bhole.name=黑洞罐头 +item.canned_bhole.desc=奇点是我肚肚里的美味! item.canned_cheese.name=融化奶酪罐头 +item.canned_cheese.desc=是奶酪吗?是橡胶水泥吗?谁知道,谁在乎。 item.canned_chinese.name=中餐罐头 -item.canned_diesel.name=柴油 +item.canned_chinese.desc=在中国,中餐被称为饭。 +item.canned_diesel.name=柴油罐头 +item.canned_diesel.desc=我渐渐地就抖不出包袱了 item.canned_fist.name=拳头罐头 +item.canned_fist.desc=给你一拳! item.canned_fried.name=炸鸡罐头 +item.canned_fried.desc=甚至罐头都是油炸的! item.canned_hotdogs.name=热狗罐头 +item.canned_hotdogs.desc=不要与冷猫混淆。 item.canned_jizz.name=FlimFlam工业牌?马奶罐头 +item.canned_jizz.desc=等等什么—— item.canned_kerosene.name=煤油罐头 +item.canned_kerosene.desc=想象一下这句俏皮的台词。 item.canned_leftovers.name=剩菜罐头 +item.canned_leftovers.desc=你来的太迟了 item.canned_milk.name=罐装炼乳 +item.canned_milk.desc=牛奶2:比以往任何时候都更固体! item.canned_mystery.name=神秘肉类罐头 +item.canned_mystery.desc=里面是什么?只有一种方法可以找到! item.canned_napalm.name=凝固汽油罐头 +item.canned_napalm.desc=我喜欢早上闻着老梗的味道! item.canned_oil.name=机油罐头 +item.canned_oil.desc=它既然能让发动机运转的更流畅,那为什么不能用在人类身上? item.canned_pashtet.name=牛排罐头 +item.canned_pashtet.desc=翻译服务不可用блядь! item.canned_pizza.name=意大利香肠比萨罐头 +item.canned_pizza.desc=反人类罪 item.canned_recursion.name=循环罐头 +item.canned_recursion.desc=封闭递归 item.canned_spam.name=SPAM斯帕姆午餐肉 +item.canned_spam.desc=这段三分半钟的幽默剧是以布朗利虚构的绿侏儒咖啡馆为背景。一位女服务生与不喜欢吃午餐肉的本太太之间发生了争执,女服务生背诵了一份几乎每道菜都含有午餐肉的菜单。本太太要了一道没有午餐肉的菜,这让她爱吃午餐肉的丈夫大吃一惊。女服务员也对这个要求很反感。本先生提出要替换她的午餐肉,并要了一道含有大量午餐肉和烤豆的菜。服务员拒绝了,因为烤豆子已经吃完了;当本先生要求替换午餐肉时,女服务员再次表示厌恶。有几次,餐厅里的一群维京人高声歌唱午餐肉,打断了谈话。那个愤怒的女服务员命令他们闭嘴,但他们依旧大声唱歌。这时一名匈牙利游客来到柜台,试图用一本完全不准确的匈牙利语/英语手册(参考之前的小品)点菜。紧接着这名匈牙利游客就被一名警察迅速护送离开。然后这段幽默剧突然切换镜头,一位历史学家在电视演播室谈论维京人在咖啡馆的起源。他继续说,并开始越来越多地在每一句话中插入“午餐肉”一词。然后背景被抬高,露出背后的餐厅场景。那个历史学家加入了维京人的歌曲,本夫妇通过电线离开现场,而歌声还在继续。在最初的电视表演中,结尾的字幕开始滚动,背景中仍然可以听到歌声。 item.canned_stew.name=蘑菇煲罐头 +item.canned_stew.desc=... item.canned_tomato.name=番茄汤罐头 +item.canned_tomato.desc=谁要浓浓的红糊糊? item.canned_tube.name=宇航员食品管 +item.canned_tube.desc=美味的蘑菇。 item.canned_tuna.name=金枪鱼罐头 +item.canned_tuna.desc=我不知道那是金枪鱼还是干水泥。 item.canned_yogurt.name=酸奶罐头 +item.canned_yogurt.desc=可能坏掉了,但管它呢 item.canteen_13.name=Vault13水壶 item.canteen_fab.name=极品伏特加 item.canteen_vodka.name=伏特加 -item.cap_aluminium.name=铝盖 item.cap_fritz.name=弗里茨瓶盖 item.cap_korl.name=Korl瓶盖 item.cap_nuka.name=核子可乐瓶盖 @@ -1603,6 +1901,23 @@ item.centrifuge_element.name=离心元件 item.centrifuge_tower.name=离心塔 item.chainsaw.name=链锯 item.cheese.name=奶酪 +item.cheese_quesadilla.name=奶酪油炸玉米粉饼 +item.chemical_dye.black.name=化学染料(黑色) +item.chemical_dye.blue.name=化学染料(蓝色) +item.chemical_dye.brown.name=化学染料(棕色) +item.chemical_dye.cyan.name=化学染料(青色) +item.chemical_dye.gray.name=化学染料(灰色) +item.chemical_dye.green.name=化学染料(绿色) +item.chemical_dye.lightblue.name=化学染料(浅蓝色) +item.chemical_dye.lime.name=化学染料(石灰) +item.chemical_dye.magenta.name=化学染料(洋红色) +item.chemical_dye.orange.name=化学染料(橙色) +item.chemical_dye.pink.name=化学染料(粉色) +item.chemical_dye.purple.name=化学染料(紫色) +item.chemical_dye.red.name=化学染料(红色) +item.chemical_dye.silver.name=化学染料(浅灰色) +item.chemical_dye.white.name=化学染料(白色) +item.chemical_dye.yellow.name=化学染料(黄色) item.chemistry_set.name=实验室玻璃器皿 item.chemistry_set_boron.name=实验室玻璃器皿(硼玻璃) item.chemistry_template.name=化工厂模板: @@ -1752,6 +2067,22 @@ item.component_limiter.name=稳定器组件 item.cordite.name=无烟线状火药 item.cotton_candy.name=放射性棉花糖 item.crate_caller.name=空投召唤器 +item.crayon.black.name=黑色蜡笔 +item.crayon.blue.name=蓝色蜡笔 +item.crayon.brown.name=棕色蜡笔 +item.crayon.cyan.name=青色蜡笔 +item.crayon.gray.name=灰色蜡笔 +item.crayon.green.name=绿色蜡笔 +item.crayon.lightblue.name=浅蓝色蜡笔 +item.crayon.lime.name=青色蜡笔 +item.crayon.magenta.name=洋红蜡笔 +item.crayon.orange.name=橙色蜡笔 +item.crayon.pink.name=粉红蜡笔 +item.crayon.purple.name=紫色蜡笔 +item.crayon.red.name=红色蜡笔 +item.crayon.silver.name=浅灰色蜡笔 +item.crayon.white.name=白色蜡笔 +item.crayon.yellow.name=黄色蜡笔 item.crowbar.name=Mk.V开箱装置"物理学圣剑" item.crucible.name=裁决剑 item.crucible_template.name=坩埚模板 @@ -1850,10 +2181,14 @@ item.door_office.name=办公室门 item.dosimeter.name=剂量计 item.drillbit_desh.name=Desh钻头 item.drillbit_desh_diamond.name=Desh钻头(镶钻) +item.drillbit_ferro.name=铀铁合金钻头 +item.drillbit_ferro_diamond.name=铁铀钻头(镶钻) item.drillbit_hss.name=高速钢钻头 item.drillbit_hss_diamond.name=高速钢钻头(镶钻) item.drillbit_steel.name=钢钻头 item.drillbit_steel_diamond.name=钢钻头(镶钻) +item.drillbit_tcalloy.name=锝钢钻头 +item.drillbit_tcalloy_diamond.name=锝钢钻头(镶钻) item.drill_titanium.name=钛钻头 item.drax.name=采掘钻 item.drax_mk2.name=强化型采掘钻 @@ -1981,7 +2316,7 @@ item.gas_mask_filter_mono.name=催化性面罩过滤器 item.gas_mask_filter_piss.name=先进的简易防毒面具过滤器 item.gas_mask_filter_rag.name=临时防毒面具过滤器 item.gas_mask_m65.name=M65-Z防毒面具 -item.gas_mask_mono.name=防一氧化碳面罩 +item.gas_mask_mono.name=半面罩防毒面具 item.gas_mask_olde.name=皮革防毒面具 item.gas_petroleum.name=石油气罐 item.gas_tester.name=气体传感器 @@ -2096,6 +2431,7 @@ item.gun_lever_action_ammo.name=12x74 鹿弹 item.gun_lever_action_dark.name=马腿杠杆式霰弹枪[黑暗] item.gun_lever_action_sonata.name=自杀霰弹 item.gun_lever_action_sonata_2.name=§cSonata的麦克风§r +item.gun_m2.name=Ma Deuce item.gun_minigun.name=CZ53机枪 item.gun_mirv.name=M42核弹发射器 "试验型MIRV" item.gun_mirv_ammo.name=八倍MIRV @@ -2103,8 +2439,8 @@ item.gun_moist_nugget.name=莫辛纳甘[迫真] item.gun_mp.name=和平主义的机枪 item.gun_mp40.name=MP40冲锋枪 item.gun_mp40_ammo.name=冲锋枪子弹 -item.gun_mp_ammo.name=小型无发射药机枪子弹 -item.gun_mymy.name=Nietes +item.gun_pm_ammo.name=小型无发射药机枪子弹 +item.gun_mymy.name=Nietes软弹枪 item.gun_osipr.name=标准型脉冲机枪 item.gun_osipr_ammo.name=暗能量脉冲弹 item.gun_osipr_ammo2.name=融合球 @@ -2114,7 +2450,7 @@ item.gun_quadro.name=四喜丸子 item.gun_revolver.name=强化左轮手枪 item.gun_revolver_ammo.name=铅左轮子弹 item.gun_revolver_blackjack.name=黑杰克五发装左轮枪 -item.gun_revolver_cursed.name=诅咒左轮手枪 +item.gun_revolver_cursed.name=诅咒手枪 item.gun_revolver_cursed_ammo.name=钢左轮子弹 item.gun_revolver_gold.name=黄金左轮手枪 item.gun_revolver_gold_ammo.name=金左轮子弹 @@ -2230,6 +2566,7 @@ item.ingot_beryllium.name=铍锭 item.ingot_bismuth.name=铋锭 item.ingot_boron.name=硼锭 item.ingot_c4.name=一块C-4 +item.ingot_calcium.name=钙锭 item.ingot_chainsteel.name=重链钢 item.ingot_co60.name=钴-60锭 item.ingot_cobalt.name=钴锭 @@ -2557,6 +2894,7 @@ item.mp_fuselage_15_solid.name=15号弹体[固体燃料] item.mp_fuselage_15_solid_desh.name=15号弹体[固体燃料] item.mp_fuselage_15_solid_faust.name=15号弹体[固体燃料] item.mp_fuselage_15_solid_insulation.name=15号弹体[固体燃料] +item.mp_fuselage_15_solid_mimi.name=15号弹体[固体燃料] item.mp_fuselage_15_solid_panorama.name=15号弹体[固体燃料] item.mp_fuselage_15_solid_roses.name=15号弹体[固体燃料] item.mp_fuselage_15_solid_silvermoonlight.name=15号弹体[固体燃料] @@ -2602,6 +2940,7 @@ item.mp_warhead_15_he.name=15号HE弹头 item.mp_warhead_15_incendiary.name=15号燃烧弹头 item.mp_warhead_15_n2.name=15号N2炸弹 item.mp_warhead_15_nuclear.name=15号核弹头 +item.mp_warhead_15_nuclear_mimi.name=15号核弹头 item.mp_warhead_15_nuclear_shark.name=15号核弹头 item.mp_warhead_15_turbine.name=15号喷气发动机弹头 item.mucho_mango.name=亚利桑那芒果味饮料 @@ -2722,9 +3061,22 @@ item.ore.niobium=铌 item.ore.titanium=钛 item.ore.tungsten=钨 item.ore_bedrock.name=基岩%s矿 +item.ore_byproduct.b_aluminium.name=铝晶体碎片 +item.ore_byproduct.b_bismuth.name=铋晶体碎片 +item.ore_byproduct.b_calcium.name=钙晶体碎片 +item.ore_byproduct.b_copper.name=铜晶体碎片 +item.ore_byproduct.b_iron.name=铁晶体碎片 +item.ore_byproduct.b_lead.name=铅晶体碎片 +item.ore_byproduct.b_lithium.name=锂晶体碎片 +item.ore_byproduct.b_silicon.name=硅晶体碎片 +item.ore_byproduct.b_sulfur.name=硫晶体碎片 +item.ore_byproduct.b_titanium.name=钛晶体碎片 item.ore_centrifuged.name=离心%s矿 item.ore_cleaned.name=清洁%s矿 +item.ore_deepcleaned.name=深清洁%s矿 item.ore_enriched.name=富集%s矿 +item.ore_nitrated.name=硝化%s矿 +item.ore_nitrocrystalline.name=亚硝基结晶%s矿 item.ore_purified.name=净化%s矿 item.ore_separated.name=分离%s矿 item.overfuse.name=奇异螺丝刀 @@ -2899,11 +3251,13 @@ item.powder_australium.name=奥斯粉 item.powder_bakelite.name=电木粉 item.powder_balefire.name=热核灰烬 item.powder_beryllium.name=铍粉 +item.powder_bismuth.name=铋粉 item.powder_borax.name=硼砂 item.powder_boron.name=硼粉 item.powder_boron_tiny.name=小撮硼粉 item.powder_bromine.name=溴粉 item.powder_caesium.name=铯粉 +item.powder_calcium.name=钙粉 item.powder_cerium.name=铈粉 item.powder_cerium_tiny.name=小撮铈粉 item.powder_chlorophyte.name=叶绿粉 @@ -3352,6 +3706,7 @@ item.shimmer_head.name=重型锤头 item.shimmer_sledge.name=闪耀锤 item.singularity.name=奇点 item.singularity_counter_resonant.name=可控反振谐奇点 +item.singularity_micro.name=微型奇点 item.singularity_spark.name=Spark奇点 item.singularity_super_heated.name=超热共振奇点 item.siox.name=SiOX抗癌药物 @@ -3391,10 +3746,6 @@ item.stamp_obsidian_circuit.name=黑曜石电路版锻模 item.stamp_obsidian_flat.name=黑曜石锻模 item.stamp_obsidian_plate.name=黑曜石板锻模 item.stamp_obsidian_wire.name=黑曜石电线锻模 -item.stamp_schrabidium_circuit.name=Sa326电路版锻模 -item.stamp_schrabidium_flat.name=Sa326锻模 -item.stamp_schrabidium_plate.name=Sa326板锻模 -item.stamp_schrabidium_wire.name=Sa326电线锻模 item.stamp_steel_circuit.name=钢质电路版锻模 item.stamp_steel_flat.name=钢质锻模 item.stamp_steel_plate.name=钢质板锻模 @@ -3699,7 +4050,7 @@ tile.ams_limiter.name=AMS稳能器 [开发中] tile.ancient_scrap.name=古代废金属 tile.anvil_bismuth.name=铋砧 tile.anvil_dnt.name=双聚中子态素砧 -tile.anvil_ferrouranium.name=铀-铁合金砧 +tile.anvil_ferrouranium.name=铀铁合金砧 tile.anvil_iron.name=铁砧 tile.anvil_lead.name=铅砧 tile.anvil_meteorite.name=陨石砧 @@ -4061,6 +4412,7 @@ tile.fireworks.name=烟花箱 tile.fireworks.charges=已充能: %s tile.fireworks.message=信息: %s tile.fireworks.color=颜色: %s +tile.fissure_bomb.name=裂缝炸弹 tile.flame_war.name=盒中论战 tile.float_bomb.name=悬浮炸弹 tile.fluid_duct.name=通用流体管道 @@ -4145,7 +4497,7 @@ tile.hadron_plating_blue.name=粒子加速器镀层 (蓝) tile.hadron_plating_glass.name=粒子加速器镀层 (窗口) tile.hadron_plating_striped.name=粒子加速器镀层(低温危险) tile.hadron_plating_voltz.name=粒子加速器镀层 (VOLTZ) -tile.hadron_plating_yellow.name=粒子加速器镀层(YelloDye) +tile.hadron_plating_yellow.name=粒子加速器镀层(Yello染料) tile.hadron_power.name=粒子加速器电源接口 tile.hadron_power_10m.name=粒子加速器电源接口(10MHE) tile.hadron_power_100m.name=粒子加速器电源接口(100MHE) @@ -4191,6 +4543,7 @@ tile.machine_armor_table.name=装甲改装台 tile.machine_assembler.name=装配机 tile.machine_assemfac.name=装配厂 tile.machine_autocrafter.name=自动工作台 +tile.machine_autosaw.name=自动嗡嗡锯 tile.machine_bat9000.name=巨尻-9000 储罐 tile.machine_battery.name=蓄电池 tile.machine_battery_potato.name=马铃薯电池组 @@ -4241,6 +4594,7 @@ tile.machine_fracking_tower.name=水力压裂塔 tile.machine_gascent.name=气体离心机 tile.machine_generator.name=核反应堆[旧] tile.machine_geo.name=地热发电机 +tile.machine_hephaestus.name=地热换热器 tile.machine_industrial_generator.name=工业发电机 tile.machine_keyforge.name=锁匠桌 tile.machine_large_turbine.name=工业汽轮机 @@ -4307,6 +4661,7 @@ tile.machine_transformer_dnt.name=DNT-20Hz变频器 tile.machine_transformer_dnt_20.name=DNT-1Hz变频器 tile.machine_turbine.name=汽轮机 tile.machine_turbine.desc=效率: 85%% +tile.machine_turbinegas.name=联合循环燃气轮机 tile.machine_turbofan.name=涡扇发动机 tile.machine_uf6_tank.name=六氟化铀储罐 tile.machine_waste_drum.name=乏燃料池 @@ -4416,6 +4771,7 @@ tile.ore_unobtainium.name=难得素矿石 tile.ore_uranium.name=铀矿石 tile.ore_uranium_scorched.name=烧焦的铀矿石 tile.ore_verticium.name=韦德赛矿石 +tile.ore_volcano.name=地热裂缝 tile.ore_weidanium.name=魏丹矿石 tile.pink_barrel.name=煤油桶 tile.pink_log.name=粉色原木 @@ -4592,6 +4948,7 @@ tile.turret_maxwell.name=高能微波炮塔 "麦克斯韦" tile.turret_rocket.name=火箭炮塔 tile.turret_richard.name=火箭炮塔“理查德” tile.turret_spitfire.name=目前没有名字[开发中] +tile.turret_sentry.name=哨兵炮塔“布朗” tile.turret_tau.name=陶子炮塔 tile.turret_tauon.name=XVL1456原型陶子发射器炮塔"陶恩" tile.vacuum.name=真空 diff --git a/src/main/resources/assets/hbm/models/blocks/splitter.obj b/src/main/resources/assets/hbm/models/blocks/splitter.obj index 611da2f75..4078add15 100644 --- a/src/main/resources/assets/hbm/models/blocks/splitter.obj +++ b/src/main/resources/assets/hbm/models/blocks/splitter.obj @@ -31,10 +31,10 @@ v -0.500000 0.250000 0.375000 v -0.500000 0.875000 0.375000 v 0.000000 0.250000 0.375000 v 0.000000 0.875000 0.375000 -vt 1.000000 0.875000 -vt 0.500000 0.250000 -vt 1.000000 0.250000 -vt 0.500000 0.875000 +vt 0.187500 1.000000 +vt 0.812500 0.500000 +vt 0.812500 1.000000 +vt 0.187500 0.500000 vn 0.0000 0.0000 -1.0000 s off f 10/9/3 11/10/3 9/11/3 @@ -57,10 +57,10 @@ v -0.500000 0.250000 -0.375000 v -0.500000 0.875000 -0.375000 v 0.000000 0.250000 -0.375000 v 0.000000 0.875000 -0.375000 -vt 0.000000 0.250000 -vt 0.500000 0.875000 -vt 0.000000 0.875000 -vt 0.500000 0.250000 +vt 0.187500 1.000000 +vt 0.812500 0.500000 +vt 0.812500 1.000000 +vt 0.187500 0.500000 vn 0.0000 0.0000 1.0000 s off f 17/17/5 20/18/5 18/19/5 @@ -135,10 +135,10 @@ v -0.500000 0.000000 0.500000 v 0.500000 0.000000 0.500000 v -0.500000 0.000000 -0.500000 v 0.500000 0.000000 -0.500000 -vt 1.000000 0.000000 vt 0.000000 1.000000 -vt 0.000000 0.000000 +vt 1.000000 0.000000 vt 1.000000 1.000000 +vt 0.000000 0.000000 vn 0.0000 -1.0000 0.0000 s off f 43/41/11 42/42/11 41/43/11 diff --git a/src/main/resources/assets/hbm/models/machines/watz_pump.obj b/src/main/resources/assets/hbm/models/machines/watz_pump.obj new file mode 100644 index 000000000..e259e6ee0 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/watz_pump.obj @@ -0,0 +1,1647 @@ +# Blender v2.79 (sub 0) OBJ File: 'watz_pump.blend' +# www.blender.org +o Plane +v -0.500000 0.000000 -0.375000 +v -0.500000 0.000000 0.375000 +v 0.375000 0.000000 0.500000 +v -0.375000 0.000000 0.500000 +v -0.375000 0.000000 1.500000 +v 0.375000 0.000000 1.500000 +v -0.375000 0.000000 -1.500000 +v 0.375000 0.000000 -1.500000 +v -1.500000 0.000000 0.375000 +v 1.500000 0.000000 0.375000 +v -1.500000 0.000000 -0.375000 +v 1.500000 0.000000 -0.375000 +v -0.375000 0.000000 -0.500000 +v 0.375000 0.000000 -0.500000 +v 0.500000 0.000000 0.375000 +v 0.500000 0.000000 -0.375000 +v -0.500000 0.000000 0.500000 +v 0.500000 0.000000 0.500000 +v -0.500000 0.000000 -0.500000 +v 0.500000 0.000000 -0.500000 +v -0.375000 0.250000 1.500000 +v 0.375000 0.250000 1.500000 +v -0.375000 0.250000 -1.500000 +v 0.375000 0.250000 -1.500000 +v -1.500000 0.250000 0.375000 +v 1.500000 0.250000 0.375000 +v -1.500000 0.250000 -0.375000 +v 1.500000 0.250000 -0.375000 +v -0.375000 0.500000 0.500000 +v 0.375000 0.500000 0.500000 +v -0.375000 0.500000 -0.500000 +v 0.375000 0.500000 -0.500000 +v -0.500000 0.500000 0.375000 +v 0.500000 0.500000 0.375000 +v -0.500000 0.500000 -0.375000 +v 0.500000 0.500000 -0.375000 +v -0.500000 0.500000 0.500000 +v 0.500000 0.500000 0.500000 +v -0.500000 0.500000 -0.500000 +v 0.500000 0.500000 -0.500000 +v -0.375000 1.500000 0.500000 +v 0.375000 1.500000 0.500000 +v -0.375000 1.500000 -0.500000 +v 0.375000 1.500000 -0.500000 +v -0.500000 1.500000 0.375000 +v 0.500000 1.500000 0.375000 +v -0.500000 1.500000 -0.375000 +v 0.500000 1.500000 -0.375000 +v -0.250000 1.750000 0.250000 +v 0.250000 1.750000 0.250000 +v -0.250000 1.750000 -0.250000 +v 0.250000 1.750000 -0.250000 +v -0.250000 2.000000 -0.250000 +v -0.250000 2.000000 0.250000 +v 0.250000 2.000000 0.250000 +v 0.250000 2.000000 -0.250000 +v 0.099111 1.161611 -0.500000 +v 0.062500 1.250000 -0.500000 +v 0.099111 1.338388 -0.500000 +v 0.187500 1.374999 -0.500000 +v 0.275888 1.338388 -0.500000 +v 0.312500 1.250000 -0.500000 +v 0.275888 1.161611 -0.500000 +v 0.187500 1.125000 -0.500000 +v 0.099111 1.161611 -0.875000 +v 0.062500 1.250000 -0.875000 +v 0.099111 1.338388 -0.875000 +v 0.187500 1.374999 -0.875000 +v 0.275888 1.338388 -0.875000 +v 0.312500 1.250000 -0.875000 +v 0.275888 1.161611 -0.875000 +v 0.099111 1.150888 -0.900888 +v 0.062500 1.213388 -0.963388 +v 0.099111 1.275888 -1.025888 +v 0.187500 1.301776 -1.051777 +v 0.275888 1.275888 -1.025888 +v 0.312500 1.213388 -0.963388 +v 0.275888 1.150888 -0.900888 +v 0.099111 1.125000 -0.911612 +v 0.062500 1.125000 -1.000000 +v 0.099111 1.125000 -1.088388 +v 0.187500 1.125000 -1.125000 +v 0.275888 1.125000 -1.088388 +v 0.312500 1.125000 -1.000000 +v 0.275888 1.125000 -0.911612 +v 0.187500 1.125000 -0.875000 +v 0.099111 0.250000 -0.911612 +v 0.062500 0.250000 -1.000000 +v 0.099111 0.250000 -1.088388 +v 0.187500 0.250000 -1.125000 +v 0.275888 0.250000 -1.088388 +v 0.312500 0.250000 -1.000000 +v 0.275888 0.250000 -0.911612 +v 0.187500 0.250000 -0.875000 +v 0.275889 1.161611 0.500000 +v 0.312500 1.250000 0.500000 +v 0.275889 1.338388 0.500000 +v 0.187500 1.374999 0.500000 +v 0.099112 1.338388 0.500000 +v 0.062500 1.250000 0.500000 +v 0.099112 1.161611 0.500000 +v 0.187500 1.125000 0.500000 +v 0.275889 1.161611 0.875000 +v 0.312500 1.250000 0.875000 +v 0.275889 1.338388 0.875000 +v 0.187500 1.374999 0.875000 +v 0.099112 1.338388 0.875000 +v 0.062500 1.250000 0.875000 +v 0.099112 1.161611 0.875000 +v 0.275889 1.150888 0.900888 +v 0.312500 1.213388 0.963388 +v 0.275889 1.275888 1.025888 +v 0.187500 1.301776 1.051777 +v 0.099112 1.275888 1.025888 +v 0.062500 1.213388 0.963388 +v 0.099112 1.150888 0.900888 +v 0.275889 1.125000 0.911612 +v 0.312500 1.125000 1.000000 +v 0.275889 1.125000 1.088388 +v 0.187500 1.125000 1.125000 +v 0.099112 1.125000 1.088388 +v 0.062500 1.125000 1.000000 +v 0.099112 1.125000 0.911612 +v 0.187500 1.125000 0.875000 +v 0.275889 0.250000 0.911612 +v 0.312500 0.250000 1.000000 +v 0.275889 0.250000 1.088388 +v 0.187500 0.250000 1.125000 +v 0.099112 0.250000 1.088388 +v 0.062500 0.250000 1.000000 +v 0.099112 0.250000 0.911612 +v 0.187500 0.250000 0.875000 +v -0.187500 0.250000 -0.875000 +v -0.099112 0.250000 -0.911612 +v -0.062500 0.250000 -1.000000 +v -0.099112 0.250000 -1.088388 +v -0.187500 0.250000 -1.125000 +v -0.275889 0.250000 -1.088388 +v -0.312500 0.250000 -1.000000 +v -0.275889 0.250000 -0.911612 +v -0.187500 1.125000 -0.875000 +v -0.099112 1.125000 -0.911612 +v -0.062500 1.125000 -1.000000 +v -0.099112 1.125000 -1.088388 +v -0.187500 1.125000 -1.125000 +v -0.275889 1.125000 -1.088388 +v -0.312500 1.125000 -1.000000 +v -0.275889 1.125000 -0.911612 +v -0.099112 1.150888 -0.900888 +v -0.062500 1.213388 -0.963388 +v -0.099112 1.275888 -1.025888 +v -0.187500 1.301776 -1.051777 +v -0.275889 1.275888 -1.025888 +v -0.312500 1.213388 -0.963388 +v -0.275889 1.150888 -0.900888 +v -0.099112 1.161611 -0.875000 +v -0.062500 1.250000 -0.875000 +v -0.099112 1.338388 -0.875000 +v -0.187500 1.374999 -0.875000 +v -0.275889 1.338388 -0.875000 +v -0.312500 1.250000 -0.875000 +v -0.275889 1.161611 -0.875000 +v -0.187500 1.125000 -0.500000 +v -0.099112 1.161611 -0.500000 +v -0.062500 1.250000 -0.500000 +v -0.099112 1.338388 -0.500000 +v -0.187500 1.374999 -0.500000 +v -0.275889 1.338388 -0.500000 +v -0.312500 1.250000 -0.500000 +v -0.275889 1.161611 -0.500000 +v -0.187500 0.250000 0.875000 +v -0.275888 0.250000 0.911612 +v -0.312500 0.250000 1.000000 +v -0.275888 0.250000 1.088388 +v -0.187500 0.250000 1.125000 +v -0.099111 0.250000 1.088388 +v -0.062500 0.250000 1.000000 +v -0.099111 0.250000 0.911612 +v -0.187500 1.125000 0.875000 +v -0.275888 1.125000 0.911612 +v -0.312500 1.125000 1.000000 +v -0.275888 1.125000 1.088388 +v -0.187500 1.125000 1.125000 +v -0.099111 1.125000 1.088388 +v -0.062500 1.125000 1.000000 +v -0.099111 1.125000 0.911612 +v -0.275888 1.150888 0.900888 +v -0.312500 1.213388 0.963388 +v -0.275888 1.275888 1.025888 +v -0.187500 1.301776 1.051777 +v -0.099111 1.275888 1.025888 +v -0.062500 1.213388 0.963388 +v -0.099111 1.150888 0.900888 +v -0.275888 1.161611 0.875000 +v -0.312500 1.250000 0.875000 +v -0.275888 1.338388 0.875000 +v -0.187500 1.374999 0.875000 +v -0.099111 1.338388 0.875000 +v -0.062500 1.250000 0.875000 +v -0.099111 1.161611 0.875000 +v -0.187500 1.125000 0.500000 +v -0.275888 1.161611 0.500000 +v -0.312500 1.250000 0.500000 +v -0.275888 1.338388 0.500000 +v -0.187500 1.374999 0.500000 +v -0.099111 1.338388 0.500000 +v -0.062500 1.250000 0.500000 +v -0.099111 1.161611 0.500000 +v -0.500000 1.161612 -0.099111 +v -0.500000 1.250000 -0.062500 +v -0.500000 1.338388 -0.099111 +v -0.500000 1.375000 -0.187500 +v -0.500000 1.338388 -0.275888 +v -0.500000 1.250000 -0.312500 +v -0.500000 1.161612 -0.275888 +v -0.500000 1.125000 -0.187500 +v -0.875000 1.161612 -0.099111 +v -0.875000 1.250000 -0.062500 +v -0.875000 1.338388 -0.099111 +v -0.875000 1.375000 -0.187500 +v -0.875000 1.338388 -0.275888 +v -0.875000 1.250000 -0.312500 +v -0.875000 1.161612 -0.275888 +v -0.900888 1.150888 -0.099111 +v -0.963388 1.213388 -0.062500 +v -1.025888 1.275888 -0.099111 +v -1.051777 1.301776 -0.187500 +v -1.025888 1.275888 -0.275888 +v -0.963388 1.213388 -0.312500 +v -0.900888 1.150888 -0.275888 +v -0.911612 1.125000 -0.099111 +v -1.000000 1.125000 -0.062500 +v -1.088388 1.125000 -0.099111 +v -1.125000 1.125000 -0.187500 +v -1.088388 1.125000 -0.275888 +v -1.000000 1.125000 -0.312500 +v -0.911612 1.125000 -0.275888 +v -0.875000 1.125000 -0.187500 +v -0.911612 0.250000 -0.099111 +v -1.000000 0.250000 -0.062500 +v -1.088388 0.250000 -0.099111 +v -1.125000 0.250000 -0.187500 +v -1.088388 0.250000 -0.275888 +v -1.000000 0.250000 -0.312500 +v -0.911612 0.250000 -0.275888 +v -0.875000 0.250000 -0.187500 +v 0.500000 1.161612 -0.275889 +v 0.500000 1.250000 -0.312500 +v 0.500000 1.338388 -0.275889 +v 0.500000 1.375000 -0.187500 +v 0.500000 1.338388 -0.099112 +v 0.500000 1.250000 -0.062500 +v 0.500000 1.161612 -0.099112 +v 0.500000 1.125000 -0.187500 +v 0.875000 1.161612 -0.275889 +v 0.875000 1.250000 -0.312500 +v 0.875000 1.338388 -0.275889 +v 0.875000 1.375000 -0.187500 +v 0.875000 1.338388 -0.099112 +v 0.875000 1.250000 -0.062500 +v 0.875000 1.161612 -0.099112 +v 0.900888 1.150888 -0.275889 +v 0.963388 1.213388 -0.312500 +v 1.025888 1.275888 -0.275889 +v 1.051777 1.301776 -0.187500 +v 1.025888 1.275888 -0.099112 +v 0.963388 1.213388 -0.062500 +v 0.900888 1.150888 -0.099112 +v 0.911612 1.125000 -0.275889 +v 1.000000 1.125000 -0.312500 +v 1.088388 1.125000 -0.275889 +v 1.125000 1.125000 -0.187500 +v 1.088388 1.125000 -0.099112 +v 1.000000 1.125000 -0.062500 +v 0.911612 1.125000 -0.099112 +v 0.875000 1.125000 -0.187500 +v 0.911612 0.250000 -0.275889 +v 1.000000 0.250000 -0.312500 +v 1.088388 0.250000 -0.275889 +v 1.125000 0.250000 -0.187500 +v 1.088388 0.250000 -0.099112 +v 1.000000 0.250000 -0.062500 +v 0.911612 0.250000 -0.099112 +v 0.875000 0.250000 -0.187500 +v -0.875000 0.250000 0.187500 +v -0.911612 0.250000 0.099112 +v -1.000000 0.250000 0.062500 +v -1.088388 0.250000 0.099112 +v -1.125000 0.250000 0.187500 +v -1.088388 0.250000 0.275889 +v -1.000000 0.250000 0.312500 +v -0.911612 0.250000 0.275889 +v -0.875000 1.125000 0.187500 +v -0.911612 1.125000 0.099112 +v -1.000000 1.125000 0.062500 +v -1.088388 1.125000 0.099112 +v -1.125000 1.125000 0.187500 +v -1.088388 1.125000 0.275889 +v -1.000000 1.125000 0.312500 +v -0.911612 1.125000 0.275889 +v -0.900888 1.150888 0.099112 +v -0.963388 1.213388 0.062500 +v -1.025888 1.275888 0.099112 +v -1.051777 1.301776 0.187500 +v -1.025888 1.275888 0.275889 +v -0.963388 1.213388 0.312500 +v -0.900888 1.150888 0.275889 +v -0.875000 1.161612 0.099112 +v -0.875000 1.250000 0.062500 +v -0.875000 1.338388 0.099112 +v -0.875000 1.375000 0.187500 +v -0.875000 1.338388 0.275889 +v -0.875000 1.250000 0.312500 +v -0.875000 1.161612 0.275889 +v -0.500000 1.125000 0.187500 +v -0.500000 1.161612 0.099112 +v -0.500000 1.250000 0.062500 +v -0.500000 1.338388 0.099112 +v -0.500000 1.375000 0.187500 +v -0.500000 1.338388 0.275889 +v -0.500000 1.250000 0.312500 +v -0.500000 1.161612 0.275889 +v 0.875000 0.250000 0.187500 +v 0.911612 0.250000 0.275888 +v 1.000000 0.250000 0.312500 +v 1.088388 0.250000 0.275888 +v 1.125000 0.250000 0.187500 +v 1.088388 0.250000 0.099111 +v 1.000000 0.250000 0.062500 +v 0.911612 0.250000 0.099111 +v 0.875000 1.125000 0.187500 +v 0.911612 1.125000 0.275888 +v 1.000000 1.125000 0.312500 +v 1.088388 1.125000 0.275888 +v 1.125000 1.125000 0.187500 +v 1.088388 1.125000 0.099111 +v 1.000000 1.125000 0.062500 +v 0.911612 1.125000 0.099111 +v 0.900888 1.150888 0.275888 +v 0.963388 1.213388 0.312500 +v 1.025888 1.275888 0.275888 +v 1.051777 1.301776 0.187500 +v 1.025888 1.275888 0.099111 +v 0.963388 1.213388 0.062500 +v 0.900888 1.150888 0.099111 +v 0.875000 1.161612 0.275888 +v 0.875000 1.250000 0.312500 +v 0.875000 1.338388 0.275888 +v 0.875000 1.375000 0.187500 +v 0.875000 1.338388 0.099111 +v 0.875000 1.250000 0.062500 +v 0.875000 1.161612 0.099111 +v 0.500000 1.125000 0.187500 +v 0.500000 1.161612 0.275888 +v 0.500000 1.250000 0.312500 +v 0.500000 1.338388 0.275888 +v 0.500000 1.375000 0.187500 +v 0.500000 1.338388 0.099111 +v 0.500000 1.250000 0.062500 +v 0.500000 1.161612 0.099111 +vt 0.021277 1.000000 +vt 0.148936 0.500000 +vt 0.148936 1.000000 +vt 0.021277 1.000000 +vt 0.148936 0.500000 +vt 0.148936 1.000000 +vt 0.021277 1.000000 +vt 0.148936 0.500000 +vt 0.148936 1.000000 +vt 0.021277 1.000000 +vt 0.148936 0.500000 +vt 0.148936 1.000000 +vt 0.148936 0.000000 +vt -0.000000 0.437500 +vt 0.510638 -0.000000 +vt 0.382979 0.125000 +vt 0.382979 -0.000000 +vt 0.510638 -0.000000 +vt 0.382979 0.125000 +vt 0.382979 -0.000000 +vt 0.510638 -0.000000 +vt 0.382979 0.125000 +vt 0.382979 -0.000000 +vt 0.510638 -0.000000 +vt 0.382979 0.125000 +vt 0.382979 -0.000000 +vt 0.510638 0.125000 +vt 0.382979 0.625000 +vt 0.510638 0.125000 +vt 0.382979 0.625000 +vt 0.510638 0.125000 +vt 0.382979 0.625000 +vt 0.510638 0.125000 +vt 0.382979 0.625000 +vt 0.680851 -0.000000 +vt 0.212766 -0.000000 +vt 0.680851 -0.000000 +vt 0.212766 -0.000000 +vt 0.680851 -0.000000 +vt 0.212766 -0.000000 +vt 0.680851 -0.000000 +vt 0.212766 -0.000000 +vt 0.191489 0.250000 +vt 0.170213 -0.000000 +vt 0.191489 -0.000000 +vt 0.191489 0.250000 +vt 0.170213 -0.000000 +vt 0.191489 -0.000000 +vt 0.191489 0.250000 +vt 0.170213 -0.000000 +vt 0.191489 -0.000000 +vt 0.191489 0.250000 +vt 0.170213 -0.000000 +vt 0.191489 -0.000000 +vt 0.212766 0.250000 +vt 0.191489 0.312500 +vt 0.212766 0.250000 +vt 0.191489 0.312500 +vt 0.212766 0.250000 +vt 0.191489 0.312500 +vt 0.212766 0.250000 +vt 0.191489 0.312500 +vt 0.829787 0.000000 +vt 0.702128 0.500000 +vt 0.702128 -0.000000 +vt 0.702128 -0.000000 +vt 0.680851 0.500000 +vt 0.680851 0.000000 +vt 0.829787 0.000000 +vt 0.702128 0.500000 +vt 0.702128 -0.000000 +vt 0.680851 0.500000 +vt 0.680851 0.000000 +vt 0.702128 -0.000000 +vt 0.680851 0.500000 +vt 0.680851 0.000000 +vt 0.829787 0.000000 +vt 0.702128 0.500000 +vt 0.680851 0.500000 +vt 0.680851 0.000000 +vt 0.829787 0.000000 +vt 0.702128 0.500000 +vt 0.808511 0.625000 +vt 0.723404 0.750000 +vt 0.723404 0.625000 +vt 0.808511 0.625000 +vt 0.829787 0.500000 +vt 0.829787 0.500000 +vt 0.808511 0.625000 +vt 0.829787 0.500000 +vt 0.808511 0.625000 +vt 0.829787 0.500000 +vt 0.691489 0.625000 +vt 0.691489 0.625000 +vt 0.691489 0.625000 +vt 0.691489 0.625000 +vt 0.808511 1.000000 +vt 0.723404 1.000000 +vt 0.723404 0.750000 +vt 0.723404 0.625000 +vt 0.723404 0.750000 +vt 0.723404 0.625000 +vt 0.723404 0.750000 +vt 0.723404 0.625000 +vt 0.021277 0.500000 +vt 0.021277 0.500000 +vt 0.021277 0.500000 +vt 0.021277 0.500000 +vt -0.000000 0.000000 +vt 0.021277 0.000000 +vt -0.000000 0.062500 +vt 0.170213 0.000000 +vt 0.170213 0.062500 +vt 0.170213 0.437500 +vt 0.170213 0.500000 +vt -0.000000 0.500000 +vt 0.510638 0.625000 +vt 0.510638 0.625000 +vt 0.510638 0.625000 +vt 0.510638 0.625000 +vt 0.680851 0.250000 +vt 0.680851 0.250000 +vt 0.680851 0.250000 +vt 0.680851 0.250000 +vt 0.170213 0.250000 +vt 0.170213 0.250000 +vt 0.170213 0.250000 +vt 0.170213 0.250000 +vt 0.808511 0.750000 +vt 0.808511 0.750000 +vt 0.808511 0.750000 +vt 0.808511 0.750000 +vt 0.872340 0.625000 +vt 0.893617 0.812500 +vt 0.872340 0.812500 +vt 0.914894 0.625000 +vt 0.936170 0.812500 +vt 0.914894 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 0.957447 0.625000 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.851064 0.812500 +vt 0.893617 0.625000 +vt 0.936170 0.625000 +vt 0.851064 0.531250 +vt 0.851064 0.562500 +vt 0.829787 0.531250 +vt 0.851064 0.500000 +vt 0.978723 0.531250 +vt 1.000000 0.531250 +vt 0.978723 0.562500 +vt 0.978723 0.500000 +vt 0.872340 0.531250 +vt 0.893617 0.593750 +vt 0.872340 0.562500 +vt 0.914894 0.531250 +vt 0.936170 0.593750 +vt 0.957447 0.531250 +vt 0.957447 0.562500 +vt 0.893617 0.531250 +vt 0.936170 0.531250 +vt 0.936170 0.468750 +vt 0.914894 0.437500 +vt 0.957447 0.500000 +vt 0.893617 0.468750 +vt 0.872340 0.500000 +vt 0.872340 -0.000000 +vt 0.851064 0.437500 +vt 0.851064 -0.000000 +vt 0.914894 -0.000000 +vt 0.893617 0.437500 +vt 0.893617 -0.000000 +vt 0.957447 -0.000000 +vt 0.936170 0.437500 +vt 0.936170 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.978723 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 0.872340 0.437500 +vt 0.957447 0.437500 +vt 0.893617 0.625000 +vt 0.872340 0.812500 +vt 0.872340 0.625000 +vt 0.914894 0.625000 +vt 0.936170 0.812500 +vt 0.914894 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 0.957447 0.625000 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.851064 0.812500 +vt 0.893617 0.812500 +vt 0.936170 0.625000 +vt 0.851064 0.531250 +vt 0.851064 0.562500 +vt 0.829787 0.531250 +vt 0.851064 0.500000 +vt 0.978723 0.531250 +vt 1.000000 0.531250 +vt 0.978723 0.562500 +vt 0.978723 0.500000 +vt 0.872340 0.531250 +vt 0.893617 0.593750 +vt 0.872340 0.562500 +vt 0.914894 0.531250 +vt 0.936170 0.593750 +vt 0.957447 0.531250 +vt 0.957447 0.562500 +vt 0.893617 0.531250 +vt 0.936170 0.531250 +vt 0.914894 0.437500 +vt 0.957447 0.500000 +vt 0.893617 0.468750 +vt 0.936170 0.468750 +vt 0.872340 0.500000 +vt 0.872340 -0.000000 +vt 0.851064 0.437500 +vt 0.851064 -0.000000 +vt 0.914894 -0.000000 +vt 0.893617 0.437500 +vt 0.893617 -0.000000 +vt 0.957447 -0.000000 +vt 0.936170 0.437500 +vt 0.936170 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.978723 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 0.872340 0.437500 +vt 0.957447 0.437500 +vt 0.978723 -0.000000 +vt 0.957447 0.437500 +vt 0.957447 -0.000000 +vt 0.936170 -0.000000 +vt 0.914894 0.437500 +vt 0.914894 -0.000000 +vt 0.893617 -0.000000 +vt 0.872340 0.437500 +vt 0.872340 -0.000000 +vt 0.851064 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.936170 0.437500 +vt 0.893617 0.437500 +vt 0.851064 0.437500 +vt 0.872340 0.500000 +vt 0.893617 0.531250 +vt 0.872340 0.531250 +vt 0.957447 0.500000 +vt 0.936170 0.531250 +vt 0.936170 0.468750 +vt 0.893617 0.468750 +vt 0.851064 0.500000 +vt 0.851064 0.531250 +vt 0.978723 0.531250 +vt 0.957447 0.531250 +vt 0.914894 0.531250 +vt 0.957447 0.562500 +vt 0.936170 0.593750 +vt 0.893617 0.593750 +vt 0.851064 0.562500 +vt 0.978723 0.562500 +vt 0.914894 0.625000 +vt 0.872340 0.562500 +vt 0.978723 0.500000 +vt 1.000000 0.531250 +vt 0.829787 0.531250 +vt 0.957447 0.625000 +vt 0.936170 0.812500 +vt 0.936170 0.625000 +vt 0.893617 0.812500 +vt 0.893617 0.625000 +vt 0.872340 0.625000 +vt 0.851064 0.812500 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.914894 0.812500 +vt 0.872340 0.812500 +vt 0.978723 -0.000000 +vt 0.957447 0.437500 +vt 0.957447 -0.000000 +vt 0.936170 -0.000000 +vt 0.914894 0.437500 +vt 0.914894 -0.000000 +vt 0.893617 -0.000000 +vt 0.872340 0.437500 +vt 0.872340 -0.000000 +vt 0.851064 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.936170 0.437500 +vt 0.893617 0.437500 +vt 0.851064 0.437500 +vt 0.872340 0.500000 +vt 0.893617 0.531250 +vt 0.872340 0.531250 +vt 0.957447 0.500000 +vt 0.936170 0.531250 +vt 0.936170 0.468750 +vt 0.893617 0.468750 +vt 0.851064 0.531250 +vt 0.851064 0.500000 +vt 0.978723 0.500000 +vt 0.957447 0.531250 +vt 0.914894 0.531250 +vt 0.957447 0.562500 +vt 0.936170 0.593750 +vt 0.914894 0.625000 +vt 0.893617 0.593750 +vt 0.851064 0.562500 +vt 0.978723 0.562500 +vt 0.872340 0.562500 +vt 1.000000 0.531250 +vt 0.978723 0.531250 +vt 0.829787 0.531250 +vt 0.936170 0.625000 +vt 0.957447 0.812500 +vt 0.936170 0.812500 +vt 0.893617 0.625000 +vt 0.914894 0.812500 +vt 0.893617 0.812500 +vt 0.851064 0.625000 +vt 0.872340 0.812500 +vt 0.851064 0.812500 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.978723 0.625000 +vt 0.957447 0.625000 +vt 1.000000 0.812500 +vt 0.978723 0.812500 +vt 0.872340 0.625000 +vt 0.872340 0.625000 +vt 0.893617 0.812500 +vt 0.872340 0.812500 +vt 0.914894 0.625000 +vt 0.936170 0.812500 +vt 0.914894 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 0.957447 0.625000 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.851064 0.812500 +vt 0.893617 0.625000 +vt 0.936170 0.625000 +vt 0.851064 0.531250 +vt 0.851064 0.562500 +vt 0.829787 0.531250 +vt 0.851064 0.500000 +vt 0.978723 0.531250 +vt 1.000000 0.531250 +vt 0.978723 0.562500 +vt 0.978723 0.500000 +vt 0.893617 0.531250 +vt 0.872340 0.562500 +vt 0.872340 0.531250 +vt 0.914894 0.531250 +vt 0.936170 0.593750 +vt 0.957447 0.531250 +vt 0.957447 0.562500 +vt 0.893617 0.593750 +vt 0.936170 0.531250 +vt 0.936170 0.468750 +vt 0.914894 0.437500 +vt 0.957447 0.500000 +vt 0.893617 0.468750 +vt 0.872340 0.500000 +vt 0.872340 -0.000000 +vt 0.851064 0.437500 +vt 0.851064 -0.000000 +vt 0.914894 -0.000000 +vt 0.893617 0.437500 +vt 0.893617 -0.000000 +vt 0.957447 -0.000000 +vt 0.936170 0.437500 +vt 0.936170 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.978723 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 0.872340 0.437500 +vt 0.957447 0.437500 +vt 0.893617 0.625000 +vt 0.872340 0.812500 +vt 0.872340 0.625000 +vt 0.914894 0.625000 +vt 0.936170 0.812500 +vt 0.914894 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 0.957447 0.625000 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.851064 0.812500 +vt 0.893617 0.812500 +vt 0.936170 0.625000 +vt 0.851064 0.531250 +vt 0.851064 0.562500 +vt 0.829787 0.531250 +vt 0.851064 0.500000 +vt 0.978723 0.531250 +vt 1.000000 0.531250 +vt 0.978723 0.562500 +vt 0.978723 0.500000 +vt 0.872340 0.531250 +vt 0.893617 0.593750 +vt 0.872340 0.562500 +vt 0.936170 0.531250 +vt 0.914894 0.531250 +vt 0.957447 0.531250 +vt 0.957447 0.562500 +vt 0.893617 0.531250 +vt 0.936170 0.593750 +vt 0.936170 0.468750 +vt 0.914894 0.437500 +vt 0.957447 0.500000 +vt 0.893617 0.468750 +vt 0.872340 0.500000 +vt 0.872340 -0.000000 +vt 0.851064 0.437500 +vt 0.851064 -0.000000 +vt 0.914894 -0.000000 +vt 0.893617 0.437500 +vt 0.893617 -0.000000 +vt 0.957447 -0.000000 +vt 0.936170 0.437500 +vt 0.936170 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.978723 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 0.872340 0.437500 +vt 0.957447 0.437500 +vt 0.978723 -0.000000 +vt 0.957447 0.437500 +vt 0.957447 -0.000000 +vt 0.936170 -0.000000 +vt 0.914894 0.437500 +vt 0.914894 -0.000000 +vt 0.893617 -0.000000 +vt 0.872340 0.437500 +vt 0.872340 -0.000000 +vt 0.851064 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.936170 0.437500 +vt 0.893617 0.437500 +vt 0.851064 0.437500 +vt 0.872340 0.500000 +vt 0.893617 0.531250 +vt 0.872340 0.531250 +vt 0.957447 0.500000 +vt 0.936170 0.531250 +vt 0.936170 0.468750 +vt 0.893617 0.468750 +vt 0.851064 0.500000 +vt 0.851064 0.531250 +vt 0.978723 0.500000 +vt 0.957447 0.531250 +vt 0.914894 0.531250 +vt 0.957447 0.562500 +vt 0.936170 0.593750 +vt 0.893617 0.593750 +vt 0.851064 0.562500 +vt 0.978723 0.562500 +vt 0.914894 0.625000 +vt 0.872340 0.562500 +vt 1.000000 0.531250 +vt 0.978723 0.531250 +vt 0.829787 0.531250 +vt 0.957447 0.625000 +vt 0.936170 0.812500 +vt 0.936170 0.625000 +vt 0.893617 0.625000 +vt 0.914894 0.812500 +vt 0.893617 0.812500 +vt 0.872340 0.625000 +vt 0.851064 0.812500 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.872340 0.812500 +vt 0.978723 -0.000000 +vt 0.957447 0.437500 +vt 0.957447 -0.000000 +vt 0.936170 -0.000000 +vt 0.914894 0.437500 +vt 0.914894 -0.000000 +vt 0.893617 -0.000000 +vt 0.872340 0.437500 +vt 0.872340 -0.000000 +vt 0.851064 -0.000000 +vt 0.829787 0.437500 +vt 0.829787 -0.000000 +vt 1.000000 -0.000000 +vt 0.978723 0.437500 +vt 0.936170 0.437500 +vt 0.893617 0.437500 +vt 0.851064 0.437500 +vt 0.872340 0.500000 +vt 0.893617 0.531250 +vt 0.872340 0.531250 +vt 0.957447 0.500000 +vt 0.936170 0.531250 +vt 0.936170 0.468750 +vt 0.893617 0.468750 +vt 0.851064 0.500000 +vt 0.851064 0.531250 +vt 0.978723 0.531250 +vt 0.957447 0.531250 +vt 0.914894 0.531250 +vt 0.957447 0.562500 +vt 0.936170 0.593750 +vt 0.893617 0.593750 +vt 0.851064 0.562500 +vt 0.978723 0.562500 +vt 0.914894 0.625000 +vt 0.872340 0.562500 +vt 0.978723 0.500000 +vt 1.000000 0.531250 +vt 0.829787 0.531250 +vt 0.957447 0.625000 +vt 0.936170 0.812500 +vt 0.936170 0.625000 +vt 0.893617 0.812500 +vt 0.893617 0.625000 +vt 0.872340 0.625000 +vt 0.851064 0.812500 +vt 0.851064 0.625000 +vt 0.829787 0.812500 +vt 0.829787 0.625000 +vt 0.978723 0.625000 +vt 0.957447 0.812500 +vt 1.000000 0.625000 +vt 0.978723 0.812500 +vt 0.914894 0.812500 +vt 0.872340 0.812500 +vt 1.000000 0.812500 +vt 1.000000 0.437500 +vt 1.000000 0.812500 +vt 1.000000 0.437500 +vt 1.000000 0.437500 +vt 1.000000 0.812500 +vt 1.000000 0.437500 +vt 1.000000 0.625000 +vt 1.000000 0.812500 +vt 1.000000 0.437500 +vt 1.000000 0.812500 +vt 1.000000 0.437500 +vt 1.000000 0.437500 +vt 1.000000 0.812500 +vt 1.000000 0.437500 +vt 1.000000 0.812500 +vn 0.0000 -1.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.2425 0.9701 0.0000 +vn 0.0000 0.9701 0.2425 +vn 0.2425 0.9701 0.0000 +vn 0.0000 0.9701 -0.2425 +vn 0.0000 1.0000 0.0000 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -0.7071 0.0000 0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.7071 0.7071 0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.7071 0.7071 0.0000 +vn -0.4851 0.7276 -0.4851 +vn -0.4851 0.7276 0.4851 +vn 0.4851 0.7276 0.4851 +vn 0.4851 0.7276 -0.4851 +vn 0.9987 0.0473 -0.0196 +vn 0.0000 0.9824 -0.1866 +vn 0.0000 -0.7071 0.7071 +vn -0.7071 -0.7071 0.0000 +vn -0.7263 -0.6737 0.1363 +vn -0.9987 0.0473 -0.0196 +vn 0.7263 -0.6737 0.1363 +vn 0.7071 -0.7071 0.0000 +vn 0.6794 0.7194 -0.1447 +vn -0.6794 0.7194 -0.1447 +vn 0.7573 -0.4617 0.4617 +vn 0.7263 -0.1363 0.6737 +vn -0.7573 -0.4617 0.4617 +vn -0.7263 -0.1363 0.6737 +vn 0.9955 0.0670 -0.0670 +vn -0.9955 0.0670 -0.0670 +vn 0.6630 0.5293 -0.5293 +vn -0.6630 0.5293 -0.5293 +vn -0.6794 0.1447 -0.7194 +vn 0.0000 0.1866 -0.9824 +vn -0.9987 0.0196 -0.0473 +vn 0.6794 0.1447 -0.7194 +vn 0.9987 0.0196 -0.0473 +vn -0.6794 0.7194 0.1447 +vn -0.9987 0.0473 0.0196 +vn 0.0000 0.9824 0.1866 +vn 0.0000 -0.7071 -0.7071 +vn 0.7263 -0.6737 -0.1363 +vn 0.9987 0.0473 0.0196 +vn -0.7263 -0.6737 -0.1363 +vn 0.6794 0.7194 0.1447 +vn -0.7573 -0.4617 -0.4617 +vn -0.7263 -0.1363 -0.6737 +vn 0.7573 -0.4617 -0.4617 +vn 0.7263 -0.1363 -0.6737 +vn -0.9955 0.0670 0.0670 +vn 0.9955 0.0670 0.0670 +vn -0.6630 0.5293 0.5293 +vn 0.6630 0.5293 0.5293 +vn 0.0000 0.1866 0.9824 +vn 0.9987 0.0196 0.0473 +vn -0.6794 0.1447 0.7194 +vn 0.6794 0.1447 0.7194 +vn -0.9987 0.0196 0.0473 +vn -0.0196 0.0473 -0.9987 +vn -0.1866 0.9824 0.0000 +vn 0.1363 -0.6737 0.7263 +vn -0.0196 0.0473 0.9987 +vn 0.1363 -0.6737 -0.7263 +vn -0.1447 0.7194 -0.6794 +vn -0.1447 0.7194 0.6794 +vn 0.4617 -0.4617 -0.7573 +vn 0.6737 -0.1363 -0.7263 +vn 0.4617 -0.4617 0.7573 +vn 0.6737 -0.1363 0.7263 +vn -0.5293 0.5293 -0.6630 +vn -0.0670 0.0670 -0.9955 +vn -0.0670 0.0670 0.9955 +vn -0.5293 0.5293 0.6630 +vn -0.7194 0.1447 0.6794 +vn -0.9824 0.1866 0.0000 +vn -0.0473 0.0196 0.9987 +vn -0.7194 0.1447 -0.6794 +vn -0.0473 0.0196 -0.9987 +vn 0.1447 0.7194 0.6794 +vn 0.0196 0.0473 0.9987 +vn 0.1866 0.9824 0.0000 +vn -0.1363 -0.6737 -0.7263 +vn 0.0196 0.0473 -0.9987 +vn -0.1363 -0.6737 0.7263 +vn 0.1447 0.7194 -0.6794 +vn -0.4617 -0.4617 0.7573 +vn -0.6737 -0.1363 0.7263 +vn -0.4617 -0.4617 -0.7573 +vn -0.6737 -0.1363 -0.7263 +vn 0.0670 0.0670 0.9955 +vn 0.5293 0.5293 -0.6630 +vn 0.0670 0.0670 -0.9955 +vn 0.5293 0.5293 0.6630 +vn 0.7194 0.1447 -0.6794 +vn 0.9824 0.1866 0.0000 +vn 0.0473 0.0196 -0.9987 +vn 0.7194 0.1447 0.6794 +vn 0.0473 0.0196 0.9987 +s off +f 5/1/1 3/2/1 6/3/1 +f 11/4/1 2/5/1 9/6/1 +f 8/7/1 13/8/1 7/9/1 +f 10/10/1 16/11/1 12/12/1 +f 1/13/1 16/11/1 3/14/1 +f 9/15/2 27/16/2 11/17/2 +f 6/18/3 21/19/3 5/20/3 +f 12/21/4 26/22/4 10/23/4 +f 7/24/5 24/25/5 8/26/5 +f 25/27/6 35/28/6 27/16/6 +f 22/29/7 29/30/7 21/19/7 +f 28/31/8 34/32/8 26/22/8 +f 23/33/9 32/34/9 24/25/9 +f 16/35/5 28/31/5 12/21/5 +f 24/25/4 14/36/4 8/26/4 +f 13/37/2 23/33/2 7/24/2 +f 27/16/5 1/38/5 11/17/5 +f 2/39/3 25/27/3 9/15/3 +f 21/19/2 4/40/2 5/20/2 +f 3/41/4 22/29/4 6/18/4 +f 26/22/3 15/42/3 10/23/3 +f 40/43/4 16/44/4 20/45/4 +f 14/36/5 40/43/5 20/45/5 +f 39/46/5 13/47/5 19/48/5 +f 1/38/2 39/46/2 19/48/2 +f 37/49/2 2/50/2 17/51/2 +f 4/40/3 37/49/3 17/51/3 +f 38/52/3 3/53/3 18/54/3 +f 15/42/4 38/52/4 18/54/4 +f 38/52/10 34/55/10 30/56/10 +f 40/43/10 32/57/10 36/58/10 +f 39/46/10 35/59/10 31/60/10 +f 37/49/10 29/61/10 33/62/10 +f 36/63/4 46/64/4 34/65/4 +f 35/66/11 43/67/11 31/68/11 +f 31/69/5 44/70/5 32/71/5 +f 34/65/12 42/72/12 30/73/12 +f 29/74/13 45/75/13 33/76/13 +f 33/77/2 47/78/2 35/66/2 +f 32/71/14 48/79/14 36/80/14 +f 30/81/3 41/82/3 29/74/3 +f 52/83/4 55/84/4 50/85/4 +f 50/86/15 41/82/15 42/87/15 +f 52/83/16 46/64/16 48/88/16 +f 51/89/17 44/70/17 43/90/17 +f 49/91/18 47/78/18 45/92/18 +f 47/78/19 51/93/19 43/67/19 +f 41/82/20 49/94/20 45/75/20 +f 46/64/21 50/95/21 42/72/21 +f 44/70/22 52/96/22 48/79/22 +f 55/84/10 53/97/10 54/98/10 +f 49/91/2 53/99/2 51/100/2 +f 51/89/5 56/101/5 52/102/5 +f 50/86/3 54/103/3 49/104/3 +f 5/1/1 4/105/1 3/2/1 +f 11/4/1 1/106/1 2/5/1 +f 8/7/1 14/107/1 13/8/1 +f 10/10/1 15/108/1 16/11/1 +f 17/109/1 2/110/1 4/111/1 +f 2/110/1 1/13/1 4/111/1 +f 1/13/1 19/112/1 13/113/1 +f 14/114/1 20/115/1 16/11/1 +f 1/13/1 13/113/1 14/114/1 +f 15/108/1 18/116/1 3/14/1 +f 3/14/1 4/111/1 1/13/1 +f 1/13/1 14/114/1 16/11/1 +f 16/11/1 15/108/1 3/14/1 +f 9/15/2 25/27/2 27/16/2 +f 6/18/3 22/29/3 21/19/3 +f 12/21/4 28/31/4 26/22/4 +f 7/24/5 23/33/5 24/25/5 +f 25/27/6 33/117/6 35/28/6 +f 22/29/7 30/118/7 29/30/7 +f 28/31/8 36/119/8 34/32/8 +f 23/33/9 31/120/9 32/34/9 +f 16/35/5 36/121/5 28/31/5 +f 24/25/4 32/57/4 14/36/4 +f 13/37/2 31/122/2 23/33/2 +f 27/16/5 35/59/5 1/38/5 +f 2/39/3 33/123/3 25/27/3 +f 21/19/2 29/61/2 4/40/2 +f 3/41/4 30/124/4 22/29/4 +f 26/22/3 34/55/3 15/42/3 +f 40/43/4 36/125/4 16/44/4 +f 14/36/5 32/57/5 40/43/5 +f 39/46/5 31/126/5 13/47/5 +f 1/38/2 35/59/2 39/46/2 +f 37/49/2 33/127/2 2/50/2 +f 4/40/3 29/61/3 37/49/3 +f 38/52/3 30/128/3 3/53/3 +f 15/42/4 34/55/4 38/52/4 +f 36/63/4 48/88/4 46/64/4 +f 35/66/11 47/78/11 43/67/11 +f 31/69/5 43/90/5 44/70/5 +f 34/65/12 46/64/12 42/72/12 +f 29/74/13 41/82/13 45/75/13 +f 33/77/2 45/92/2 47/78/2 +f 32/71/14 44/70/14 48/79/14 +f 30/81/3 42/87/3 41/82/3 +f 52/83/4 56/129/4 55/84/4 +f 50/86/15 49/104/15 41/82/15 +f 52/83/16 50/85/16 46/64/16 +f 51/89/17 52/102/17 44/70/17 +f 49/91/18 51/100/18 47/78/18 +f 55/84/10 56/129/10 53/97/10 +f 49/91/2 54/130/2 53/99/2 +f 51/89/5 53/131/5 56/101/5 +f 50/86/3 55/132/3 54/103/3 +s 1 +f 70/133/23 61/134/16 62/135/4 +f 68/136/24 59/137/18 60/138/10 +f 86/139/25 57/140/26 65/141/27 +f 65/141/27 58/142/2 66/143/28 +f 71/144/29 64/145/1 86/146/25 +f 70/133/23 63/147/30 71/144/29 +f 68/136/24 61/134/16 69/148/31 +f 67/149/32 58/142/2 59/137/18 +f 78/150/33 71/151/29 86/152/25 +f 85/153/34 78/150/33 86/152/25 +f 72/154/35 86/155/25 65/156/27 +f 79/157/36 86/155/25 72/154/35 +f 77/158/37 69/159/31 70/160/23 +f 75/161/17 67/162/32 68/136/24 +f 73/163/38 65/156/27 66/164/28 +f 77/158/37 71/151/29 78/150/33 +f 75/161/17 69/159/31 76/165/39 +f 74/166/40 66/164/28 67/162/32 +f 81/167/41 75/161/17 82/168/42 +f 80/169/43 72/154/35 73/163/38 +f 85/153/34 77/158/37 78/150/33 +f 82/168/42 76/165/39 83/170/44 +f 80/169/43 74/166/40 81/167/41 +f 84/171/45 76/165/39 77/158/37 +f 92/172/4 85/173/34 93/174/12 +f 90/175/5 83/176/44 91/177/14 +f 88/178/2 81/179/41 89/180/11 +f 94/181/3 79/182/36 87/183/13 +f 93/174/12 86/184/25 94/185/3 +f 91/177/14 84/186/45 92/172/4 +f 89/180/11 82/168/42 90/175/5 +f 87/183/13 80/187/43 88/178/2 +f 107/188/46 100/189/2 108/190/47 +f 106/191/48 97/192/16 98/193/10 +f 124/194/49 95/195/30 103/196/50 +f 103/196/50 96/197/4 104/198/51 +f 109/199/52 102/200/1 124/201/49 +f 108/190/47 101/202/26 109/199/52 +f 107/188/46 98/193/10 99/203/18 +f 104/198/51 97/192/16 105/204/53 +f 116/205/54 109/206/52 124/207/49 +f 123/208/55 116/205/54 124/207/49 +f 110/209/56 124/210/49 103/211/50 +f 117/212/57 124/210/49 110/209/56 +f 115/213/58 107/214/46 108/215/47 +f 113/216/15 105/217/53 106/191/48 +f 111/218/59 103/211/50 104/219/51 +f 115/213/58 109/206/52 116/205/54 +f 113/216/15 107/214/46 114/220/60 +f 112/221/61 104/219/51 105/217/53 +f 120/222/62 112/221/61 113/216/15 +f 117/212/57 111/218/59 118/223/63 +f 123/208/55 115/213/58 116/205/54 +f 120/222/62 114/220/60 121/224/64 +f 119/225/65 111/218/59 112/221/61 +f 122/226/66 114/220/60 115/213/58 +f 130/227/2 123/228/55 131/229/11 +f 128/230/3 121/231/64 129/232/13 +f 126/233/4 119/234/65 127/235/12 +f 132/236/5 117/237/57 125/238/14 +f 131/229/11 124/239/49 132/240/5 +f 129/232/13 122/241/66 130/227/2 +f 127/235/12 120/222/62 128/230/3 +f 125/238/14 118/242/63 126/233/4 +f 140/243/13 147/244/43 139/245/2 +f 138/246/11 145/247/42 137/248/5 +f 136/249/14 143/250/45 135/251/4 +f 134/252/12 141/253/25 133/254/3 +f 133/255/3 148/256/36 140/243/13 +f 139/245/2 146/257/41 138/246/11 +f 137/248/5 144/258/44 136/249/14 +f 135/251/4 142/259/34 134/252/12 +f 143/260/45 151/261/39 150/262/37 +f 147/263/43 153/264/40 146/265/41 +f 145/247/42 151/261/39 144/266/44 +f 142/267/34 150/262/37 149/268/33 +f 147/263/43 155/269/35 154/270/38 +f 146/265/41 152/271/17 145/247/42 +f 153/264/40 161/272/28 160/273/32 +f 152/271/17 158/274/31 151/261/39 +f 150/262/37 156/275/29 149/268/33 +f 154/270/38 162/276/27 161/272/28 +f 152/271/17 160/273/32 159/277/24 +f 150/262/37 158/274/31 157/278/23 +f 148/279/36 141/280/25 155/269/35 +f 155/269/35 141/280/25 162/276/27 +f 142/267/34 149/268/33 141/281/25 +f 149/268/33 156/275/29 141/281/25 +f 161/282/28 168/283/18 160/284/32 +f 159/277/24 166/285/16 158/286/31 +f 157/287/23 164/288/30 156/289/29 +f 156/289/29 163/290/1 141/291/25 +f 162/292/27 169/293/2 161/282/28 +f 141/294/25 170/295/26 162/292/27 +f 160/284/32 167/296/10 159/277/24 +f 158/286/31 165/297/4 157/287/23 +f 178/298/14 185/299/63 177/300/4 +f 176/301/12 183/302/62 175/303/3 +f 174/304/13 181/305/66 173/306/2 +f 172/307/11 179/308/49 171/309/5 +f 171/310/5 186/311/57 178/298/14 +f 177/300/4 184/312/65 176/301/12 +f 175/303/3 182/313/64 174/304/13 +f 173/306/2 180/314/55 172/307/11 +f 181/315/66 189/316/60 188/317/58 +f 185/318/63 191/319/61 184/320/65 +f 183/302/62 189/316/60 182/321/64 +f 181/315/66 187/322/54 180/323/55 +f 186/324/57 192/325/59 185/318/63 +f 184/320/65 190/326/15 183/302/62 +f 191/319/61 199/327/51 198/328/53 +f 189/316/60 197/329/48 196/330/46 +f 188/317/58 194/331/52 187/322/54 +f 192/325/59 200/332/50 199/327/51 +f 190/326/15 198/328/53 197/329/48 +f 189/316/60 195/333/47 188/317/58 +f 186/324/57 179/334/49 193/335/56 +f 193/335/56 179/334/49 200/332/50 +f 180/323/55 187/322/54 179/336/49 +f 187/322/54 194/331/52 179/336/49 +f 198/337/53 207/338/4 206/339/16 +f 196/340/46 205/341/10 204/342/18 +f 194/343/52 203/344/2 202/345/26 +f 194/343/52 201/346/1 179/347/49 +f 200/348/50 207/338/4 199/349/51 +f 200/348/50 201/350/1 208/351/30 +f 198/337/53 205/341/10 197/329/48 +f 196/340/46 203/344/2 195/352/47 +f 222/353/67 213/354/17 214/355/5 +f 220/356/68 211/357/15 212/358/10 +f 238/359/30 209/360/25 217/361/69 +f 217/361/69 210/362/3 218/363/70 +f 223/364/71 216/365/1 238/366/30 +f 222/353/67 215/367/49 223/364/71 +f 221/368/72 212/358/10 213/354/17 +f 219/369/73 210/362/3 211/357/15 +f 230/370/74 223/371/71 238/372/30 +f 237/373/75 230/370/74 238/372/30 +f 224/374/76 238/375/30 217/376/69 +f 231/377/77 238/375/30 224/374/76 +f 228/378/78 222/379/67 229/380/79 +f 227/381/18 219/382/73 220/356/68 +f 225/383/80 217/376/69 218/384/70 +f 229/380/79 223/371/71 230/370/74 +f 227/381/18 221/385/72 228/378/78 +f 226/386/81 218/384/70 219/382/73 +f 233/387/82 227/381/18 234/388/83 +f 231/377/77 225/383/80 232/389/84 +f 237/373/75 229/380/79 230/370/74 +f 234/388/83 228/378/78 235/390/85 +f 232/389/84 226/386/81 233/387/82 +f 236/391/86 228/378/78 229/380/79 +f 244/392/5 237/393/75 245/394/14 +f 242/395/2 235/396/85 243/397/11 +f 240/398/3 233/399/82 241/400/13 +f 246/401/4 231/402/77 239/403/12 +f 245/394/14 238/404/30 246/405/4 +f 243/397/11 236/406/86 244/392/5 +f 241/400/13 234/388/83 242/395/2 +f 239/403/12 232/407/84 240/398/3 +f 259/408/87 252/409/3 260/410/88 +f 258/411/89 249/412/17 250/413/10 +f 276/414/26 247/415/49 255/416/90 +f 255/416/90 248/417/5 256/418/91 +f 261/419/92 254/420/1 276/421/26 +f 260/410/88 253/422/25 261/419/92 +f 259/408/87 250/413/10 251/423/15 +f 256/418/91 249/412/17 257/424/93 +f 268/425/94 261/426/92 276/427/26 +f 275/428/95 268/425/94 276/427/26 +f 262/429/96 276/430/26 255/431/90 +f 269/432/97 276/430/26 262/429/96 +f 267/433/98 259/434/87 260/435/88 +f 264/436/99 258/411/89 265/437/16 +f 263/438/100 255/431/90 256/439/91 +f 267/433/98 261/426/92 268/425/94 +f 266/440/101 258/411/89 259/434/87 +f 264/436/99 256/439/91 257/441/93 +f 271/442/102 265/437/16 272/443/103 +f 270/444/104 262/429/96 263/438/100 +f 275/428/95 267/433/98 268/425/94 +f 272/443/103 266/440/101 273/445/105 +f 270/444/104 264/436/99 271/442/102 +f 274/446/106 266/440/101 267/433/98 +f 282/447/3 275/448/95 283/449/13 +f 280/450/4 273/451/105 281/452/12 +f 278/453/5 271/454/102 279/455/14 +f 284/456/2 269/457/97 277/458/11 +f 283/449/13 276/459/26 284/460/2 +f 281/452/12 274/461/106 282/447/3 +f 279/455/14 272/443/103 280/450/4 +f 277/458/11 270/462/104 278/453/5 +f 292/463/12 299/464/84 291/465/3 +f 290/466/13 297/467/83 289/468/2 +f 288/469/11 295/470/86 287/471/5 +f 286/472/14 293/473/30 285/474/4 +f 285/475/4 300/476/77 292/463/12 +f 291/465/3 298/477/82 290/466/13 +f 289/468/2 296/478/85 288/469/11 +f 287/471/5 294/479/75 286/472/14 +f 295/480/86 303/481/78 302/482/79 +f 299/483/84 305/484/81 298/485/82 +f 297/467/83 303/481/78 296/486/85 +f 294/487/75 302/482/79 301/488/74 +f 300/489/77 306/490/80 299/483/84 +f 297/467/83 305/484/81 304/491/18 +f 305/484/81 313/492/70 312/493/73 +f 304/491/18 310/494/72 303/481/78 +f 302/482/79 308/495/71 301/488/74 +f 306/490/80 314/496/69 313/492/70 +f 305/484/81 311/497/68 304/491/18 +f 303/481/78 309/498/67 302/482/79 +f 300/489/77 293/499/30 307/500/76 +f 307/500/76 293/499/30 314/496/69 +f 294/487/75 301/488/74 293/501/30 +f 301/488/74 308/495/71 293/501/30 +f 313/502/70 320/503/15 312/504/73 +f 310/505/72 319/506/10 318/507/17 +f 309/508/67 316/509/49 308/510/71 +f 308/510/71 315/511/1 293/512/30 +f 314/513/69 321/514/3 313/502/70 +f 293/515/30 322/516/25 314/513/69 +f 311/497/68 320/503/15 319/506/10 +f 310/505/72 317/517/5 309/508/67 +f 330/518/11 337/519/104 329/520/5 +f 328/521/14 335/522/103 327/523/4 +f 326/524/12 333/525/106 325/526/3 +f 324/527/13 331/528/26 323/529/2 +f 323/530/2 338/531/97 330/518/11 +f 329/520/5 336/532/102 328/521/14 +f 327/523/4 334/533/105 326/524/12 +f 325/526/3 332/534/95 324/527/13 +f 333/535/106 341/536/101 340/537/98 +f 337/538/104 343/539/99 336/540/102 +f 335/522/103 341/536/101 334/541/105 +f 332/542/95 340/537/98 339/543/94 +f 337/538/104 345/544/96 344/545/100 +f 336/540/102 342/546/16 335/522/103 +f 343/539/99 351/547/91 350/548/93 +f 342/546/16 348/549/87 341/536/101 +f 340/537/98 346/550/92 339/543/94 +f 344/545/100 352/551/90 351/547/91 +f 343/539/99 349/552/89 342/546/16 +f 340/537/98 348/549/87 347/553/88 +f 338/554/97 331/555/26 345/544/96 +f 345/544/96 331/555/26 352/551/90 +f 332/542/95 339/543/94 331/556/26 +f 339/543/94 346/550/92 331/556/26 +f 351/557/91 358/558/17 350/559/93 +f 349/552/89 356/560/15 348/561/87 +f 347/562/88 354/563/25 346/564/92 +f 346/564/92 353/565/1 331/566/26 +f 352/567/90 359/568/5 351/557/91 +f 331/569/26 360/570/49 352/567/90 +f 349/552/89 358/558/17 357/571/10 +f 348/561/87 355/572/3 347/562/88 +f 70/133/23 69/148/31 61/134/16 +f 68/136/24 67/149/32 59/137/18 +f 86/139/25 64/573/1 57/140/26 +f 65/141/27 57/140/26 58/142/2 +f 71/144/29 63/147/30 64/145/1 +f 70/133/23 62/135/4 63/147/30 +f 68/136/24 60/138/10 61/134/16 +f 67/149/32 66/143/28 58/142/2 +f 77/158/37 76/165/39 69/159/31 +f 75/161/17 74/166/40 67/162/32 +f 73/163/38 72/154/35 65/156/27 +f 77/158/37 70/160/23 71/151/29 +f 75/161/17 68/136/24 69/159/31 +f 74/166/40 73/163/38 66/164/28 +f 81/167/41 74/166/40 75/161/17 +f 80/169/43 79/157/36 72/154/35 +f 85/153/34 84/171/45 77/158/37 +f 82/168/42 75/161/17 76/165/39 +f 80/169/43 73/163/38 74/166/40 +f 84/171/45 83/170/44 76/165/39 +f 92/172/4 84/186/45 85/173/34 +f 90/175/5 82/168/42 83/176/44 +f 88/178/2 80/187/43 81/179/41 +f 94/181/3 86/574/25 79/182/36 +f 93/174/12 85/173/34 86/184/25 +f 91/177/14 83/176/44 84/186/45 +f 89/180/11 81/179/41 82/168/42 +f 87/183/13 79/182/36 80/187/43 +f 107/188/46 99/203/18 100/189/2 +f 106/191/48 105/204/53 97/192/16 +f 124/194/49 102/575/1 95/195/30 +f 103/196/50 95/195/30 96/197/4 +f 109/199/52 101/202/26 102/200/1 +f 108/190/47 100/189/2 101/202/26 +f 107/188/46 106/191/48 98/193/10 +f 104/198/51 96/197/4 97/192/16 +f 115/213/58 114/220/60 107/214/46 +f 113/216/15 112/221/61 105/217/53 +f 111/218/59 110/209/56 103/211/50 +f 115/213/58 108/215/47 109/206/52 +f 113/216/15 106/191/48 107/214/46 +f 112/221/61 111/218/59 104/219/51 +f 120/222/62 119/225/65 112/221/61 +f 117/212/57 110/209/56 111/218/59 +f 123/208/55 122/226/66 115/213/58 +f 120/222/62 113/216/15 114/220/60 +f 119/225/65 118/223/63 111/218/59 +f 122/226/66 121/224/64 114/220/60 +f 130/227/2 122/241/66 123/228/55 +f 128/230/3 120/222/62 121/231/64 +f 126/233/4 118/242/63 119/234/65 +f 132/236/5 124/576/49 117/237/57 +f 131/229/11 123/228/55 124/239/49 +f 129/232/13 121/231/64 122/241/66 +f 127/235/12 119/234/65 120/222/62 +f 125/238/14 117/237/57 118/242/63 +f 140/243/13 148/256/36 147/244/43 +f 138/246/11 146/257/41 145/247/42 +f 136/249/14 144/258/44 143/250/45 +f 134/252/12 142/259/34 141/253/25 +f 133/255/3 141/577/25 148/256/36 +f 139/245/2 147/244/43 146/257/41 +f 137/248/5 145/247/42 144/258/44 +f 135/251/4 143/250/45 142/259/34 +f 143/260/45 144/266/44 151/261/39 +f 147/263/43 154/270/38 153/264/40 +f 145/247/42 152/271/17 151/261/39 +f 142/267/34 143/260/45 150/262/37 +f 147/263/43 148/279/36 155/269/35 +f 146/265/41 153/264/40 152/271/17 +f 153/264/40 154/270/38 161/272/28 +f 152/271/17 159/277/24 158/274/31 +f 150/262/37 157/278/23 156/275/29 +f 154/270/38 155/269/35 162/276/27 +f 152/271/17 153/264/40 160/273/32 +f 150/262/37 151/261/39 158/274/31 +f 161/282/28 169/293/2 168/283/18 +f 159/277/24 167/296/10 166/285/16 +f 157/287/23 165/297/4 164/288/30 +f 156/289/29 164/288/30 163/290/1 +f 162/292/27 170/295/26 169/293/2 +f 141/294/25 163/578/1 170/295/26 +f 160/284/32 168/283/18 167/296/10 +f 158/286/31 166/285/16 165/297/4 +f 178/298/14 186/311/57 185/299/63 +f 176/301/12 184/312/65 183/302/62 +f 174/304/13 182/313/64 181/305/66 +f 172/307/11 180/314/55 179/308/49 +f 171/310/5 179/579/49 186/311/57 +f 177/300/4 185/299/63 184/312/65 +f 175/303/3 183/302/62 182/313/64 +f 173/306/2 181/305/66 180/314/55 +f 181/315/66 182/321/64 189/316/60 +f 185/318/63 192/325/59 191/319/61 +f 183/302/62 190/326/15 189/316/60 +f 181/315/66 188/317/58 187/322/54 +f 186/324/57 193/335/56 192/325/59 +f 184/320/65 191/319/61 190/326/15 +f 191/319/61 192/325/59 199/327/51 +f 189/316/60 190/326/15 197/329/48 +f 188/317/58 195/333/47 194/331/52 +f 192/325/59 193/335/56 200/332/50 +f 190/326/15 191/319/61 198/328/53 +f 189/316/60 196/330/46 195/333/47 +f 198/337/53 199/349/51 207/338/4 +f 196/340/46 197/329/48 205/341/10 +f 194/343/52 195/352/47 203/344/2 +f 194/343/52 202/345/26 201/346/1 +f 200/348/50 208/351/30 207/338/4 +f 200/348/50 179/580/49 201/350/1 +f 198/337/53 206/339/16 205/341/10 +f 196/340/46 204/342/18 203/344/2 +f 222/353/67 221/368/72 213/354/17 +f 220/356/68 219/369/73 211/357/15 +f 238/359/30 216/581/1 209/360/25 +f 217/361/69 209/360/25 210/362/3 +f 223/364/71 215/367/49 216/365/1 +f 222/353/67 214/355/5 215/367/49 +f 221/368/72 220/356/68 212/358/10 +f 219/369/73 218/363/70 210/362/3 +f 228/378/78 221/385/72 222/379/67 +f 227/381/18 226/386/81 219/382/73 +f 225/383/80 224/374/76 217/376/69 +f 229/380/79 222/379/67 223/371/71 +f 227/381/18 220/356/68 221/385/72 +f 226/386/81 225/383/80 218/384/70 +f 233/387/82 226/386/81 227/381/18 +f 231/377/77 224/374/76 225/383/80 +f 237/373/75 236/391/86 229/380/79 +f 234/388/83 227/381/18 228/378/78 +f 232/389/84 225/383/80 226/386/81 +f 236/391/86 235/390/85 228/378/78 +f 244/392/5 236/406/86 237/393/75 +f 242/395/2 234/388/83 235/396/85 +f 240/398/3 232/407/84 233/399/82 +f 246/401/4 238/582/30 231/402/77 +f 245/394/14 237/393/75 238/404/30 +f 243/397/11 235/396/85 236/406/86 +f 241/400/13 233/399/82 234/388/83 +f 239/403/12 231/402/77 232/407/84 +f 259/408/87 251/423/15 252/409/3 +f 258/411/89 257/424/93 249/412/17 +f 276/414/26 254/583/1 247/415/49 +f 255/416/90 247/415/49 248/417/5 +f 261/419/92 253/422/25 254/420/1 +f 260/410/88 252/409/3 253/422/25 +f 259/408/87 258/411/89 250/413/10 +f 256/418/91 248/417/5 249/412/17 +f 267/433/98 266/440/101 259/434/87 +f 264/436/99 257/441/93 258/411/89 +f 263/438/100 262/429/96 255/431/90 +f 267/433/98 260/435/88 261/426/92 +f 266/440/101 265/437/16 258/411/89 +f 264/436/99 263/438/100 256/439/91 +f 271/442/102 264/436/99 265/437/16 +f 270/444/104 269/432/97 262/429/96 +f 275/428/95 274/446/106 267/433/98 +f 272/443/103 265/437/16 266/440/101 +f 270/444/104 263/438/100 264/436/99 +f 274/446/106 273/445/105 266/440/101 +f 282/447/3 274/461/106 275/448/95 +f 280/450/4 272/443/103 273/451/105 +f 278/453/5 270/462/104 271/454/102 +f 284/456/2 276/584/26 269/457/97 +f 283/449/13 275/448/95 276/459/26 +f 281/452/12 273/451/105 274/461/106 +f 279/455/14 271/454/102 272/443/103 +f 277/458/11 269/457/97 270/462/104 +f 292/463/12 300/476/77 299/464/84 +f 290/466/13 298/477/82 297/467/83 +f 288/469/11 296/478/85 295/470/86 +f 286/472/14 294/479/75 293/473/30 +f 285/475/4 293/585/30 300/476/77 +f 291/465/3 299/464/84 298/477/82 +f 289/468/2 297/467/83 296/478/85 +f 287/471/5 295/470/86 294/479/75 +f 295/480/86 296/486/85 303/481/78 +f 299/483/84 306/490/80 305/484/81 +f 297/467/83 304/491/18 303/481/78 +f 294/487/75 295/480/86 302/482/79 +f 300/489/77 307/500/76 306/490/80 +f 297/467/83 298/485/82 305/484/81 +f 305/484/81 306/490/80 313/492/70 +f 304/491/18 311/497/68 310/494/72 +f 302/482/79 309/498/67 308/495/71 +f 306/490/80 307/500/76 314/496/69 +f 305/484/81 312/493/73 311/497/68 +f 303/481/78 310/494/72 309/498/67 +f 313/502/70 321/514/3 320/503/15 +f 310/505/72 311/497/68 319/506/10 +f 309/508/67 317/517/5 316/509/49 +f 308/510/71 316/509/49 315/511/1 +f 314/513/69 322/516/25 321/514/3 +f 293/515/30 315/586/1 322/516/25 +f 311/497/68 312/504/73 320/503/15 +f 310/505/72 318/507/17 317/517/5 +f 330/518/11 338/531/97 337/519/104 +f 328/521/14 336/532/102 335/522/103 +f 326/524/12 334/533/105 333/525/106 +f 324/527/13 332/534/95 331/528/26 +f 323/530/2 331/587/26 338/531/97 +f 329/520/5 337/519/104 336/532/102 +f 327/523/4 335/522/103 334/533/105 +f 325/526/3 333/525/106 332/534/95 +f 333/535/106 334/541/105 341/536/101 +f 337/538/104 344/545/100 343/539/99 +f 335/522/103 342/546/16 341/536/101 +f 332/542/95 333/535/106 340/537/98 +f 337/538/104 338/554/97 345/544/96 +f 336/540/102 343/539/99 342/546/16 +f 343/539/99 344/545/100 351/547/91 +f 342/546/16 349/552/89 348/549/87 +f 340/537/98 347/553/88 346/550/92 +f 344/545/100 345/544/96 352/551/90 +f 343/539/99 350/548/93 349/552/89 +f 340/537/98 341/536/101 348/549/87 +f 351/557/91 359/568/5 358/558/17 +f 349/552/89 357/571/10 356/560/15 +f 347/562/88 355/572/3 354/563/25 +f 346/564/92 354/563/25 353/565/1 +f 352/567/90 360/570/49 359/568/5 +f 331/569/26 353/588/1 360/570/49 +f 349/552/89 350/559/93 358/558/17 +f 348/561/87 356/560/15 355/572/3 diff --git a/src/main/resources/assets/hbm/models/weapons/boltgun.obj b/src/main/resources/assets/hbm/models/weapons/boltgun.obj new file mode 100644 index 000000000..0d9de366c --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/boltgun.obj @@ -0,0 +1,2415 @@ +# Blender v2.79 (sub 0) OBJ File: 'boltgun.blend' +# www.blender.org +o Barrel +v 0.000000 2.250000 1.000000 +v -0.176777 2.176777 1.000000 +v -0.250000 2.000000 1.000000 +v -0.176777 1.823223 1.000000 +v 0.000000 1.750000 1.000000 +v 0.176777 1.823223 1.000000 +v 0.250000 2.000000 1.000000 +v 0.176777 2.176777 1.000000 +v 0.000000 2.250000 3.500000 +v -0.176777 2.176777 3.500000 +v -0.250000 2.000000 3.500000 +v -0.176777 1.823223 3.500000 +v 0.000000 1.750000 3.500000 +v 0.176777 1.823223 3.500000 +v 0.250000 2.000000 3.500000 +v 0.176777 2.176777 3.500000 +v 0.000000 2.375000 3.500000 +v -0.265165 2.265165 3.500000 +v -0.375000 2.000000 3.500000 +v -0.265165 1.734835 3.500000 +v 0.000000 1.625000 3.500000 +v 0.265165 1.734835 3.500000 +v 0.375000 2.000000 3.500000 +v 0.265165 2.265165 3.500000 +v 0.000000 2.500000 4.500000 +v -0.353553 2.353553 4.500000 +v -0.500000 2.000000 4.500000 +v -0.353553 1.646447 4.500000 +v 0.000000 1.500000 4.500000 +v 0.353553 1.646447 4.500000 +v 0.500000 2.000000 4.500000 +v 0.353553 2.353553 4.500000 +v 0.000000 2.250000 4.500000 +v -0.176777 2.176777 4.500000 +v -0.250000 2.000000 4.500000 +v -0.176777 1.823223 4.500000 +v 0.000000 1.750000 4.500000 +v 0.176777 1.823223 4.500000 +v 0.250000 2.000000 4.500000 +v 0.176777 2.176777 4.500000 +v 0.000000 2.250000 3.750000 +v -0.176777 2.176777 3.750000 +v -0.250000 2.000000 3.750000 +v -0.176777 1.823223 3.750000 +v 0.000000 1.750000 3.750000 +v 0.176777 1.823223 3.750000 +v 0.250000 2.000000 3.750000 +v 0.176777 2.176777 3.750000 +vt 0.517647 0.250000 +vt 0.511765 0.229167 +vt 0.517647 0.229167 +vt 0.517647 0.479167 +vt 0.511765 0.500000 +vt 0.511765 0.479167 +vt 0.517647 0.416667 +vt 0.511765 0.395833 +vt 0.517647 0.395833 +vt 0.517647 0.270833 +vt 0.511765 0.291667 +vt 0.511765 0.270833 +vt 0.517647 0.208333 +vt 0.511765 0.187500 +vt 0.517647 0.187500 +vt 0.517647 0.437500 +vt 0.511765 0.458333 +vt 0.511765 0.437500 +vt 0.517647 0.375000 +vt 0.511765 0.354167 +vt 0.517647 0.354167 +vt 0.517647 0.333333 +vt 0.511765 0.312500 +vt 0.517647 0.312500 +vt 0.464706 0.291667 +vt 0.452941 0.270833 +vt 0.464706 0.250000 +vt 0.464706 0.208333 +vt 0.452941 0.187500 +vt 0.464706 0.166667 +vt 0.464706 0.458333 +vt 0.452941 0.437500 +vt 0.464706 0.416667 +vt 0.464706 0.375000 +vt 0.452941 0.354167 +vt 0.464706 0.333333 +vt 0.452941 0.333333 +vt 0.452941 0.312500 +vt 0.452941 0.250000 +vt 0.452941 0.229167 +vt 0.452941 0.500000 +vt 0.452941 0.479167 +vt 0.452941 0.416667 +vt 0.452941 0.395833 +vt 0.514165 0.571002 +vt 0.505882 0.583153 +vt 0.505882 0.500181 +vt 0.511765 0.250000 +vt 0.517647 0.500000 +vt 0.511765 0.416667 +vt 0.517647 0.291667 +vt 0.511765 0.208333 +vt 0.517647 0.458333 +vt 0.511765 0.375000 +vt 0.511765 0.333333 +vt 0.452941 0.291667 +vt 0.452941 0.208333 +vt 0.452941 0.458333 +vt 0.452941 0.375000 +vt 0.464706 0.500000 +vt 0.497599 0.571002 +vt 0.494169 0.541667 +vt 0.497599 0.512332 +vt 0.514165 0.512332 +vt 0.517596 0.541667 +vt 0.517647 0.145833 +vt 0.400000 0.125000 +vt 0.517647 0.125000 +vt 0.517647 0.104167 +vt 0.400000 0.083333 +vt 0.517647 0.083333 +vt 0.400000 0.062500 +vt 0.517647 0.062500 +vt 0.517647 0.041667 +vt 0.400000 0.020833 +vt 0.517647 0.020833 +vt 0.517647 0.166667 +vt 0.400000 0.145833 +vt 0.400000 0.104167 +vt 0.400000 0.041667 +vt 0.400000 -0.000000 +vt 0.517647 -0.000000 +vt 0.417647 0.395833 +vt 0.417647 0.270833 +vt 0.417647 0.187500 +vt 0.417647 0.437500 +vt 0.417647 0.354167 +vt 0.417647 0.312500 +vt 0.417647 0.229167 +vt 0.417647 0.479167 +vt 0.400000 0.166667 +vt 0.417647 0.416667 +vt 0.417647 0.291667 +vt 0.417647 0.208333 +vt 0.417647 0.458333 +vt 0.417647 0.375000 +vt 0.417647 0.333333 +vt 0.417647 0.250000 +vt 0.417647 0.500000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn -0.7071 -0.7071 0.0000 +vn -1.0000 0.0000 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.7071 0.7071 0.0000 +vn 1.0000 0.0000 0.0000 +vn 0.7071 -0.7071 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 0.9923 -0.1240 +vn 0.7016 0.7016 -0.1240 +vn 0.9923 0.0000 -0.1240 +vn 0.7016 -0.7016 -0.1240 +vn -0.0000 -0.9923 -0.1240 +vn -0.7016 -0.7016 -0.1240 +vn -0.9923 0.0000 -0.1240 +vn -0.7016 0.7016 -0.1240 +s off +f 15/1/1 22/2/1 14/3/1 +f 12/4/1 21/5/1 20/6/1 +f 11/7/1 18/8/1 10/9/1 +f 15/10/1 24/11/1 23/12/1 +f 14/13/1 21/14/1 13/15/1 +f 11/16/1 20/17/1 19/18/1 +f 10/19/1 17/20/1 9/21/1 +f 9/22/1 24/23/1 16/24/1 +f 32/25/2 39/26/2 31/27/2 +f 30/28/2 37/29/2 29/30/2 +f 28/31/2 35/32/2 27/33/2 +f 26/34/2 33/35/2 25/36/2 +f 32/25/2 33/37/2 40/38/2 +f 30/28/2 39/39/2 38/40/2 +f 28/31/2 37/41/2 36/42/2 +f 26/34/2 35/43/2 34/44/2 +f 48/45/2 41/46/2 45/47/2 +f 15/1/1 23/48/1 22/2/1 +f 12/4/1 13/49/1 21/5/1 +f 11/7/1 19/50/1 18/8/1 +f 15/10/1 16/51/1 24/11/1 +f 14/13/1 22/52/1 21/14/1 +f 11/16/1 12/53/1 20/17/1 +f 10/19/1 18/54/1 17/20/1 +f 9/22/1 17/55/1 24/23/1 +f 32/25/2 40/56/2 39/26/2 +f 30/28/2 38/57/2 37/29/2 +f 28/31/2 36/58/2 35/32/2 +f 26/34/2 34/59/2 33/35/2 +f 32/25/2 25/36/2 33/37/2 +f 30/28/2 31/27/2 39/39/2 +f 28/31/2 29/60/2 37/41/2 +f 26/34/2 27/33/2 35/43/2 +f 41/46/2 42/61/2 45/47/2 +f 42/61/2 43/62/2 45/47/2 +f 43/62/2 44/63/2 45/47/2 +f 45/47/2 46/64/2 47/65/2 +f 47/65/2 48/45/2 45/47/2 +s 1 +f 4/66/3 11/67/4 3/68/4 +f 2/69/5 9/70/6 1/71/6 +f 1/71/6 16/72/7 8/73/7 +f 7/74/8 14/75/9 6/76/9 +f 5/77/10 12/78/3 4/66/3 +f 3/68/4 10/79/5 2/69/5 +f 8/73/7 15/80/8 7/74/8 +f 6/76/9 13/81/10 5/82/10 +f 17/55/11 32/25/12 24/23/12 +f 23/12/13 32/25/12 31/27/13 +f 23/48/13 30/28/14 22/2/14 +f 22/52/14 29/30/15 21/14/15 +f 21/5/15 28/31/16 20/6/16 +f 19/18/17 28/31/16 27/33/17 +f 19/50/17 26/34/18 18/8/18 +f 17/20/11 26/34/18 25/36/11 +f 35/43/8 42/83/9 34/44/9 +f 40/56/3 47/84/4 39/26/4 +f 38/57/5 45/85/6 37/29/6 +f 36/58/7 43/86/8 35/32/8 +f 34/59/9 41/87/10 33/35/10 +f 33/37/10 48/88/3 40/38/3 +f 39/39/4 46/89/5 38/40/5 +f 37/41/6 44/90/7 36/42/7 +f 4/66/3 12/78/3 11/67/4 +f 2/69/5 10/79/5 9/70/6 +f 1/71/6 9/70/6 16/72/7 +f 7/74/8 15/80/8 14/75/9 +f 5/77/10 13/91/10 12/78/3 +f 3/68/4 11/67/4 10/79/5 +f 8/73/7 16/72/7 15/80/8 +f 6/76/9 14/75/9 13/81/10 +f 17/55/11 25/36/11 32/25/12 +f 23/12/13 24/11/12 32/25/12 +f 23/48/13 31/27/13 30/28/14 +f 22/52/14 30/28/14 29/30/15 +f 21/5/15 29/60/15 28/31/16 +f 19/18/17 20/17/16 28/31/16 +f 19/50/17 27/33/17 26/34/18 +f 17/20/11 18/54/18 26/34/18 +f 35/43/8 43/92/8 42/83/9 +f 40/56/3 48/93/3 47/84/4 +f 38/57/5 46/94/5 45/85/6 +f 36/58/7 44/95/7 43/86/8 +f 34/59/9 42/96/9 41/87/10 +f 33/37/10 41/97/10 48/88/3 +f 39/39/4 47/98/4 46/89/5 +f 37/41/6 45/99/6 44/90/7 +o Gun +v 0.000000 3.000000 0.000000 +v -0.382684 2.923880 0.000000 +v -0.707107 2.707107 0.000000 +v -0.923879 2.382684 0.000000 +v -1.000000 2.000000 -0.000000 +v -0.923879 1.617316 -0.000000 +v -0.707107 1.292893 -0.000000 +v -0.382684 1.076120 -0.000000 +v -0.000000 1.000000 0.000000 +v 0.382683 1.076120 -0.000000 +v 0.707107 1.292893 -0.000000 +v 0.923879 1.617316 -0.000000 +v 1.000000 2.000000 -0.000000 +v 0.923879 2.382684 0.000000 +v 0.707107 2.707107 0.000000 +v 0.382683 2.923880 0.000000 +v 0.000000 3.000000 -3.000000 +v -0.382684 2.923880 -3.000000 +v -0.707107 2.707107 -3.000000 +v -0.923879 2.382684 -3.000000 +v -1.000000 2.000000 -3.000000 +v -0.923879 1.617316 -3.000000 +v -0.707107 1.292893 -3.000000 +v -0.382684 1.076120 -3.000000 +v -0.000000 1.000000 -3.000000 +v 0.382683 1.076120 -3.000000 +v 0.707107 1.292893 -3.000000 +v 0.923879 1.617316 -3.000000 +v 1.000000 2.000000 -3.000000 +v 0.923879 2.382684 -3.000000 +v 0.707107 2.707107 -3.000000 +v 0.382683 2.923880 -3.000000 +v 0.000000 2.375000 1.000000 +v -0.143506 2.346455 1.000000 +v -0.265165 2.265165 1.000000 +v -0.346455 2.143506 1.000000 +v -0.375000 2.000000 1.000000 +v -0.346455 1.856494 1.000000 +v -0.265165 1.734835 1.000000 +v -0.143506 1.653545 1.000000 +v 0.000000 1.625000 1.000000 +v 0.143506 1.653545 1.000000 +v 0.265165 1.734835 1.000000 +v 0.346455 1.856494 1.000000 +v 0.375000 2.000000 1.000000 +v 0.346455 2.143506 1.000000 +v 0.265165 2.265165 1.000000 +v 0.143506 2.346455 1.000000 +v -0.250000 2.000000 3.000000 +v 0.250000 2.000000 3.000000 +v -0.250000 2.000000 1.000000 +v 0.250000 2.000000 1.000000 +v -0.250000 -3.000000 0.000000 +v -0.250000 -3.000000 2.000000 +v 0.250000 -3.000000 2.000000 +v 0.250000 -3.000000 0.000000 +v -0.375000 2.000000 2.750000 +v -0.250000 2.000000 2.750000 +v -0.375000 2.000000 2.250000 +v -0.250000 2.000000 2.250000 +v -0.375000 -2.000000 1.450000 +v -0.375000 -2.000000 1.950000 +v -0.250000 -2.000000 1.950000 +v -0.250000 -2.000000 1.450000 +v 0.000000 2.375000 2.250000 +v -0.265165 2.265165 2.250000 +v -0.265165 2.265165 2.750000 +v 0.000000 2.375000 2.750000 +v 0.000000 1.625000 2.250000 +v 0.265165 1.734835 2.250000 +v 0.375000 2.000000 2.250000 +v 0.265165 2.265165 2.250000 +v 0.000000 1.625000 2.750000 +v 0.265165 1.734835 2.750000 +v 0.375000 2.000000 2.750000 +v 0.265165 2.265165 2.750000 +v 0.000000 2.250000 2.250000 +v -0.176777 2.176777 2.250000 +v 0.176777 1.823223 2.750000 +v -0.176777 2.176777 2.750000 +v 0.000000 2.250000 2.750000 +v 0.176777 1.823223 2.250000 +v 0.250000 2.000000 2.250000 +v 0.176777 2.176777 2.250000 +v 0.250000 2.000000 2.750000 +v 0.176777 2.176777 2.750000 +v 0.000000 1.750000 2.750000 +v 0.000000 1.750000 2.250000 +v -0.375000 2.000000 1.750000 +v -0.250000 2.000000 1.750000 +v -0.375000 2.000000 1.250000 +v -0.250000 2.000000 1.250000 +v -0.375000 -2.000000 0.450000 +v -0.375000 -2.000000 0.950000 +v -0.250000 -2.000000 0.950000 +v -0.250000 -2.000000 0.450000 +v 0.000000 2.375000 1.250000 +v -0.265165 2.265165 1.250000 +v -0.265165 2.265165 1.750000 +v 0.000000 2.375000 1.750000 +v 0.000000 1.625000 1.250000 +v 0.265165 1.734835 1.250000 +v 0.375000 2.000000 1.250000 +v 0.265165 2.265165 1.250000 +v 0.000000 1.625000 1.750000 +v 0.265165 1.734835 1.750000 +v 0.375000 2.000000 1.750000 +v 0.265165 2.265165 1.750000 +v 0.000000 2.250000 1.250000 +v -0.176777 2.176777 1.250000 +v 0.176777 1.823223 1.750000 +v -0.176777 2.176777 1.750000 +v 0.000000 2.250000 1.750000 +v 0.176777 1.823223 1.250000 +v 0.250000 2.000000 1.250000 +v 0.176777 2.176777 1.250000 +v 0.250000 2.000000 1.750000 +v 0.176777 2.176777 1.750000 +v 0.000000 1.750000 1.750000 +v 0.000000 1.750000 1.250000 +v 0.000000 2.750000 -3.500000 +v -0.287013 2.692910 -3.500000 +v -0.530330 2.530330 -3.500000 +v -0.692910 2.287013 -3.500000 +v -0.750000 2.000000 -3.500000 +v -0.692910 1.712987 -3.500000 +v -0.530330 1.469670 -3.500000 +v -0.287013 1.307090 -3.500000 +v -0.000000 1.250000 -3.500000 +v 0.287012 1.307090 -3.500000 +v 0.530330 1.469670 -3.500000 +v 0.692909 1.712987 -3.500000 +v 0.750000 2.000000 -3.500000 +v 0.692909 2.287013 -3.500000 +v 0.530330 2.530330 -3.500000 +v 0.287012 2.692910 -3.500000 +v 0.707106 1.480393 -3.750000 +v 0.707106 1.667893 -3.500000 +v 0.972272 1.558058 -2.500000 +v 0.441941 1.558058 -3.500000 +v 1.082107 1.292893 -2.500000 +v 0.332107 1.292893 -3.500000 +v 0.972272 1.027728 -2.500000 +v 0.441941 1.027728 -3.500000 +v 0.707107 0.917893 -2.500000 +v 0.707107 0.917893 -3.500000 +v 0.441942 1.027728 -2.500000 +v 0.972272 1.027728 -3.500000 +v 0.332107 1.292893 -2.500000 +v 1.082106 1.292893 -3.500000 +v 0.707107 1.292893 -1.500000 +v 0.707107 1.667893 -2.500000 +v 0.972271 1.558058 -3.500000 +v 0.839689 1.425476 -3.750000 +v 0.574524 1.425476 -3.750000 +v 0.519607 1.292893 -3.750000 +v 0.574524 1.160311 -3.750000 +v 0.707107 1.105393 -3.750000 +v 0.839689 1.160311 -3.750000 +v 0.894606 1.292893 -3.750000 +v -0.519607 1.292893 -3.750000 +v -0.332107 1.292893 -3.500000 +v -0.441942 1.027728 -2.500000 +v -0.441942 1.558058 -3.500000 +v -0.707107 0.917893 -2.500000 +v -0.707107 1.667893 -3.500000 +v -0.972272 1.027728 -2.500000 +v -0.972272 1.558058 -3.500000 +v -1.082107 1.292893 -2.500000 +v -1.082107 1.292893 -3.500000 +v -0.972272 1.558058 -2.500000 +v -0.972272 1.027728 -3.500000 +v -0.707107 1.667893 -2.500000 +v -0.707107 0.917893 -3.500000 +v -0.707107 1.292893 -1.500000 +v -0.332107 1.292893 -2.500000 +v -0.441942 1.027728 -3.500000 +v -0.574525 1.160311 -3.750000 +v -0.574524 1.425476 -3.750000 +v -0.707107 1.480393 -3.750000 +v -0.839690 1.425476 -3.750000 +v -0.894607 1.292893 -3.750000 +v -0.839690 1.160311 -3.750000 +v -0.707107 1.105393 -3.750000 +v -0.707107 2.519607 -3.750000 +v -0.707107 2.332107 -3.500000 +v -0.972272 2.441942 -2.500000 +v -0.441942 2.441942 -3.500000 +v -1.082107 2.707107 -2.500000 +v -0.332107 2.707107 -3.500000 +v -0.972272 2.972272 -2.500000 +v -0.441942 2.972272 -3.500000 +v -0.707107 3.082108 -2.500000 +v -0.707107 3.082108 -3.500000 +v -0.441942 2.972272 -2.500000 +v -0.972272 2.972272 -3.500000 +v -0.332107 2.707107 -2.500000 +v -1.082107 2.707107 -3.500000 +v -0.707107 2.707107 -1.500000 +v -0.707107 2.332107 -2.500000 +v -0.972272 2.441942 -3.500000 +v -0.839689 2.574524 -3.750000 +v -0.574524 2.574524 -3.750000 +v -0.519607 2.707107 -3.750000 +v -0.574524 2.839689 -3.750000 +v -0.707107 2.894607 -3.750000 +v -0.839689 2.839689 -3.750000 +v -0.894607 2.707107 -3.750000 +v 0.519607 2.707107 -3.750000 +v 0.332107 2.707107 -3.500000 +v 0.441942 2.972272 -2.500000 +v 0.441942 2.441941 -3.500000 +v 0.707107 3.082107 -2.500000 +v 0.707107 2.332107 -3.500000 +v 0.972272 2.972272 -2.500000 +v 0.972272 2.441941 -3.500000 +v 1.082107 2.707107 -2.500000 +v 1.082107 2.707107 -3.500000 +v 0.972272 2.441942 -2.500000 +v 0.972272 2.972272 -3.500000 +v 0.707107 2.332107 -2.500000 +v 0.707107 3.082107 -3.500000 +v 0.707107 2.707107 -1.500000 +v 0.332107 2.707107 -2.500000 +v 0.441942 2.972272 -3.500000 +v 0.574524 2.839689 -3.750000 +v 0.574524 2.574524 -3.750000 +v 0.707107 2.519607 -3.750000 +v 0.839689 2.574524 -3.750000 +v 0.894607 2.707107 -3.750000 +v 0.839689 2.839689 -3.750000 +v 0.707107 2.894607 -3.750000 +v 0.250000 1.500000 2.650000 +v 0.250000 -2.500000 1.850000 +v 0.250000 1.500000 1.150000 +v 0.250000 -2.500000 0.350000 +v 0.250000 1.500000 1.775000 +v 0.250000 -2.500000 0.975000 +v 0.250000 1.500000 2.025000 +v 0.250000 -2.500000 1.225000 +v -0.125000 1.500000 2.650000 +v -0.125000 -2.500000 1.850000 +v -0.125000 -2.500000 0.350000 +v -0.125000 1.500000 1.150000 +v -0.125000 -2.500000 0.975000 +v -0.125000 1.500000 1.775000 +v -0.125000 1.500000 2.025000 +v -0.125000 -2.500000 1.225000 +v 0.000000 1.593750 2.525000 +v 0.066291 1.566291 2.525000 +v 0.000000 1.687500 1.025000 +v 0.000000 1.687500 2.400000 +v 0.132583 1.632583 1.025000 +v 0.132583 1.632582 2.400000 +v 0.187500 1.500000 1.025000 +v 0.187500 1.500000 2.400000 +v 0.132583 1.367418 1.025000 +v 0.132583 1.367417 2.400000 +v 0.000000 1.312500 1.025000 +v 0.000000 1.312500 2.400000 +v -0.132583 1.367418 1.025000 +v -0.132583 1.367417 2.400000 +v -0.187500 1.500000 1.025000 +v -0.187500 1.500000 2.400000 +v -0.132583 1.632583 1.025000 +v -0.132583 1.632582 2.400000 +v 0.093750 1.500000 2.525000 +v 0.066291 1.433709 2.525000 +v 0.000000 1.406250 2.525000 +v -0.066291 1.433709 2.525000 +v -0.093750 1.500000 2.525000 +v -0.066291 1.566291 2.525000 +v 0.000000 0.093750 2.225000 +v 0.066291 0.066291 2.225000 +v 0.000000 0.187500 0.725000 +v 0.000000 0.187500 2.100000 +v 0.132583 0.132583 0.725000 +v 0.132583 0.132582 2.100000 +v 0.187500 0.000000 0.725000 +v 0.187500 0.000000 2.100000 +v 0.132583 -0.132582 0.725000 +v 0.132583 -0.132583 2.100000 +v 0.000000 -0.187500 0.725000 +v 0.000000 -0.187500 2.100000 +v -0.132583 -0.132582 0.725000 +v -0.132583 -0.132583 2.100000 +v -0.187500 0.000000 0.725000 +v -0.187500 0.000000 2.100000 +v -0.132583 0.132583 0.725000 +v -0.132583 0.132582 2.100000 +v 0.093750 0.000000 2.225000 +v 0.066291 -0.066291 2.225000 +v 0.000000 -0.093750 2.225000 +v -0.066291 -0.066291 2.225000 +v -0.093750 0.000000 2.225000 +v -0.066291 0.066291 2.225000 +v 0.000000 0.593750 2.325000 +v 0.066291 0.566291 2.325000 +v 0.000000 0.687500 0.825000 +v 0.000000 0.687500 2.200000 +v 0.132583 0.632583 0.825000 +v 0.132583 0.632582 2.200000 +v 0.187500 0.500000 0.825000 +v 0.187500 0.500000 2.200000 +v 0.132583 0.367418 0.825000 +v 0.132583 0.367417 2.200000 +v 0.000000 0.312500 0.825000 +v 0.000000 0.312500 2.200000 +v -0.132583 0.367418 0.825000 +v -0.132583 0.367417 2.200000 +v -0.187500 0.500000 0.825000 +v -0.187500 0.500000 2.200000 +v -0.132583 0.632583 0.825000 +v -0.132583 0.632582 2.200000 +v 0.093750 0.500000 2.325000 +v 0.066291 0.433709 2.325000 +v 0.000000 0.406250 2.325000 +v -0.066291 0.433709 2.325000 +v -0.093750 0.500000 2.325000 +v -0.066291 0.566291 2.325000 +v -0.066291 1.066291 2.425000 +v -0.093750 1.000000 2.425000 +v -0.066291 0.933709 2.425000 +v 0.000000 0.906250 2.425000 +v 0.066291 0.933709 2.425000 +v 0.093750 1.000000 2.425000 +v -0.132583 1.132582 2.300000 +v -0.132583 1.132583 0.925000 +v -0.187500 1.000000 2.300000 +v -0.187500 1.000000 0.925000 +v -0.132583 0.867417 2.300000 +v -0.132583 0.867418 0.925000 +v 0.000000 0.812500 2.300000 +v 0.000000 0.812500 0.925000 +v 0.132583 0.867417 2.300000 +v 0.132583 0.867418 0.925000 +v 0.187500 1.000000 2.300000 +v 0.187500 1.000000 0.925000 +v 0.132583 1.132582 2.300000 +v 0.132583 1.132583 0.925000 +v 0.000000 1.187500 2.300000 +v 0.000000 1.187500 0.925000 +v 0.066291 1.066291 2.425000 +v 0.000000 1.093750 2.425000 +v 0.000000 -2.406250 1.725000 +v 0.066291 -2.433709 1.725000 +v 0.000000 -2.312500 0.225000 +v 0.000000 -2.312500 1.600000 +v 0.132583 -2.367417 0.225000 +v 0.132583 -2.367418 1.600000 +v 0.187500 -2.500000 0.225000 +v 0.187500 -2.500000 1.600000 +v 0.132583 -2.632582 0.225000 +v 0.132583 -2.632583 1.600000 +v 0.000000 -2.687500 0.225000 +v 0.000000 -2.687500 1.600000 +v -0.132583 -2.632582 0.225000 +v -0.132583 -2.632583 1.600000 +v -0.187500 -2.500000 0.225000 +v -0.187500 -2.500000 1.600000 +v -0.132583 -2.367417 0.225000 +v -0.132583 -2.367418 1.600000 +v 0.093750 -2.500000 1.725000 +v 0.066291 -2.566291 1.725000 +v 0.000000 -2.593750 1.725000 +v -0.066291 -2.566291 1.725000 +v -0.093750 -2.500000 1.725000 +v -0.066291 -2.433709 1.725000 +v -0.066291 -0.433709 2.125000 +v -0.093750 -0.500000 2.125000 +v -0.066291 -0.566291 2.125000 +v 0.000000 -0.593750 2.125000 +v 0.066291 -0.566291 2.125000 +v 0.093750 -0.500000 2.125000 +v -0.132583 -0.367418 2.000000 +v -0.132583 -0.367417 0.625000 +v -0.187500 -0.500000 2.000000 +v -0.187500 -0.500000 0.625000 +v -0.132583 -0.632583 2.000000 +v -0.132583 -0.632582 0.625000 +v 0.000000 -0.687500 2.000000 +v 0.000000 -0.687500 0.625000 +v 0.132583 -0.632583 2.000000 +v 0.132583 -0.632582 0.625000 +v 0.187500 -0.500000 2.000000 +v 0.187500 -0.500000 0.625000 +v 0.132583 -0.367418 2.000000 +v 0.132583 -0.367417 0.625000 +v 0.000000 -0.312500 2.000000 +v 0.000000 -0.312500 0.625000 +v 0.066291 -0.433709 2.125000 +v 0.000000 -0.406250 2.125000 +v 0.000000 -0.906250 2.025000 +v 0.066291 -0.933709 2.025000 +v 0.000000 -0.812500 0.525000 +v 0.000000 -0.812500 1.900000 +v 0.132583 -0.867417 0.525000 +v 0.132583 -0.867418 1.900000 +v 0.187500 -1.000000 0.525000 +v 0.187500 -1.000000 1.900000 +v 0.132583 -1.132582 0.525000 +v 0.132583 -1.132583 1.900000 +v 0.000000 -1.187500 0.525000 +v 0.000000 -1.187500 1.900000 +v -0.132583 -1.132582 0.525000 +v -0.132583 -1.132583 1.900000 +v -0.187500 -1.000000 0.525000 +v -0.187500 -1.000000 1.900000 +v -0.132583 -0.867417 0.525000 +v -0.132583 -0.867418 1.900000 +v 0.093750 -1.000000 2.025000 +v 0.066291 -1.066291 2.025000 +v 0.000000 -1.093750 2.025000 +v -0.066291 -1.066291 2.025000 +v -0.093750 -1.000000 2.025000 +v -0.066291 -0.933709 2.025000 +v -0.066291 -1.433709 1.925000 +v -0.093750 -1.500000 1.925000 +v -0.066291 -1.566291 1.925000 +v 0.000000 -1.593750 1.925000 +v 0.066291 -1.566291 1.925000 +v 0.093750 -1.500000 1.925000 +v -0.132583 -1.367418 1.800000 +v -0.132583 -1.367417 0.425000 +v -0.187500 -1.500000 1.800000 +v -0.187500 -1.500000 0.425000 +v -0.132583 -1.632583 1.800000 +v -0.132583 -1.632582 0.425000 +v 0.000000 -1.687500 1.800000 +v 0.000000 -1.687500 0.425000 +v 0.132583 -1.632583 1.800000 +v 0.132583 -1.632582 0.425000 +v 0.187500 -1.500000 1.800000 +v 0.187500 -1.500000 0.425000 +v 0.132583 -1.367418 1.800000 +v 0.132583 -1.367417 0.425000 +v 0.000000 -1.312500 1.800000 +v 0.000000 -1.312500 0.425000 +v 0.066291 -1.433709 1.925000 +v 0.000000 -1.406250 1.925000 +v -0.066291 -1.933709 1.825000 +v -0.093750 -2.000000 1.825000 +v -0.066291 -2.066291 1.825000 +v 0.000000 -2.093750 1.825000 +v 0.066291 -2.066291 1.825000 +v 0.093750 -2.000000 1.825000 +v -0.132583 -1.867418 1.700000 +v -0.132583 -1.867417 0.325000 +v -0.187500 -2.000000 1.700000 +v -0.187500 -2.000000 0.325000 +v -0.132583 -2.132583 1.700000 +v -0.132583 -2.132582 0.325000 +v 0.000000 -2.187500 1.700000 +v 0.000000 -2.187500 0.325000 +v 0.132583 -2.132583 1.700000 +v 0.132583 -2.132582 0.325000 +v 0.187500 -2.000000 1.700000 +v 0.187500 -2.000000 0.325000 +v 0.132583 -1.867418 1.700000 +v 0.132583 -1.867417 0.325000 +v 0.000000 -1.812500 1.700000 +v 0.000000 -1.812500 0.325000 +v 0.066291 -1.933709 1.825000 +v 0.000000 -1.906250 1.825000 +v -0.375000 1.125000 -1.250000 +v 0.375000 1.125000 -1.250000 +v -0.375000 1.125000 -2.250000 +v 0.375000 1.125000 -2.250000 +v -0.187500 1.125000 -1.000000 +v 0.187500 1.125000 -1.000000 +v -0.375000 -1.375000 -2.750000 +v -0.375000 -1.375000 -1.750000 +v 0.375000 -1.375000 -1.750000 +v 0.375000 -1.375000 -2.750000 +v -0.187500 -1.375000 -1.500000 +v 0.187500 -1.375000 -1.500000 +v -0.187500 1.125000 -0.875000 +v 0.187500 1.125000 -0.875000 +v -0.187500 0.875000 -0.875000 +v 0.187500 0.875000 -0.875000 +v -0.187500 1.125000 -0.625000 +v 0.187500 1.125000 -0.625000 +v -0.187500 0.875000 -0.625000 +v 0.187500 0.875000 -0.625000 +v -0.125000 0.875000 -0.687500 +v 0.125000 0.875000 -0.687500 +v -0.125000 0.875000 -0.812500 +v 0.125000 0.875000 -0.812500 +v -0.125000 -0.625000 -1.112500 +v -0.125000 -0.625000 -0.987500 +v 0.125000 -0.625000 -0.987500 +v 0.125000 -0.625000 -1.112500 +v -0.125000 -0.875000 -1.112500 +v -0.125000 -0.875000 -0.987500 +v 0.125000 -0.875000 -0.987500 +v 0.125000 -0.875000 -1.112500 +v -0.125000 -1.375000 -0.862500 +v -0.125000 -1.375000 -0.737500 +v 0.125000 -1.375000 -0.737500 +v 0.125000 -1.375000 -0.862500 +vt 0.752941 0.687653 +vt 0.770545 0.750000 +vt 0.752941 0.812347 +vt 0.341176 0.000000 +vt 0.247059 0.083333 +vt 0.247059 0.000000 +vt 0.300000 0.833333 +vt 0.288235 0.166667 +vt 0.300000 0.166667 +vt 0.129412 0.916667 +vt 0.223529 0.083333 +vt 0.223529 0.916667 +vt 0.341176 0.083333 +vt 0.364706 0.916667 +vt 0.341176 0.916667 +vt 0.247059 0.916667 +vt 0.370588 0.020833 +vt 0.394118 0.000000 +vt 0.394118 0.020833 +vt 0.394118 0.687500 +vt 0.400000 0.020833 +vt 0.400000 0.687500 +vt 0.364706 0.687500 +vt 0.370588 0.687500 +vt 0.394118 0.770833 +vt 0.400000 0.729167 +vt 0.400000 0.770833 +vt 0.400000 0.812500 +vt 0.394118 0.812500 +vt 0.400000 0.854167 +vt 0.394118 0.854167 +vt 0.400000 0.895833 +vt 0.394118 0.895833 +vt 0.394118 0.937500 +vt 0.400000 0.937500 +vt 0.370588 0.937500 +vt 0.364706 0.895833 +vt 0.370588 0.895833 +vt 0.370588 0.854167 +vt 0.364706 0.854167 +vt 0.370588 0.812500 +vt 0.364706 0.812500 +vt 0.370588 0.770833 +vt 0.364706 0.729167 +vt 0.364706 0.770833 +vt 0.370588 0.020833 +vt 0.394118 0.000000 +vt 0.394118 0.020833 +vt 0.394118 0.687500 +vt 0.400000 0.020833 +vt 0.400000 0.687500 +vt 0.364706 0.687500 +vt 0.370588 0.687500 +vt 0.394118 0.770833 +vt 0.400000 0.729167 +vt 0.400000 0.770833 +vt 0.400000 0.812500 +vt 0.394118 0.812500 +vt 0.400000 0.854167 +vt 0.394118 0.854167 +vt 0.400000 0.895833 +vt 0.394118 0.895833 +vt 0.394118 0.937500 +vt 0.400000 0.937500 +vt 0.370588 0.937500 +vt 0.364706 0.895833 +vt 0.370588 0.895833 +vt 0.370588 0.854167 +vt 0.364706 0.854167 +vt 0.370588 0.812500 +vt 0.364706 0.812500 +vt 0.370588 0.770833 +vt 0.364706 0.729167 +vt 0.364706 0.770833 +vt 0.795473 0.213133 +vt 0.745703 0.213133 +vt 0.745703 0.036867 +vt 0.738036 0.677788 +vt 0.738036 0.634712 +vt 0.750199 0.634712 +vt 0.738036 0.677788 +vt 0.738036 0.634712 +vt 0.750199 0.634712 +vt 0.750199 0.634712 +vt 0.750199 0.677788 +vt 0.738036 0.677788 +vt 0.750199 0.634712 +vt 0.750199 0.677788 +vt 0.738036 0.677788 +vt 0.329412 0.166667 +vt 0.329412 0.833333 +vt 0.258824 0.833333 +vt 0.258824 0.166667 +vt 0.047059 0.000000 +vt 0.017647 0.062500 +vt 0.017647 0.000000 +vt 0.064706 0.062500 +vt 0.082353 0.729167 +vt 0.064706 0.729167 +vt 0.047059 0.729167 +vt 0.017647 0.729167 +vt 0.111765 0.729167 +vt 0.082353 0.062500 +vt 0.111765 0.062500 +vt 0.017647 0.791667 +vt 0.047059 0.791667 +vt 0.064706 0.729167 +vt 0.047059 0.062500 +vt 0.064706 0.062500 +vt 0.129412 0.729167 +vt 0.129412 0.062500 +vt 0.111765 0.000000 +vt 0.082353 -0.000000 +vt 0.000000 0.062500 +vt 0.000000 0.729167 +vt 0.082353 0.791667 +vt 0.111765 0.791667 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.435382 0.770833 +vt 0.441176 0.750310 +vt 0.446971 0.770833 +vt 0.858823 0.541667 +vt 0.841176 0.583333 +vt 0.841176 0.541667 +vt 0.841176 0.625000 +vt 0.858823 0.666667 +vt 0.841176 0.666667 +vt 0.917647 -0.000000 +vt 0.870588 0.125000 +vt 0.870588 0.000000 +vt 0.858824 0.083333 +vt 0.829412 0.541667 +vt 0.841176 0.125000 +vt 0.841176 0.541667 +vt 0.858824 0.125000 +vt 0.858824 0.541667 +vt 0.917647 0.541667 +vt 0.917647 0.125000 +vt 0.952941 0.541667 +vt 1.000000 0.125000 +vt 1.000000 0.541667 +vt 0.870588 0.541667 +vt 0.952941 0.125000 +vt 0.829412 0.625000 +vt 0.858823 0.625000 +vt 0.870588 0.583333 +vt 0.870588 0.625000 +vt 0.858823 0.583333 +vt 0.888235 0.687500 +vt 0.894118 0.645833 +vt 0.894118 0.687500 +vt 0.894118 0.937500 +vt 0.870588 0.937500 +vt 0.876471 0.687500 +vt 0.876471 0.937500 +vt 0.870588 0.687500 +vt 0.876471 0.645833 +vt 0.905882 0.562500 +vt 0.894118 0.541667 +vt 0.905882 0.541667 +vt 0.888235 0.645833 +vt 0.894118 0.562500 +vt 0.870588 0.562500 +vt 0.876471 0.562500 +vt 0.746204 0.807601 +vt 0.740493 0.794086 +vt 0.736677 0.773859 +vt 0.735337 0.750000 +vt 0.736677 0.726141 +vt 0.740493 0.705914 +vt 0.746204 0.692399 +vt 0.759678 0.692399 +vt 0.765389 0.705914 +vt 0.769205 0.726141 +vt 0.769205 0.773859 +vt 0.765389 0.794086 +vt 0.759678 0.807601 +vt 0.288235 0.833333 +vt 0.129412 0.083333 +vt 0.364706 0.083333 +vt 0.370588 -0.000000 +vt 0.364706 0.020833 +vt 0.394118 0.729167 +vt 0.364706 0.937500 +vt 0.370588 0.729167 +vt 0.370588 -0.000000 +vt 0.364706 0.020833 +vt 0.394118 0.729167 +vt 0.364706 0.937500 +vt 0.370588 0.729167 +vt 0.784055 0.240151 +vt 0.770588 0.249639 +vt 0.757121 0.240151 +vt 0.738075 0.172697 +vt 0.735396 0.125000 +vt 0.738075 0.077303 +vt 0.757120 0.009849 +vt 0.770588 0.000361 +vt 0.784055 0.009849 +vt 0.795473 0.036867 +vt 0.803101 0.077303 +vt 0.805780 0.125000 +vt 0.803101 0.172697 +vt 0.752718 0.656250 +vt 0.750199 0.677788 +vt 0.744118 0.686710 +vt 0.735517 0.656250 +vt 0.744117 0.625790 +vt 0.752718 0.656250 +vt 0.750199 0.677788 +vt 0.744118 0.686710 +vt 0.735517 0.656250 +vt 0.744118 0.625790 +vt 0.752718 0.656250 +vt 0.744118 0.686710 +vt 0.735517 0.656250 +vt 0.738036 0.634712 +vt 0.744118 0.625790 +vt 0.752718 0.656250 +vt 0.744118 0.686710 +vt 0.735517 0.656250 +vt 0.738036 0.634712 +vt 0.744117 0.625790 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.445274 0.785345 +vt 0.441176 0.791356 +vt 0.437079 0.785345 +vt 0.437079 0.756321 +vt 0.445274 0.756321 +vt 0.858824 0.041667 +vt 0.829412 0.125000 +vt 0.829412 0.583333 +vt 0.888235 0.937500 +vt 0.870588 0.645833 +vt 0.888235 0.562500 +vt 0.711765 0.312500 +vt 0.570588 0.375000 +vt 0.570588 0.312500 +vt 0.711765 0.875000 +vt 0.570588 0.937500 +vt 0.570588 0.875000 +vt 0.711765 0.375000 +vt 0.570588 0.437500 +vt 0.711765 0.937500 +vt 0.570588 1.000000 +vt 0.711765 0.500000 +vt 0.570588 0.562500 +vt 0.570588 0.500000 +vt 0.711765 0.437500 +vt 0.711765 0.000000 +vt 0.570588 0.062500 +vt 0.570588 0.000000 +vt 0.711765 0.562500 +vt 0.570588 0.625000 +vt 0.711765 0.062500 +vt 0.570588 0.125000 +vt 0.711765 0.625000 +vt 0.570588 0.687500 +vt 0.711765 0.125000 +vt 0.570588 0.187500 +vt 0.711765 0.687500 +vt 0.570588 0.750000 +vt 0.711765 0.187500 +vt 0.570588 0.250000 +vt 0.711765 0.750000 +vt 0.570588 0.812500 +vt 0.711765 0.250000 +vt 0.711765 0.812500 +vt 0.517647 0.333333 +vt 0.517647 0.895833 +vt 0.517647 0.395833 +vt 0.517647 0.958333 +vt 0.517647 0.541667 +vt 0.517647 0.520833 +vt 0.517647 0.479167 +vt 0.517647 0.458333 +vt 0.517647 0.020833 +vt 0.517647 0.583333 +vt 0.517647 0.083333 +vt 0.517647 0.645833 +vt 0.517647 0.166667 +vt 0.517647 0.145833 +vt 0.517647 0.708333 +vt 0.517647 0.208333 +vt 0.517647 0.770833 +vt 0.517647 0.270833 +vt 0.517647 0.833333 +vt 0.735294 0.250000 +vt 0.735294 0.312500 +vt 0.735294 0.875000 +vt 0.735294 0.375000 +vt 0.735294 0.937500 +vt 0.735294 0.437500 +vt 0.735294 1.000000 +vt 0.711765 1.000000 +vt 0.735294 0.562500 +vt 0.735294 0.500000 +vt 0.735294 0.062500 +vt 0.735294 0.625000 +vt 0.735294 0.125000 +vt 0.735294 0.687500 +vt 0.735294 0.187500 +vt 0.735294 0.750000 +vt 0.735294 0.812500 +vt 0.770588 0.291667 +vt 0.782353 0.250000 +vt 0.782353 0.291667 +vt 0.758824 0.458333 +vt 0.770588 0.458333 +vt 0.805882 0.458333 +vt 0.800000 0.625000 +vt 0.794118 0.458333 +vt 0.735294 0.291667 +vt 0.747059 0.250000 +vt 0.747059 0.291667 +vt 0.788235 0.625000 +vt 0.782353 0.458333 +vt 0.758824 0.250000 +vt 0.758824 0.291667 +vt 0.776471 0.625000 +vt 0.770588 0.250000 +vt 0.817647 0.458333 +vt 0.805882 0.291667 +vt 0.817647 0.291667 +vt 0.764706 0.625000 +vt 0.805882 0.250000 +vt 0.817647 0.250000 +vt 0.752941 0.625000 +vt 0.747059 0.458333 +vt 0.794118 0.250000 +vt 0.794118 0.291667 +vt 0.829412 0.291667 +vt 0.829412 0.250000 +vt 0.811765 0.625000 +vt 0.770588 0.291667 +vt 0.782353 0.250000 +vt 0.782353 0.291667 +vt 0.770588 0.458333 +vt 0.758824 0.291667 +vt 0.805882 0.458333 +vt 0.800000 0.625000 +vt 0.794118 0.458333 +vt 0.747059 0.291667 +vt 0.735294 0.250000 +vt 0.747059 0.250000 +vt 0.788235 0.625000 +vt 0.782353 0.458333 +vt 0.758824 0.250000 +vt 0.776471 0.625000 +vt 0.770588 0.250000 +vt 0.817647 0.458333 +vt 0.805882 0.291667 +vt 0.817647 0.291667 +vt 0.764706 0.625000 +vt 0.758824 0.458333 +vt 0.805882 0.250000 +vt 0.817647 0.250000 +vt 0.752941 0.625000 +vt 0.747059 0.458333 +vt 0.794118 0.250000 +vt 0.794118 0.291667 +vt 0.829412 0.291667 +vt 0.829412 0.250000 +vt 0.811765 0.625000 +vt 0.782353 0.291667 +vt 0.770588 0.250000 +vt 0.782353 0.250000 +vt 0.758824 0.458333 +vt 0.770588 0.291667 +vt 0.770588 0.458333 +vt 0.805882 0.458333 +vt 0.800000 0.625000 +vt 0.794118 0.458333 +vt 0.735294 0.291667 +vt 0.747059 0.250000 +vt 0.747059 0.291667 +vt 0.788235 0.625000 +vt 0.782353 0.458333 +vt 0.758824 0.291667 +vt 0.758824 0.250000 +vt 0.776471 0.625000 +vt 0.817647 0.458333 +vt 0.805882 0.291667 +vt 0.817647 0.291667 +vt 0.764706 0.625000 +vt 0.805882 0.250000 +vt 0.817647 0.250000 +vt 0.752941 0.625000 +vt 0.747059 0.458333 +vt 0.794118 0.291667 +vt 0.794118 0.250000 +vt 0.829412 0.250000 +vt 0.829412 0.291667 +vt 0.811765 0.625000 +vt 0.770588 0.291667 +vt 0.782353 0.250000 +vt 0.782353 0.291667 +vt 0.758824 0.458333 +vt 0.770588 0.458333 +vt 0.805882 0.458333 +vt 0.800000 0.625000 +vt 0.794118 0.458333 +vt 0.747059 0.291667 +vt 0.735294 0.250000 +vt 0.747059 0.250000 +vt 0.788235 0.625000 +vt 0.782353 0.458333 +vt 0.758824 0.250000 +vt 0.758824 0.291667 +vt 0.776471 0.625000 +vt 0.770588 0.250000 +vt 0.817647 0.291667 +vt 0.817647 0.458333 +vt 0.764706 0.625000 +vt 0.805882 0.250000 +vt 0.817647 0.250000 +vt 0.752941 0.625000 +vt 0.747059 0.458333 +vt 0.794118 0.250000 +vt 0.794118 0.291667 +vt 0.805882 0.291667 +vt 0.829412 0.250000 +vt 0.829412 0.291667 +vt 0.811765 0.625000 +vt 0.452941 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.833333 +vt 0.452941 0.875000 +vt 0.517647 0.854167 +vt 0.517647 0.875000 +vt 0.452941 0.770833 +vt 0.447059 0.791667 +vt 0.447059 0.770833 +vt 0.517647 0.833333 +vt 0.452941 0.895833 +vt 0.447059 0.875000 +vt 0.517647 0.812500 +vt 0.452941 0.812500 +vt 0.452941 0.791667 +vt 0.517647 0.791667 +vt 0.447059 0.916667 +vt 0.447059 0.895833 +vt 0.517647 0.770833 +vt 0.447059 0.812500 +vt 0.517647 0.750000 +vt 0.452941 0.750000 +vt 0.447059 0.750000 +vt 0.447059 0.854167 +vt 0.452941 0.916667 +vt 0.517647 0.895833 +vt 0.517647 0.916667 +vt 0.452941 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.833333 +vt 0.452941 0.875000 +vt 0.517647 0.854167 +vt 0.517647 0.875000 +vt 0.452941 0.791667 +vt 0.447059 0.770833 +vt 0.452941 0.770833 +vt 0.517647 0.833333 +vt 0.447059 0.895833 +vt 0.447059 0.875000 +vt 0.517647 0.812500 +vt 0.447059 0.812500 +vt 0.447059 0.791667 +vt 0.452941 0.812500 +vt 0.517647 0.791667 +vt 0.452941 0.895833 +vt 0.447059 0.916667 +vt 0.517647 0.770833 +vt 0.517647 0.750000 +vt 0.452941 0.750000 +vt 0.447059 0.750000 +vt 0.447059 0.854167 +vt 0.452941 0.916667 +vt 0.517647 0.895833 +vt 0.517647 0.916667 +vt 0.452941 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.833333 +vt 0.452941 0.875000 +vt 0.517647 0.854167 +vt 0.517647 0.875000 +vt 0.452941 0.791667 +vt 0.447059 0.770833 +vt 0.452941 0.770833 +vt 0.517647 0.833333 +vt 0.452941 0.895833 +vt 0.447059 0.875000 +vt 0.517647 0.812500 +vt 0.447059 0.812500 +vt 0.447059 0.791667 +vt 0.452941 0.812500 +vt 0.517647 0.791667 +vt 0.447059 0.916667 +vt 0.447059 0.895833 +vt 0.517647 0.770833 +vt 0.517647 0.750000 +vt 0.452941 0.750000 +vt 0.447059 0.750000 +vt 0.447059 0.854167 +vt 0.517647 0.916667 +vt 0.517647 0.895833 +vt 0.517647 0.895833 +vt 0.452941 0.875000 +vt 0.517647 0.875000 +vt 0.452941 0.916667 +vt 0.517647 0.916667 +vt 0.447059 0.854167 +vt 0.452941 0.854167 +vt 0.452941 0.750000 +vt 0.447059 0.770833 +vt 0.447059 0.750000 +vt 0.452941 0.770833 +vt 0.517647 0.750000 +vt 0.517647 0.770833 +vt 0.452941 0.833333 +vt 0.447059 0.812500 +vt 0.452941 0.812500 +vt 0.517647 0.791667 +vt 0.447059 0.895833 +vt 0.452941 0.895833 +vt 0.517647 0.812500 +vt 0.452941 0.791667 +vt 0.447059 0.791667 +vt 0.517647 0.833333 +vt 0.447059 0.875000 +vt 0.517647 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.833333 +vt 0.452941 0.875000 +vt 0.517647 0.854167 +vt 0.517647 0.875000 +vt 0.517647 0.895833 +vt 0.452941 0.875000 +vt 0.517647 0.875000 +vt 0.452941 0.791667 +vt 0.447059 0.770833 +vt 0.452941 0.770833 +vt 0.517647 0.833333 +vt 0.452941 0.916667 +vt 0.517647 0.916667 +vt 0.452941 0.895833 +vt 0.447059 0.875000 +vt 0.517647 0.812500 +vt 0.447059 0.854167 +vt 0.452941 0.854167 +vt 0.447059 0.812500 +vt 0.447059 0.791667 +vt 0.517647 0.791667 +vt 0.452941 0.750000 +vt 0.447059 0.770833 +vt 0.447059 0.750000 +vt 0.452941 0.916667 +vt 0.447059 0.895833 +vt 0.517647 0.770833 +vt 0.452941 0.770833 +vt 0.517647 0.750000 +vt 0.517647 0.770833 +vt 0.452941 0.812500 +vt 0.517647 0.750000 +vt 0.452941 0.750000 +vt 0.447059 0.750000 +vt 0.447059 0.854167 +vt 0.517647 0.895833 +vt 0.517647 0.916667 +vt 0.452941 0.833333 +vt 0.447059 0.812500 +vt 0.452941 0.812500 +vt 0.517647 0.791667 +vt 0.447059 0.895833 +vt 0.452941 0.895833 +vt 0.517647 0.812500 +vt 0.452941 0.791667 +vt 0.447059 0.791667 +vt 0.517647 0.833333 +vt 0.447059 0.875000 +vt 0.517647 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.833333 +vt 0.452941 0.875000 +vt 0.517647 0.854167 +vt 0.517647 0.875000 +vt 0.452941 0.791667 +vt 0.447059 0.770833 +vt 0.452941 0.770833 +vt 0.517647 0.833333 +vt 0.447059 0.895833 +vt 0.447059 0.875000 +vt 0.517647 0.812500 +vt 0.447059 0.812500 +vt 0.447059 0.791667 +vt 0.452941 0.812500 +vt 0.517647 0.791667 +vt 0.452941 0.916667 +vt 0.452941 0.895833 +vt 0.517647 0.770833 +vt 0.517647 0.750000 +vt 0.452941 0.750000 +vt 0.447059 0.750000 +vt 0.447059 0.854167 +vt 0.517647 0.895833 +vt 0.517647 0.916667 +vt 0.452941 0.895833 +vt 0.517647 0.875000 +vt 0.517647 0.895833 +vt 0.452941 0.916667 +vt 0.517647 0.916667 +vt 0.452941 0.854167 +vt 0.447059 0.875000 +vt 0.447059 0.854167 +vt 0.452941 0.750000 +vt 0.447059 0.770833 +vt 0.447059 0.750000 +vt 0.452941 0.770833 +vt 0.517647 0.750000 +vt 0.517647 0.770833 +vt 0.452941 0.833333 +vt 0.447059 0.812500 +vt 0.452941 0.812500 +vt 0.452941 0.791667 +vt 0.517647 0.791667 +vt 0.447059 0.916667 +vt 0.447059 0.895833 +vt 0.517647 0.812500 +vt 0.447059 0.791667 +vt 0.517647 0.833333 +vt 0.452941 0.875000 +vt 0.517647 0.854167 +vt 0.447059 0.833333 +vt 0.452941 0.895833 +vt 0.517647 0.875000 +vt 0.517647 0.895833 +vt 0.452941 0.916667 +vt 0.517647 0.916667 +vt 0.452941 0.875000 +vt 0.447059 0.854167 +vt 0.452941 0.854167 +vt 0.452941 0.750000 +vt 0.447059 0.770833 +vt 0.447059 0.750000 +vt 0.452941 0.770833 +vt 0.517647 0.750000 +vt 0.517647 0.770833 +vt 0.452941 0.833333 +vt 0.447059 0.812500 +vt 0.452941 0.812500 +vt 0.452941 0.791667 +vt 0.517647 0.791667 +vt 0.447059 0.895833 +vt 0.517647 0.812500 +vt 0.447059 0.791667 +vt 0.517647 0.833333 +vt 0.447059 0.875000 +vt 0.517647 0.854167 +vt 0.447059 0.833333 +vt 0.905882 0.687500 +vt 0.905882 0.937500 +vt 0.905882 0.645833 +vt 0.517647 0.354167 +vt 0.517647 0.916667 +vt 0.517647 0.416667 +vt 0.517647 0.979167 +vt 0.517647 0.041667 +vt 0.517647 0.604167 +vt 0.517647 0.104167 +vt 0.517647 0.666667 +vt 0.517647 0.729167 +vt 0.517647 0.229167 +vt 0.517647 0.791667 +vt 0.517647 0.291667 +vt 0.517647 0.854167 +vt 0.735294 0.000000 +vt 0.735294 0.250000 +vt 0.735294 0.291667 +vt 0.735294 0.250000 +vt 0.735294 0.291667 +vt 0.452941 0.916667 +vt 0.447059 0.916667 +vt 0.447059 0.916667 +vt 0.447059 0.916667 +vt 0.447059 0.916667 +vt 0.447059 0.916667 +vn 0.0000 0.0000 1.0000 +vn 0.0000 -1.0000 0.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.1961 -0.9806 +vn 0.0000 -0.1961 0.9806 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 1.0000 0.0000 +vn -0.7943 -0.1191 0.5957 +vn 0.7943 -0.1191 0.5957 +vn 0.9239 0.3827 0.0000 +vn 0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn -0.3827 -0.9239 0.0000 +vn 0.3827 0.9239 0.0000 +vn -0.3827 0.9239 0.0000 +vn 0.3827 -0.9239 0.0000 +vn -0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +vn -0.9239 0.3827 0.0000 +vn 0.9239 -0.3827 0.0000 +vn -0.9239 -0.3827 0.0000 +vn 0.5996 0.5996 0.5300 +vn 0.7834 0.3245 0.5300 +vn -0.3245 -0.7834 0.5300 +vn -0.5996 -0.5996 0.5300 +vn 0.3245 0.7834 0.5300 +vn -0.0000 -0.8480 0.5300 +vn 0.0000 0.8480 0.5300 +vn -0.3245 0.7834 0.5300 +vn 0.3245 -0.7834 0.5300 +vn -0.5996 0.5996 0.5300 +vn 0.5996 -0.5996 0.5300 +vn -0.7834 0.3245 0.5300 +vn 0.7834 -0.3245 0.5300 +vn -0.8480 -0.0000 0.5300 +vn 0.8480 -0.0000 0.5300 +vn -0.7834 -0.3245 0.5300 +vn 0.8263 0.3423 -0.4472 +vn 0.8944 0.0000 -0.4472 +vn -0.9830 0.1835 0.0000 +vn -0.9781 0.2082 0.0000 +vn -0.8263 -0.3423 -0.4472 +vn -0.6325 -0.6325 -0.4472 +vn 0.6325 0.6325 -0.4472 +vn -0.3423 -0.8263 -0.4472 +vn 0.3423 0.8263 -0.4472 +vn -0.0000 -0.8944 -0.4472 +vn 0.0000 0.8944 -0.4472 +vn -0.3423 0.8263 -0.4472 +vn 0.3423 -0.8263 -0.4472 +vn -0.6325 0.6325 -0.4472 +vn 0.6325 -0.6325 -0.4472 +vn -0.8263 0.3423 -0.4472 +vn 0.8263 -0.3423 -0.4472 +vn -0.8944 0.0000 -0.4472 +vn 0.0000 -0.8000 -0.6000 +vn 0.5657 -0.5657 -0.6000 +vn 0.6621 0.6621 0.3511 +vn 0.4698 -0.4698 0.7474 +vn 0.9363 0.0000 0.3511 +vn -0.5657 0.5657 -0.6000 +vn -0.8000 0.0000 -0.6000 +vn 0.6621 -0.6621 0.3511 +vn -0.5657 -0.5657 -0.6000 +vn -0.0000 -0.9363 0.3511 +vn -0.6621 -0.6621 0.3511 +vn -0.0000 0.8000 -0.6000 +vn 0.5657 0.5657 -0.6000 +vn -0.8730 -0.3616 0.3274 +vn 0.8000 -0.0000 -0.6000 +vn 0.3616 0.8730 0.3274 +vn -0.4698 -0.4698 0.7474 +vn -0.9363 0.0000 0.3511 +vn -0.6621 0.6621 0.3511 +vn -0.3616 0.8730 0.3274 +vn 0.8730 -0.3616 0.3274 +vn -0.4698 0.4698 0.7474 +vn 0.0000 0.9363 0.3511 +vn 0.8730 0.3616 0.3274 +vn -0.3616 -0.8730 0.3274 +vn 0.4698 0.4698 0.7474 +vn 0.3616 -0.8730 0.3274 +vn -0.8730 0.3616 0.3274 +vn 0.5657 0.5657 0.6000 +vn 0.8000 0.0000 0.6000 +vn -0.5657 -0.5657 0.6000 +vn -0.0000 -0.8000 0.6000 +vn -0.5657 0.5657 0.6000 +vn -0.0000 0.8000 0.6000 +vn 0.5657 -0.5657 0.6000 +vn -0.8000 0.0000 0.6000 +vn 0.0000 0.0985 -0.9951 +vn 0.0000 -0.0985 0.9951 +vn 0.0000 -0.2298 -0.9732 +vn 0.0000 -0.4472 -0.8944 +vn 0.0000 0.2298 0.9732 +vn 0.0000 0.4472 0.8944 +s off +f 89/100/19 93/101/19 81/102/19 +f 101/103/20 103/104/20 102/105/20 +f 285/106/21 288/107/21 286/108/21 +f 99/109/22 102/110/22 97/111/22 +f 104/112/23 99/113/23 100/114/23 +f 102/110/24 98/115/24 97/111/24 +f 109/116/20 111/117/20 110/118/20 +f 105/119/24 111/120/24 106/121/24 +f 108/122/23 109/116/23 107/123/23 +f 116/124/19 128/125/19 129/126/19 +f 128/125/19 105/119/19 106/121/19 +f 116/124/19 134/127/19 124/128/19 +f 124/128/19 133/129/19 123/130/19 +f 123/130/19 127/131/19 122/132/19 +f 121/133/19 127/131/19 135/134/19 +f 117/135/25 130/136/25 118/137/25 +f 130/136/25 119/138/25 118/137/25 +f 131/139/25 120/140/25 119/138/25 +f 132/141/25 113/142/25 120/140/25 +f 126/143/25 113/142/25 125/144/25 +f 107/123/25 126/143/25 108/122/25 +f 141/145/20 143/146/20 142/147/20 +f 137/148/24 143/149/24 138/150/24 +f 140/151/23 141/145/23 139/152/23 +f 148/153/19 160/154/19 161/155/19 +f 160/154/19 137/148/19 138/150/19 +f 148/153/19 166/156/19 156/157/19 +f 156/157/19 165/158/19 155/159/19 +f 155/159/19 159/160/19 154/161/19 +f 153/162/19 159/160/19 167/163/19 +f 149/164/25 162/165/25 150/166/25 +f 162/165/25 151/167/25 150/166/25 +f 163/168/25 152/169/25 151/167/25 +f 164/170/25 145/171/25 152/169/25 +f 158/172/25 145/171/25 157/173/25 +f 139/152/25 158/172/25 140/151/25 +f 171/174/25 183/175/25 179/176/25 +f 206/177/25 204/178/25 185/179/25 +f 230/180/25 228/181/25 209/182/25 +f 233/183/25 256/184/25 254/185/25 +f 257/186/25 280/187/25 278/188/25 +f 284/189/21 100/114/21 283/190/21 +f 281/191/21 103/104/21 282/192/21 +f 285/106/21 283/190/21 100/114/21 +f 104/112/21 284/189/21 286/108/21 +f 288/193/26 290/194/26 282/195/26 +f 286/196/23 294/197/23 285/198/23 +f 290/194/21 295/199/21 289/200/21 +f 292/201/21 293/202/21 291/203/21 +f 281/204/20 295/199/20 287/205/20 +f 287/206/24 296/207/24 288/208/24 +f 283/209/24 291/203/24 284/210/24 +f 284/211/26 293/202/26 286/212/26 +f 282/213/23 289/200/23 281/214/23 +f 285/215/20 292/201/20 283/216/20 +f 319/217/19 317/218/19 315/219/19 +f 343/220/19 341/221/19 339/222/19 +f 367/223/19 365/224/19 363/225/19 +f 370/226/19 372/227/19 374/228/19 +f 418/229/19 420/230/19 422/231/19 +f 415/232/19 413/233/19 411/234/19 +f 463/235/19 461/236/19 459/237/19 +f 466/238/19 468/239/19 470/240/19 +f 490/241/19 492/242/19 494/243/19 +f 529/244/19 532/245/19 530/246/19 +f 528/247/25 525/248/25 526/249/25 +f 519/250/20 521/251/20 520/252/20 +f 524/253/20 520/252/20 521/251/20 +f 513/254/27 523/255/27 517/256/27 +f 517/256/24 524/257/24 518/258/24 +f 516/259/21 521/251/21 522/260/21 +f 515/261/22 520/262/22 513/263/22 +f 514/264/28 524/257/28 521/251/28 +f 516/259/23 519/265/23 515/261/23 +f 526/266/21 532/245/21 528/247/21 +f 527/267/22 529/268/22 525/269/22 +f 528/247/20 531/270/20 527/267/20 +f 539/271/21 544/272/21 540/273/21 +f 536/274/21 539/271/21 540/273/21 +f 535/275/22 538/276/22 533/277/22 +f 537/278/22 542/279/22 538/276/22 +f 545/280/20 547/281/20 546/282/20 +f 543/283/21 548/284/21 544/272/21 +f 542/279/22 545/285/22 546/286/22 +f 81/102/19 82/287/19 83/288/19 +f 83/288/19 84/289/19 81/102/19 +f 84/289/19 85/290/19 81/102/19 +f 85/290/19 86/291/19 89/100/19 +f 86/291/19 87/292/19 89/100/19 +f 87/292/19 88/293/19 89/100/19 +f 89/100/19 90/294/19 91/295/19 +f 91/295/19 92/296/19 89/100/19 +f 92/296/19 93/101/19 89/100/19 +f 93/101/19 94/297/19 81/102/19 +f 94/297/19 95/298/19 81/102/19 +f 95/298/19 96/299/19 81/102/19 +f 81/102/19 85/290/19 89/100/19 +f 101/103/20 104/112/20 103/104/20 +f 285/106/21 287/300/21 288/107/21 +f 99/109/22 101/301/22 102/110/22 +f 104/112/23 101/302/23 99/113/23 +f 102/110/24 103/104/24 98/115/24 +f 109/116/20 112/303/20 111/117/20 +f 105/119/24 110/118/24 111/120/24 +f 108/122/23 112/304/23 109/116/23 +f 116/124/19 115/305/19 128/125/19 +f 128/125/19 115/305/19 105/119/19 +f 116/124/19 129/126/19 134/127/19 +f 124/128/19 134/127/19 133/129/19 +f 123/130/19 133/129/19 127/131/19 +f 121/133/19 122/132/19 127/131/19 +f 117/135/25 136/306/25 130/136/25 +f 130/136/25 131/139/25 119/138/25 +f 131/139/25 132/141/25 120/140/25 +f 132/141/25 125/144/25 113/142/25 +f 126/143/25 114/307/25 113/142/25 +f 107/123/25 114/307/25 126/143/25 +f 141/145/20 144/308/20 143/146/20 +f 137/148/24 142/147/24 143/149/24 +f 140/151/23 144/309/23 141/145/23 +f 148/153/19 147/310/19 160/154/19 +f 160/154/19 147/310/19 137/148/19 +f 148/153/19 161/155/19 166/156/19 +f 156/157/19 166/156/19 165/158/19 +f 155/159/19 165/158/19 159/160/19 +f 153/162/19 154/161/19 159/160/19 +f 149/164/25 168/311/25 162/165/25 +f 162/165/25 163/168/25 151/167/25 +f 163/168/25 164/170/25 152/169/25 +f 164/170/25 157/173/25 145/171/25 +f 158/172/25 146/312/25 145/171/25 +f 139/152/25 146/312/25 158/172/25 +f 171/174/25 170/313/25 169/314/25 +f 169/314/25 184/315/25 171/174/25 +f 184/315/25 183/175/25 171/174/25 +f 183/175/25 182/316/25 181/317/25 +f 181/317/25 180/318/25 183/175/25 +f 180/318/25 179/176/25 183/175/25 +f 179/176/25 178/319/25 177/320/25 +f 177/320/25 176/321/25 179/176/25 +f 176/321/25 175/322/25 179/176/25 +f 175/322/25 174/323/25 173/324/25 +f 173/324/25 172/325/25 171/174/25 +f 175/322/25 173/324/25 179/176/25 +f 173/324/25 171/174/25 179/176/25 +f 185/179/25 202/326/25 208/327/25 +f 208/327/25 207/328/25 206/177/25 +f 206/177/25 205/329/25 204/178/25 +f 204/178/25 203/330/25 185/179/25 +f 185/179/25 208/327/25 206/177/25 +f 209/182/25 226/331/25 232/332/25 +f 232/332/25 231/333/25 230/180/25 +f 230/180/25 229/334/25 228/181/25 +f 228/181/25 227/335/25 209/182/25 +f 209/182/25 232/332/25 230/180/25 +f 233/183/25 250/336/25 256/184/25 +f 256/184/25 255/337/25 254/185/25 +f 254/185/25 253/338/25 252/339/25 +f 252/339/25 251/340/25 254/185/25 +f 251/340/25 233/183/25 254/185/25 +f 257/186/25 274/341/25 280/187/25 +f 280/187/25 279/342/25 278/188/25 +f 278/188/25 277/343/25 257/186/25 +f 277/343/25 276/344/25 257/186/25 +f 276/344/25 275/345/25 257/186/25 +f 284/189/21 104/112/21 100/114/21 +f 281/191/21 98/115/21 103/104/21 +f 100/114/21 98/115/21 287/300/21 +f 98/115/21 281/191/21 287/300/21 +f 287/300/21 285/106/21 100/114/21 +f 282/192/21 103/104/21 288/107/21 +f 103/104/21 104/112/21 286/108/21 +f 288/107/21 103/104/21 286/108/21 +f 288/193/26 296/207/26 290/194/26 +f 286/196/23 293/202/23 294/197/23 +f 290/194/21 296/207/21 295/199/21 +f 292/201/21 294/197/21 293/202/21 +f 281/204/20 289/200/20 295/199/20 +f 287/206/24 295/199/24 296/207/24 +f 283/209/24 292/201/24 291/203/24 +f 284/211/26 291/203/26 293/202/26 +f 282/213/23 290/194/23 289/200/23 +f 285/215/20 294/197/20 292/201/20 +f 315/219/19 298/346/19 297/347/19 +f 297/347/19 320/348/19 319/217/19 +f 319/217/19 318/349/19 317/218/19 +f 317/218/19 316/350/19 315/219/19 +f 315/219/19 297/347/19 319/217/19 +f 339/222/19 322/351/19 321/352/19 +f 321/352/19 344/353/19 343/220/19 +f 343/220/19 342/354/19 341/221/19 +f 341/221/19 340/355/19 339/222/19 +f 339/222/19 321/352/19 343/220/19 +f 363/225/19 346/356/19 345/357/19 +f 345/357/19 368/358/19 367/223/19 +f 367/223/19 366/359/19 365/224/19 +f 365/224/19 364/360/19 363/225/19 +f 363/225/19 345/357/19 367/223/19 +f 374/228/19 391/361/19 392/362/19 +f 392/362/19 369/363/19 370/226/19 +f 370/226/19 371/364/19 372/227/19 +f 372/227/19 373/365/19 374/228/19 +f 374/228/19 392/362/19 370/226/19 +f 422/231/19 439/366/19 440/367/19 +f 440/367/19 417/368/19 418/229/19 +f 418/229/19 419/369/19 420/230/19 +f 420/230/19 421/370/19 422/231/19 +f 422/231/19 440/367/19 418/229/19 +f 411/234/19 394/371/19 393/372/19 +f 393/372/19 416/373/19 415/232/19 +f 415/232/19 414/374/19 413/233/19 +f 413/233/19 412/375/19 411/234/19 +f 411/234/19 393/372/19 415/232/19 +f 459/237/19 442/376/19 441/377/19 +f 441/377/19 464/378/19 463/235/19 +f 463/235/19 462/379/19 461/236/19 +f 461/236/19 460/380/19 459/237/19 +f 459/237/19 441/377/19 463/235/19 +f 470/240/19 487/381/19 488/382/19 +f 488/382/19 465/383/19 466/238/19 +f 466/238/19 467/384/19 468/239/19 +f 468/239/19 469/385/19 470/240/19 +f 470/240/19 488/382/19 466/238/19 +f 494/243/19 511/386/19 512/387/19 +f 512/387/19 489/388/19 490/241/19 +f 490/241/19 491/389/19 492/242/19 +f 492/242/19 493/390/19 494/243/19 +f 494/243/19 512/387/19 490/241/19 +f 529/244/19 531/270/19 532/245/19 +f 528/247/25 527/267/25 525/248/25 +f 519/250/20 522/260/20 521/251/20 +f 524/253/20 523/391/20 520/252/20 +f 513/254/27 520/392/27 523/255/27 +f 517/256/24 523/255/24 524/257/24 +f 516/259/21 514/264/21 521/251/21 +f 515/261/22 519/265/22 520/262/22 +f 514/264/28 518/258/28 524/257/28 +f 516/259/23 522/260/23 519/265/23 +f 526/266/21 530/393/21 532/245/21 +f 527/267/22 531/270/22 529/268/22 +f 528/247/20 532/245/20 531/270/20 +f 539/271/21 543/283/21 544/272/21 +f 536/274/21 534/394/21 539/271/21 +f 535/275/22 537/278/22 538/276/22 +f 537/278/22 541/395/22 542/279/22 +f 545/280/20 548/284/20 547/281/20 +f 543/283/21 547/396/21 548/284/21 +f 542/279/22 541/395/22 545/285/22 +s 1 +f 78/397/29 63/398/30 62/399/29 +f 71/400/31 56/401/32 55/402/31 +f 79/403/30 64/404/33 63/398/30 +f 72/405/32 57/406/20 56/401/32 +f 65/407/26 50/408/34 49/409/26 +f 80/410/33 49/409/26 64/404/33 +f 73/411/20 58/412/35 57/413/20 +f 66/414/34 51/415/36 50/408/34 +f 74/416/35 59/417/37 58/412/35 +f 67/418/36 52/419/38 51/415/36 +f 75/420/37 60/421/39 59/417/37 +f 68/422/38 53/423/22 52/419/38 +f 76/424/39 61/425/21 60/421/39 +f 69/426/22 54/427/40 53/423/22 +f 77/428/21 62/399/29 61/425/21 +f 70/429/40 55/402/31 54/427/40 +f 63/398/41 94/430/42 62/399/42 +f 56/401/43 87/431/44 55/402/44 +f 64/404/45 95/432/41 63/398/41 +f 57/406/46 88/433/43 56/401/43 +f 49/409/47 82/434/48 81/435/47 +f 64/404/45 81/436/47 96/437/45 +f 58/412/49 89/438/46 57/413/46 +f 51/415/50 82/439/48 50/408/48 +f 59/417/51 90/440/49 58/412/49 +f 52/419/52 83/441/50 51/415/50 +f 59/417/51 92/442/53 91/443/51 +f 53/423/54 84/444/52 52/419/52 +f 61/425/55 92/445/53 60/421/53 +f 54/427/56 85/446/54 53/423/54 +f 62/399/42 93/447/55 61/425/55 +f 55/402/44 86/448/56 54/427/56 +f 78/397/57 181/449/58 182/450/57 +f 107/123/59 110/118/22 105/119/60 +f 115/305/36 107/123/59 105/119/60 +f 114/307/36 116/124/26 113/142/26 +f 113/142/26 124/128/30 120/140/30 +f 120/140/30 123/130/21 119/138/21 +f 119/138/21 122/132/37 118/137/37 +f 121/133/35 118/137/37 122/132/37 +f 139/152/59 142/147/22 137/148/60 +f 147/310/36 139/152/59 137/148/60 +f 146/312/36 148/153/26 145/171/26 +f 145/171/26 156/157/30 152/169/30 +f 152/169/30 155/159/21 151/167/21 +f 151/167/21 154/161/37 150/166/37 +f 153/162/35 150/166/37 154/161/37 +f 70/429/61 175/451/62 71/400/62 +f 78/397/57 183/452/63 79/403/63 +f 72/405/64 175/451/62 176/453/64 +f 79/403/63 184/454/65 80/410/65 +f 72/405/64 177/455/66 73/456/66 +f 65/407/67 170/457/68 66/414/68 +f 80/410/65 169/458/67 65/407/67 +f 73/411/66 178/459/69 74/416/69 +f 66/414/68 171/460/70 67/418/70 +f 75/420/71 178/459/69 179/461/71 +f 68/422/72 171/460/70 172/462/72 +f 75/420/71 180/463/73 76/424/73 +f 69/426/74 172/462/72 173/464/74 +f 76/424/73 181/449/58 77/428/58 +f 69/426/74 174/465/61 70/429/61 +f 194/466/75 207/467/76 196/468/76 +f 195/469/31 194/466/20 193/470/20 +f 187/471/77 199/472/78 189/473/79 +f 188/474/80 204/475/81 190/476/81 +f 189/473/79 199/477/78 191/478/82 +f 190/476/81 205/479/83 192/480/83 +f 193/470/20 196/468/37 191/478/37 +f 191/478/82 199/481/78 193/470/84 +f 194/466/75 205/479/83 206/482/75 +f 200/483/33 201/484/30 186/485/33 +f 193/470/84 199/486/78 195/469/85 +f 186/485/86 202/487/87 185/488/86 +f 195/469/85 199/489/78 197/490/88 +f 196/468/76 208/491/89 198/492/89 +f 191/478/37 198/492/21 189/473/21 +f 189/473/21 201/484/30 187/471/30 +f 198/492/89 202/487/87 201/484/87 +f 188/493/80 185/488/86 203/494/80 +f 200/483/90 199/495/78 187/471/77 +f 197/490/40 192/480/31 195/469/31 +f 218/496/81 231/497/83 220/498/83 +f 217/499/22 216/500/36 218/496/22 +f 211/501/82 223/502/91 213/503/84 +f 214/504/86 227/505/87 228/506/86 +f 213/503/84 223/507/91 215/508/85 +f 214/504/86 229/509/80 216/500/80 +f 217/499/22 220/498/31 215/508/31 +f 215/508/85 223/510/91 217/499/92 +f 218/496/81 229/509/80 230/511/81 +f 224/512/39 225/513/37 210/514/39 +f 217/499/92 223/515/91 219/516/93 +f 210/514/89 226/517/76 209/518/89 +f 219/516/93 223/519/91 221/520/94 +f 220/498/83 232/521/75 222/522/75 +f 215/508/31 222/522/20 213/503/20 +f 213/503/20 225/513/37 211/501/37 +f 222/522/75 226/517/76 225/513/76 +f 212/523/87 209/518/89 227/524/87 +f 224/512/95 223/525/91 211/501/82 +f 221/520/34 216/500/36 219/516/36 +f 244/526/80 254/527/86 255/528/80 +f 243/529/30 242/530/26 241/531/26 +f 235/532/85 247/533/96 237/534/92 +f 236/535/76 252/536/89 238/537/89 +f 237/534/92 247/538/96 239/539/93 +f 240/540/87 252/536/89 253/541/87 +f 241/531/26 244/526/36 239/539/36 +f 239/539/93 247/542/96 241/531/97 +f 240/540/87 254/527/86 242/530/86 +f 248/543/32 249/544/31 234/545/32 +f 241/531/97 247/546/96 243/529/77 +f 234/545/75 250/547/83 233/548/75 +f 243/529/77 247/549/96 245/550/98 +f 246/551/81 255/528/80 256/552/81 +f 239/539/36 246/551/22 237/534/22 +f 237/534/22 249/544/31 235/532/31 +f 246/551/81 250/547/83 249/544/83 +f 234/545/75 251/553/76 236/554/76 +f 248/543/99 247/555/96 235/532/85 +f 245/550/29 240/540/30 243/529/30 +f 266/556/89 279/557/87 268/558/87 +f 267/559/37 266/556/21 265/560/21 +f 259/561/93 271/562/100 261/563/97 +f 262/564/75 275/565/83 276/566/75 +f 261/563/97 271/567/100 263/568/77 +f 262/564/75 277/569/76 264/570/76 +f 265/560/21 268/558/30 263/568/30 +f 263/568/77 271/571/100 265/560/79 +f 266/556/89 277/569/76 278/572/89 +f 259/561/36 258/573/38 272/574/38 +f 265/560/79 271/575/100 267/559/82 +f 258/573/81 274/576/80 257/577/81 +f 267/559/82 271/578/100 269/579/101 +f 268/558/87 280/580/86 270/581/86 +f 263/568/30 270/581/26 261/563/26 +f 261/563/26 273/582/36 259/561/36 +f 270/581/86 274/576/80 273/582/80 +f 258/573/81 275/583/83 260/584/83 +f 272/574/102 271/585/100 259/561/93 +f 269/579/35 264/570/37 267/559/37 +f 302/586/103 315/587/104 304/588/104 +f 300/589/26 301/590/30 299/591/26 +f 310/592/105 317/593/106 318/594/105 +f 302/586/30 303/595/21 301/590/30 +f 314/596/107 297/597/108 300/589/108 +f 304/588/21 305/598/37 303/595/21 +f 306/599/109 317/593/106 308/600/106 +f 306/599/37 307/601/20 305/598/37 +f 314/596/107 319/602/110 320/603/107 +f 308/600/20 309/604/31 307/601/20 +f 304/588/104 316/605/109 306/599/109 +f 310/592/31 311/606/22 309/604/31 +f 312/607/110 318/594/105 319/608/110 +f 300/589/108 298/609/103 302/586/103 +f 312/610/22 313/611/36 311/612/22 +f 314/596/36 299/591/26 313/611/36 +f 326/613/103 339/614/104 328/615/104 +f 324/616/26 325/617/30 323/618/26 +f 332/619/106 342/620/105 334/621/105 +f 325/617/30 328/615/21 327/622/21 +f 324/616/108 344/623/107 321/624/108 +f 328/615/21 329/625/37 327/622/21 +f 332/619/106 340/626/109 341/627/106 +f 330/628/37 331/629/20 329/625/37 +f 338/630/107 343/631/110 344/623/107 +f 332/619/20 333/632/31 331/629/20 +f 328/615/104 340/626/109 330/628/109 +f 334/621/31 335/633/22 333/632/31 +f 336/634/110 342/620/105 343/635/110 +f 324/616/108 322/636/103 326/613/103 +f 336/637/22 337/638/36 335/639/22 +f 338/630/36 323/618/26 337/638/36 +f 350/640/103 363/641/104 352/642/104 +f 348/643/26 349/644/30 347/645/26 +f 356/646/106 366/647/105 358/648/105 +f 350/640/30 351/649/21 349/644/30 +f 362/650/107 345/651/108 348/643/108 +f 352/642/21 353/652/37 351/649/21 +f 356/646/106 364/653/109 365/654/106 +f 354/655/37 355/656/20 353/652/37 +f 362/650/107 367/657/110 368/658/107 +f 356/646/20 357/659/31 355/656/20 +f 352/642/104 364/653/109 354/655/109 +f 358/648/31 359/660/22 357/659/31 +f 360/661/110 366/647/105 367/662/110 +f 348/643/108 346/663/103 350/640/103 +f 359/664/22 362/650/36 361/665/36 +f 361/665/36 348/643/26 347/645/26 +f 376/666/36 389/667/26 390/668/26 +f 377/669/22 376/666/36 378/670/22 +f 389/667/108 391/671/103 387/672/103 +f 377/673/110 371/674/105 370/675/110 +f 379/676/31 378/677/22 380/678/31 +f 385/679/104 373/680/109 383/681/109 +f 382/682/20 379/676/31 380/678/31 +f 377/669/110 369/683/107 375/684/107 +f 383/681/37 382/682/20 384/685/37 +f 381/686/106 373/680/109 372/687/106 +f 385/679/21 384/685/37 386/688/21 +f 375/684/107 392/689/108 389/667/108 +f 387/672/30 386/688/21 388/690/30 +f 381/686/106 371/674/105 379/676/105 +f 389/667/26 388/690/30 390/668/26 +f 387/672/103 374/691/104 385/679/104 +f 398/692/103 411/693/104 400/694/104 +f 396/695/26 397/696/30 395/697/26 +f 424/698/36 437/699/26 438/700/26 +f 404/701/106 414/702/105 406/703/105 +f 398/692/30 399/704/21 397/696/30 +f 425/705/22 424/698/36 426/706/22 +f 410/707/107 393/708/108 396/695/108 +f 400/694/21 401/709/37 399/704/21 +f 437/699/108 439/710/103 435/711/103 +f 404/701/106 412/712/109 413/713/106 +f 401/709/37 404/701/20 403/714/20 +f 425/715/110 419/716/105 418/717/110 +f 408/718/110 416/719/107 410/707/107 +f 404/701/20 405/720/31 403/714/20 +f 427/721/31 426/722/22 428/723/31 +f 400/694/104 412/712/109 402/724/109 +f 406/703/31 407/725/22 405/720/31 +f 408/726/110 414/702/105 415/727/110 +f 398/692/103 393/708/108 394/728/103 +f 408/718/22 409/729/36 407/730/22 +f 433/731/104 421/732/109 431/733/109 +f 430/734/20 427/721/31 428/723/31 +f 410/707/36 395/697/26 409/729/36 +f 425/705/110 417/735/107 423/736/107 +f 431/733/37 430/734/20 432/737/37 +f 429/738/106 421/732/109 420/739/106 +f 433/731/21 432/737/37 434/740/21 +f 437/699/108 417/735/107 440/741/108 +f 435/711/30 434/740/21 436/742/30 +f 429/738/106 419/716/105 427/721/105 +f 437/699/26 436/742/30 438/700/26 +f 435/711/103 422/743/104 433/731/104 +f 446/744/103 459/745/104 448/746/104 +f 444/747/26 445/748/30 443/749/26 +f 452/750/106 462/751/105 454/752/105 +f 446/744/30 447/753/21 445/748/30 +f 444/747/108 464/754/107 441/755/108 +f 448/746/21 449/756/37 447/753/21 +f 452/750/106 460/757/109 461/758/106 +f 450/759/37 451/760/20 449/756/37 +f 456/761/110 464/754/107 458/762/107 +f 452/750/20 453/763/31 451/760/20 +f 448/746/104 460/757/109 450/759/109 +f 454/752/31 455/764/22 453/763/31 +f 456/765/110 462/751/105 463/766/110 +f 444/747/108 442/767/103 446/744/103 +f 456/761/22 457/768/36 455/769/22 +f 458/762/36 443/749/26 457/768/36 +f 471/770/36 486/771/26 472/772/36 +f 473/773/22 472/772/36 474/774/22 +f 483/775/103 488/776/108 487/777/103 +f 473/778/110 467/779/105 466/780/110 +f 475/781/31 474/782/22 476/783/31 +f 481/784/104 469/785/109 479/786/109 +f 477/787/20 476/783/31 478/788/20 +f 471/770/107 466/789/110 465/790/107 +f 479/786/37 478/788/20 480/791/37 +f 477/787/106 469/785/109 468/792/106 +f 481/784/21 480/791/37 482/793/21 +f 471/770/107 488/776/108 485/794/108 +f 483/775/30 482/793/21 484/795/30 +f 477/787/106 467/779/105 475/781/105 +f 485/794/26 484/795/30 486/771/26 +f 483/775/103 470/796/104 481/784/104 +f 495/797/36 510/798/26 496/799/36 +f 497/800/22 496/799/36 498/801/22 +f 509/802/108 511/803/103 507/804/103 +f 497/805/110 491/806/105 490/807/110 +f 499/808/31 498/809/22 500/810/31 +f 505/811/104 493/812/109 503/813/109 +f 501/814/20 500/810/31 502/815/20 +f 497/800/110 489/816/107 495/797/107 +f 503/813/37 502/815/20 504/817/37 +f 501/814/106 493/812/109 492/818/106 +f 505/811/21 504/817/37 506/819/21 +f 509/802/108 489/816/107 512/820/108 +f 507/804/30 506/819/21 508/821/30 +f 501/814/106 491/806/105 499/808/105 +f 509/802/26 508/821/30 510/798/26 +f 505/811/104 511/803/103 494/822/104 +f 536/274/23 537/823/111 535/824/23 +f 533/277/24 539/271/112 534/394/24 +f 544/272/113 545/280/114 541/825/113 +f 540/273/111 541/825/113 537/823/111 +f 538/276/112 543/283/115 539/271/112 +f 542/279/115 547/396/116 543/283/115 +f 78/397/29 79/403/30 63/398/30 +f 71/400/31 72/405/32 56/401/32 +f 79/403/30 80/410/33 64/404/33 +f 72/405/32 73/456/20 57/406/20 +f 65/407/26 66/414/34 50/408/34 +f 80/410/33 65/407/26 49/409/26 +f 73/411/20 74/416/35 58/412/35 +f 66/414/34 67/418/36 51/415/36 +f 74/416/35 75/420/37 59/417/37 +f 67/418/36 68/422/38 52/419/38 +f 75/420/37 76/424/39 60/421/39 +f 68/422/38 69/426/22 53/423/22 +f 76/424/39 77/428/21 61/425/21 +f 69/426/22 70/429/40 54/427/40 +f 77/428/21 78/397/29 62/399/29 +f 70/429/40 71/400/31 55/402/31 +f 63/398/41 95/826/41 94/430/42 +f 56/401/43 88/827/43 87/431/44 +f 64/404/45 96/828/45 95/432/41 +f 57/406/46 89/829/46 88/433/43 +f 49/409/47 50/408/48 82/434/48 +f 64/404/45 49/409/47 81/436/47 +f 58/412/49 90/830/49 89/438/46 +f 51/415/50 83/831/50 82/439/48 +f 59/417/51 91/832/51 90/440/49 +f 52/419/52 84/833/52 83/441/50 +f 59/417/51 60/421/53 92/442/53 +f 53/423/54 85/834/54 84/444/52 +f 61/425/55 93/835/55 92/445/53 +f 54/427/56 86/836/56 85/446/54 +f 62/399/42 94/837/42 93/447/55 +f 55/402/44 87/838/44 86/448/56 +f 78/397/57 77/428/58 181/449/58 +f 107/123/59 109/116/22 110/118/22 +f 115/305/36 114/307/36 107/123/59 +f 114/307/36 115/305/36 116/124/26 +f 113/142/26 116/124/26 124/128/30 +f 120/140/30 124/128/30 123/130/21 +f 119/138/21 123/130/21 122/132/37 +f 121/133/35 117/135/35 118/137/37 +f 139/152/59 141/145/22 142/147/22 +f 147/310/36 146/312/36 139/152/59 +f 146/312/36 147/310/36 148/153/26 +f 145/171/26 148/153/26 156/157/30 +f 152/169/30 156/157/30 155/159/21 +f 151/167/21 155/159/21 154/161/37 +f 153/162/35 149/164/35 150/166/37 +f 70/429/61 174/465/61 175/451/62 +f 78/397/57 182/450/57 183/452/63 +f 72/405/64 71/400/62 175/451/62 +f 79/403/63 183/452/63 184/454/65 +f 72/405/64 176/453/64 177/455/66 +f 65/407/67 169/458/67 170/457/68 +f 80/410/65 184/454/65 169/458/67 +f 73/411/66 177/839/66 178/459/69 +f 66/414/68 170/457/68 171/460/70 +f 75/420/71 74/416/69 178/459/69 +f 68/422/72 67/418/70 171/460/70 +f 75/420/71 179/461/71 180/463/73 +f 69/426/74 68/422/72 172/462/72 +f 76/424/73 180/463/73 181/449/58 +f 69/426/74 173/464/74 174/465/61 +f 194/466/75 206/482/75 207/467/76 +f 195/469/31 192/480/31 194/466/20 +f 188/474/80 203/840/80 204/475/81 +f 190/476/81 204/475/81 205/479/83 +f 193/470/20 194/466/20 196/468/37 +f 194/466/75 192/480/83 205/479/83 +f 200/483/33 187/471/30 201/484/30 +f 186/485/86 201/484/87 202/487/87 +f 196/468/76 207/467/76 208/491/89 +f 191/478/37 196/468/37 198/492/21 +f 189/473/21 198/492/21 201/484/30 +f 198/492/89 208/491/89 202/487/87 +f 188/493/80 186/485/86 185/488/86 +f 197/490/40 190/476/40 192/480/31 +f 218/496/81 230/511/81 231/497/83 +f 217/499/22 219/516/36 216/500/36 +f 214/504/86 212/841/87 227/505/87 +f 214/504/86 228/506/86 229/509/80 +f 217/499/22 218/496/22 220/498/31 +f 218/496/81 216/500/80 229/509/80 +f 224/512/39 211/501/37 225/513/37 +f 210/514/89 225/513/76 226/517/76 +f 220/498/83 231/497/83 232/521/75 +f 215/508/31 220/498/31 222/522/20 +f 213/503/20 222/522/20 225/513/37 +f 222/522/75 232/521/75 226/517/76 +f 212/523/87 210/514/89 209/518/89 +f 221/520/34 214/504/34 216/500/36 +f 244/526/80 242/530/86 254/527/86 +f 243/529/30 240/540/30 242/530/26 +f 236/535/76 251/842/76 252/536/89 +f 240/540/87 238/537/89 252/536/89 +f 241/531/26 242/530/26 244/526/36 +f 240/540/87 253/541/87 254/527/86 +f 248/543/32 235/532/31 249/544/31 +f 234/545/75 249/544/83 250/547/83 +f 246/551/81 244/526/80 255/528/80 +f 239/539/36 244/526/36 246/551/22 +f 237/534/22 246/551/22 249/544/31 +f 246/551/81 256/552/81 250/547/83 +f 234/545/75 233/548/75 251/553/76 +f 245/550/29 238/537/29 240/540/30 +f 266/556/89 278/572/89 279/557/87 +f 267/559/37 264/570/37 266/556/21 +f 262/564/75 260/843/83 275/565/83 +f 262/564/75 276/566/75 277/569/76 +f 265/560/21 266/556/21 268/558/30 +f 266/556/89 264/570/76 277/569/76 +f 259/561/36 273/582/36 258/573/38 +f 258/573/81 273/582/80 274/576/80 +f 268/558/87 279/557/87 280/580/86 +f 263/568/30 268/558/30 270/581/26 +f 261/563/26 270/581/26 273/582/36 +f 270/581/86 280/580/86 274/576/80 +f 258/573/81 257/577/81 275/583/83 +f 269/579/35 262/564/35 264/570/37 +f 302/586/103 298/609/103 315/587/104 +f 300/589/26 302/586/30 301/590/30 +f 310/592/105 308/600/106 317/593/106 +f 302/586/30 304/588/21 303/595/21 +f 314/596/107 320/603/107 297/597/108 +f 304/588/21 306/599/37 305/598/37 +f 306/599/109 316/605/109 317/593/106 +f 306/599/37 308/600/20 307/601/20 +f 314/596/107 312/610/110 319/602/110 +f 308/600/20 310/592/31 309/604/31 +f 304/588/104 315/587/104 316/605/109 +f 310/592/31 312/607/22 311/606/22 +f 312/607/110 310/592/105 318/594/105 +f 300/589/108 297/597/108 298/609/103 +f 312/610/22 314/596/36 313/611/36 +f 314/596/36 300/589/26 299/591/26 +f 326/613/103 322/636/103 339/614/104 +f 324/616/26 326/613/30 325/617/30 +f 332/619/106 341/627/106 342/620/105 +f 325/617/30 326/613/30 328/615/21 +f 324/616/108 338/630/107 344/623/107 +f 328/615/21 330/628/37 329/625/37 +f 332/619/106 330/628/109 340/626/109 +f 330/628/37 332/619/20 331/629/20 +f 338/630/107 336/637/110 343/631/110 +f 332/619/20 334/621/31 333/632/31 +f 328/615/104 339/614/104 340/626/109 +f 334/621/31 336/634/22 335/633/22 +f 336/634/110 334/621/105 342/620/105 +f 324/616/108 321/624/108 322/636/103 +f 336/637/22 338/630/36 337/638/36 +f 338/630/36 324/616/26 323/618/26 +f 350/640/103 346/663/103 363/641/104 +f 348/643/26 350/640/30 349/644/30 +f 356/646/106 365/654/106 366/647/105 +f 350/640/30 352/642/21 351/649/21 +f 362/650/107 368/658/107 345/651/108 +f 352/642/21 354/655/37 353/652/37 +f 356/646/106 354/655/109 364/653/109 +f 354/655/37 356/646/20 355/656/20 +f 362/650/107 360/844/110 367/657/110 +f 356/646/20 358/648/31 357/659/31 +f 352/642/104 363/641/104 364/653/109 +f 358/648/31 360/661/22 359/660/22 +f 360/661/110 358/648/105 366/647/105 +f 348/643/108 345/651/108 346/663/103 +f 359/664/22 360/844/22 362/650/36 +f 361/665/36 362/650/36 348/643/26 +f 376/666/36 375/684/36 389/667/26 +f 377/669/22 375/684/36 376/666/36 +f 389/667/108 392/689/108 391/671/103 +f 377/673/110 379/676/105 371/674/105 +f 379/676/31 377/673/22 378/677/22 +f 385/679/104 374/691/104 373/680/109 +f 382/682/20 381/686/20 379/676/31 +f 377/669/110 370/845/110 369/683/107 +f 383/681/37 381/686/20 382/682/20 +f 381/686/106 383/681/109 373/680/109 +f 385/679/21 383/681/37 384/685/37 +f 375/684/107 369/683/107 392/689/108 +f 387/672/30 385/679/21 386/688/21 +f 381/686/106 372/687/106 371/674/105 +f 389/667/26 387/672/30 388/690/30 +f 387/672/103 391/671/103 374/691/104 +f 398/692/103 394/728/103 411/693/104 +f 396/695/26 398/692/30 397/696/30 +f 424/698/36 423/736/36 437/699/26 +f 404/701/106 413/713/106 414/702/105 +f 398/692/30 400/694/21 399/704/21 +f 425/705/22 423/736/36 424/698/36 +f 410/707/107 416/719/107 393/708/108 +f 400/694/21 402/724/37 401/709/37 +f 437/699/108 440/741/108 439/710/103 +f 404/701/106 402/724/109 412/712/109 +f 401/709/37 402/724/37 404/701/20 +f 425/715/110 427/721/105 419/716/105 +f 408/718/110 415/846/110 416/719/107 +f 404/701/20 406/703/31 405/720/31 +f 427/721/31 425/715/22 426/722/22 +f 400/694/104 411/693/104 412/712/109 +f 406/703/31 408/726/22 407/725/22 +f 408/726/110 406/703/105 414/702/105 +f 398/692/103 396/695/108 393/708/108 +f 408/718/22 410/707/36 409/729/36 +f 433/731/104 422/743/104 421/732/109 +f 430/734/20 429/738/20 427/721/31 +f 410/707/36 396/695/26 395/697/26 +f 425/705/110 418/847/110 417/735/107 +f 431/733/37 429/738/20 430/734/20 +f 429/738/106 431/733/109 421/732/109 +f 433/731/21 431/733/37 432/737/37 +f 437/699/108 423/736/107 417/735/107 +f 435/711/30 433/731/21 434/740/21 +f 429/738/106 420/739/106 419/716/105 +f 437/699/26 435/711/30 436/742/30 +f 435/711/103 439/710/103 422/743/104 +f 446/744/103 442/767/103 459/745/104 +f 444/747/26 446/744/30 445/748/30 +f 452/750/106 461/758/106 462/751/105 +f 446/744/30 448/746/21 447/753/21 +f 444/747/108 458/762/107 464/754/107 +f 448/746/21 450/759/37 449/756/37 +f 452/750/106 450/759/109 460/757/109 +f 450/759/37 452/750/20 451/760/20 +f 456/761/110 463/848/110 464/754/107 +f 452/750/20 454/752/31 453/763/31 +f 448/746/104 459/745/104 460/757/109 +f 454/752/31 456/765/22 455/764/22 +f 456/765/110 454/752/105 462/751/105 +f 444/747/108 441/755/108 442/767/103 +f 456/761/22 458/762/36 457/768/36 +f 458/762/36 444/747/26 443/749/26 +f 471/770/36 485/794/26 486/771/26 +f 473/773/22 471/770/36 472/772/36 +f 483/775/103 485/794/108 488/776/108 +f 473/778/110 475/781/105 467/779/105 +f 475/781/31 473/778/22 474/782/22 +f 481/784/104 470/796/104 469/785/109 +f 477/787/20 475/781/31 476/783/31 +f 471/770/107 473/773/110 466/789/110 +f 479/786/37 477/787/20 478/788/20 +f 477/787/106 479/786/109 469/785/109 +f 481/784/21 479/786/37 480/791/37 +f 471/770/107 465/790/107 488/776/108 +f 483/775/30 481/784/21 482/793/21 +f 477/787/106 468/792/106 467/779/105 +f 485/794/26 483/775/30 484/795/30 +f 483/775/103 487/777/103 470/796/104 +f 495/797/36 509/802/26 510/798/26 +f 497/800/22 495/797/36 496/799/36 +f 509/802/108 512/820/108 511/803/103 +f 497/805/110 499/808/105 491/806/105 +f 499/808/31 497/805/22 498/809/22 +f 505/811/104 494/822/104 493/812/109 +f 501/814/20 499/808/31 500/810/31 +f 497/800/110 490/849/110 489/816/107 +f 503/813/37 501/814/20 502/815/20 +f 501/814/106 503/813/109 493/812/109 +f 505/811/21 503/813/37 504/817/37 +f 509/802/108 495/797/107 489/816/107 +f 507/804/30 505/811/21 506/819/21 +f 501/814/106 492/818/106 491/806/105 +f 509/802/26 507/804/30 508/821/30 +f 505/811/104 507/804/103 511/803/103 +f 536/274/23 540/273/111 537/823/111 +f 533/277/24 538/276/112 539/271/112 +f 544/272/113 548/284/114 545/280/114 +f 540/273/111 544/272/113 541/825/113 +f 538/276/112 542/279/115 543/283/115 +f 542/279/115 546/286/116 547/396/116 diff --git a/src/main/resources/assets/hbm/textures/blocks/coolant_duct.png b/src/main/resources/assets/hbm/textures/blocks/coolant_duct.png deleted file mode 100644 index d7ba4a2de..000000000 Binary files a/src/main/resources/assets/hbm/textures/blocks/coolant_duct.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/blocks/coolant_duct_icon.png b/src/main/resources/assets/hbm/textures/blocks/coolant_duct_icon.png deleted file mode 100644 index bbade3f2b..000000000 Binary files a/src/main/resources/assets/hbm/textures/blocks/coolant_duct_icon.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/blocks/coolant_duct_solid.png b/src/main/resources/assets/hbm/textures/blocks/coolant_duct_solid.png deleted file mode 100644 index a08eca758..000000000 Binary files a/src/main/resources/assets/hbm/textures/blocks/coolant_duct_solid.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down.png new file mode 100644 index 000000000..6266209fd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_down.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up.png new file mode 100644 index 000000000..7b615b1cb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_side_up.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top.png b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top.png new file mode 100644 index 000000000..5d66fffd1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_grabber_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_pull.png b/src/main/resources/assets/hbm/textures/blocks/crane_pull.png new file mode 100644 index 000000000..a99dd262e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_pull.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_side_pull.png b/src/main/resources/assets/hbm/textures/blocks/crane_side_pull.png new file mode 100644 index 000000000..ff732c720 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_side_pull.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_back_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_back_left.png new file mode 100644 index 000000000..1ed0fa151 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_back_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_back_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_back_right.png new file mode 100644 index 000000000..7e5fb324e Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_back_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_front_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_front_left.png new file mode 100644 index 000000000..1fd473e55 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_front_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_front_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_front_right.png new file mode 100644 index 000000000..a1c38b5cf Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_front_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_inner.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_inner.png new file mode 100644 index 000000000..9a6d83c4a Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_inner.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_inner_side.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_inner_side.png new file mode 100644 index 000000000..f2a582e65 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_inner_side.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_left.png new file mode 100644 index 000000000..a545cccbd Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_right.png new file mode 100644 index 000000000..dffb10346 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_top_left.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_top_left.png new file mode 100644 index 000000000..821df0203 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_top_left.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_splitter_top_right.png b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_top_right.png new file mode 100644 index 000000000..7d072091f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_splitter_top_right.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/crane_top_wide.png b/src/main/resources/assets/hbm/textures/blocks/crane_top_wide.png new file mode 100644 index 000000000..029550db4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/crane_top_wide.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/deco_steel_blank_outer.png b/src/main/resources/assets/hbm/textures/blocks/deco_steel_blank_outer.png new file mode 100644 index 000000000..6602a5474 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/deco_steel_blank_outer.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/part_top.png b/src/main/resources/assets/hbm/textures/blocks/part_top.png new file mode 100644 index 000000000..8df82ffed Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/part_top.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/struct_watz_core.png b/src/main/resources/assets/hbm/textures/blocks/struct_watz_core.png new file mode 100644 index 000000000..b1680dbe3 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/struct_watz_core.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/vent.png b/src/main/resources/assets/hbm/textures/blocks/vent.png new file mode 100644 index 000000000..e8e689ef9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/vent.png differ diff --git a/src/main/resources/assets/hbm/textures/blocks/vent_side.png b/src/main/resources/assets/hbm/textures/blocks/vent_side.png new file mode 100644 index 000000000..51f0e451f Binary files /dev/null and b/src/main/resources/assets/hbm/textures/blocks/vent_side.png differ diff --git a/src/main/resources/assets/hbm/textures/entity/creeper_base.png b/src/main/resources/assets/hbm/textures/entity/creeper_base.png new file mode 100644 index 000000000..abdb54008 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/entity/creeper_base.png differ diff --git a/src/main/resources/assets/hbm/textures/entity/creeper_mustard.png b/src/main/resources/assets/hbm/textures/entity/creeper_mustard.png new file mode 100644 index 000000000..7d2016173 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/entity/creeper_mustard.png differ diff --git a/src/main/resources/assets/hbm/textures/entity/creeper_phosgene.png b/src/main/resources/assets/hbm/textures/entity/creeper_phosgene.png new file mode 100644 index 000000000..da0cb9d93 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/entity/creeper_phosgene.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_watz.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_watz.png index 861c7678a..975289a43 100644 Binary files a/src/main/resources/assets/hbm/textures/gui/reactors/gui_watz.png and b/src/main/resources/assets/hbm/textures/gui/reactors/gui_watz.png differ diff --git a/src/main/resources/assets/hbm/textures/gui/storage/gui_crane_grabber.png b/src/main/resources/assets/hbm/textures/gui/storage/gui_crane_grabber.png new file mode 100644 index 000000000..fda167041 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/gui/storage/gui_crane_grabber.png differ diff --git a/src/main/resources/assets/hbm/textures/items/crystal_energy.png b/src/main/resources/assets/hbm/textures/items/crystal_energy.png deleted file mode 100644 index f4d48089a..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/crystal_energy.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/items/pellet_coolant.png b/src/main/resources/assets/hbm/textures/items/pellet_coolant.png deleted file mode 100644 index 59c00dec4..000000000 Binary files a/src/main/resources/assets/hbm/textures/items/pellet_coolant.png and /dev/null differ diff --git a/src/main/resources/assets/hbm/textures/models/machines/watz_pump.png b/src/main/resources/assets/hbm/textures/models/machines/watz_pump.png new file mode 100644 index 000000000..6f2582f83 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/machines/watz_pump.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png b/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png new file mode 100644 index 000000000..e3fd48d0c Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/boltgun.png differ