sulfur caves, new test pipe
@ -17,7 +17,7 @@ public interface IFluidConnector {
|
||||
* @param power
|
||||
* @return
|
||||
*/
|
||||
public int transferFluid(FluidType type, int fluid);
|
||||
public long transferFluid(FluidType type, long fluid);
|
||||
|
||||
/**
|
||||
* Whether the given side can be connected to
|
||||
@ -33,7 +33,7 @@ public interface IFluidConnector {
|
||||
* @param type
|
||||
* @return
|
||||
*/
|
||||
public int getDemand(FluidType type);
|
||||
public long getDemand(FluidType type);
|
||||
|
||||
/**
|
||||
* Basic implementation of subscribing to a nearby power grid
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package api.hbm.fluid;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.inventory.fluid.FluidType;
|
||||
@ -9,7 +10,7 @@ public interface IPipeNet {
|
||||
public void joinNetworks(IPipeNet network);
|
||||
|
||||
public List<IFluidConductor> getLinks();
|
||||
public List<IFluidConnector> getSubscribers();
|
||||
public HashSet<IFluidConnector> getSubscribers();
|
||||
|
||||
public IPipeNet joinLink(IFluidConductor conductor);
|
||||
public void leaveLink(IFluidConductor conductor);
|
||||
@ -22,6 +23,6 @@ public interface IPipeNet {
|
||||
|
||||
public boolean isValid();
|
||||
|
||||
public long transferFluid(long power);
|
||||
public long transferFluid(long fill);
|
||||
public FluidType getType();
|
||||
}
|
||||
|
||||
@ -1,15 +1,19 @@
|
||||
package api.hbm.fluid;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.inventory.fluid.FluidType;
|
||||
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
|
||||
public class PipeNet implements IPipeNet {
|
||||
|
||||
|
||||
private boolean valid = true;
|
||||
private FluidType type;
|
||||
private List<IFluidConductor> links = new ArrayList();
|
||||
private List<IFluidConnector> subscribers = new ArrayList();
|
||||
private HashSet<IFluidConnector> subscribers = new HashSet();
|
||||
|
||||
public PipeNet(FluidType type) {
|
||||
this.type = type;
|
||||
@ -40,44 +44,79 @@ public class PipeNet implements IPipeNet {
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<IFluidConnector> getSubscribers() {
|
||||
public HashSet<IFluidConnector> getSubscribers() {
|
||||
return subscribers;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IPipeNet joinLink(IFluidConductor conductor) {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
|
||||
if(conductor.getPipeNet(type) != null)
|
||||
conductor.getPipeNet(type).leaveLink(conductor);
|
||||
|
||||
conductor.setPipeNet(type, this);
|
||||
this.links.add(conductor);
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void leaveLink(IFluidConductor conductor) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
conductor.setPipeNet(type, null);
|
||||
this.links.remove(conductor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void subscribe(IFluidConnector connector) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
this.subscribers.add(connector);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unsubscribe(IFluidConnector connector) {
|
||||
// TODO Auto-generated method stub
|
||||
|
||||
this.subscribers.remove(connector);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isSubscribed(IFluidConnector connector) {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
return this.subscribers.contains(connector);
|
||||
}
|
||||
|
||||
@Override
|
||||
public long transferFluid(long power) {
|
||||
// TODO Auto-generated method stub
|
||||
return 0;
|
||||
public long transferFluid(long fill) {
|
||||
|
||||
this.subscribers.removeIf(x ->
|
||||
x == null || !(x instanceof TileEntity) || ((TileEntity)x).isInvalid()
|
||||
);
|
||||
|
||||
if(this.subscribers.isEmpty())
|
||||
return fill;
|
||||
|
||||
List<IFluidConnector> subList = new ArrayList(subscribers);
|
||||
|
||||
List<Long> weight = new ArrayList();
|
||||
long totalReq = 0;
|
||||
|
||||
for(IFluidConnector con : subList) {
|
||||
long req = con.getDemand(type);
|
||||
weight.add(req);
|
||||
totalReq += req;
|
||||
}
|
||||
|
||||
if(totalReq == 0)
|
||||
return fill;
|
||||
|
||||
long totalGiven = 0;
|
||||
|
||||
for(int i = 0; i < subList.size(); i++) {
|
||||
IFluidConnector con = subList.get(i);
|
||||
long req = weight.get(i);
|
||||
double fraction = (double)req / (double)totalReq;
|
||||
|
||||
long given = (long) Math.floor(fraction * fill);
|
||||
|
||||
totalGiven += (given - con.transferFluid(type, given));
|
||||
}
|
||||
|
||||
return fill - totalGiven;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -87,13 +126,17 @@ public class PipeNet implements IPipeNet {
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
// TODO Auto-generated method stub
|
||||
this.valid = false;
|
||||
this.subscribers.clear();
|
||||
|
||||
for(IFluidConductor con : this.links)
|
||||
con.setPipeNet(type, null);
|
||||
|
||||
this.links.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isValid() {
|
||||
// TODO Auto-generated method stub
|
||||
return false;
|
||||
return this.valid;
|
||||
}
|
||||
}
|
||||
|
||||
64
src/main/java/com/hbm/blocks/BlockEnumMulti.java
Normal file
@ -0,0 +1,64 @@
|
||||
package com.hbm.blocks;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.creativetab.CreativeTabs;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
|
||||
public class BlockEnumMulti extends BlockBase {
|
||||
|
||||
public Class<? extends Enum> theEnum;
|
||||
public boolean multiName;
|
||||
private boolean multiTexture;
|
||||
|
||||
public BlockEnumMulti(Material mat, Class<? extends Enum> theEnum, boolean multiName, boolean multiTexture) {
|
||||
super(mat);
|
||||
this.theEnum = theEnum;
|
||||
this.multiName = multiName;
|
||||
this.multiTexture = multiTexture;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int damageDropped(int meta) {
|
||||
return meta;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void getSubBlocks(Item item, CreativeTabs tab, List list) {
|
||||
for(int i = 0; i < theEnum.getEnumConstants().length; ++i) {
|
||||
list.add(new ItemStack(item, 1, i));
|
||||
}
|
||||
}
|
||||
|
||||
private IIcon[] icons;
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister reg) {
|
||||
|
||||
if(multiTexture) {
|
||||
Enum[] enums = theEnum.getEnumConstants();
|
||||
this.icons = new IIcon[enums.length];
|
||||
|
||||
for(int i = 0; i < icons.length; i++) {
|
||||
Enum num = enums[i];
|
||||
this.icons[i] = reg.registerIcon(this.getTextureName() + "." + num.name().toLowerCase());
|
||||
}
|
||||
} else {
|
||||
this.blockIcon = reg.registerIcon(this.getTextureName());
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int meta) {
|
||||
return this.icons[meta % this.icons.length];
|
||||
}
|
||||
}
|
||||
8
src/main/java/com/hbm/blocks/BlockEnums.java
Normal file
@ -0,0 +1,8 @@
|
||||
package com.hbm.blocks;
|
||||
|
||||
public class BlockEnums {
|
||||
|
||||
public static enum EnumStoneType {
|
||||
SULFUR
|
||||
}
|
||||
}
|
||||
@ -133,6 +133,9 @@ public class ModBlocks {
|
||||
public static Block ore_depth_nether_neodymium;
|
||||
|
||||
public static Block stone_porous;
|
||||
public static Block stone_resource;
|
||||
public static Block stalagmite;
|
||||
public static Block stalactite;
|
||||
|
||||
public static Block depth_brick;
|
||||
public static Block depth_tiles;
|
||||
@ -476,6 +479,9 @@ public class ModBlocks {
|
||||
public static Block geysir_vapor;
|
||||
public static Block geysir_nether;
|
||||
|
||||
public static Block observer_off;
|
||||
public static Block observer_on;
|
||||
|
||||
public static Block flame_war;
|
||||
public static Block float_bomb;
|
||||
public static Block therm_endo;
|
||||
@ -1340,6 +1346,9 @@ public class ModBlocks {
|
||||
ore_depth_nether_neodymium = new BlockDepthOre().setBlockName("ore_depth_nether_neodymium").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":ore_depth_nether_neodymium");
|
||||
|
||||
stone_porous = new BlockPorous().setBlockName("stone_porous").setCreativeTab(MainRegistry.blockTab).setBlockTextureName(RefStrings.MODID + ":stone_porous");
|
||||
stone_resource = new BlockEnumMulti(Material.rock, BlockEnums.EnumStoneType.class, true, true).setBlockName("stone_resource").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F);
|
||||
stalagmite = new BlockStalagmite().setBlockName("stalagmite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F);
|
||||
stalactite = new BlockStalagmite().setBlockName("stalactite").setCreativeTab(MainRegistry.blockTab).setHardness(0.5F).setResistance(2.0F);
|
||||
|
||||
basalt = new BlockGeneric(Material.rock).setBlockName("basalt").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt");
|
||||
basalt_sulfur = new BlockOre(Material.rock).setBlockName("basalt_sulfur").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(10.0F).setBlockTextureName(RefStrings.MODID + ":basalt_sulfur");
|
||||
@ -1679,6 +1688,9 @@ public class ModBlocks {
|
||||
geysir_vapor = new BlockGeysir(Material.rock).setBlockName("geysir_vapor").setStepSound(Block.soundTypeStone).setHardness(5.0F);
|
||||
geysir_nether = new BlockGeysir(Material.rock).setBlockName("geysir_nether").setLightLevel(1.0F).setStepSound(Block.soundTypeStone).setHardness(2.0F);
|
||||
|
||||
observer_off = new BlockObserver(Material.iron, false).setBlockName("observer_off").setStepSound(Block.soundTypeStone).setHardness(2.0F);
|
||||
observer_on = new BlockObserver(Material.iron, true).setBlockName("observer_on").setStepSound(Block.soundTypeStone).setHardness(2.0F);
|
||||
|
||||
nuke_gadget = new NukeGadget(Material.iron).setBlockName("nuke_gadget").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":theGadget");
|
||||
nuke_boy = new NukeBoy(Material.iron).setBlockName("nuke_boy").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":lilBoy");
|
||||
nuke_man = new NukeMan(Material.iron).setBlockName("nuke_man").setCreativeTab(MainRegistry.nukeTab).setHardness(5.0F).setResistance(6000.0F).setBlockTextureName(RefStrings.MODID + ":fatMan");
|
||||
@ -2377,6 +2389,11 @@ public class ModBlocks {
|
||||
GameRegistry.registerBlock(crystal_robust, crystal_robust.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(crystal_trixite, crystal_trixite.getUnlocalizedName());
|
||||
|
||||
//Resource-bearing Stones
|
||||
GameRegistry.registerBlock(stone_resource, ItemBlockBase.class, stone_resource.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(stalagmite, ItemBlockBase.class, stalagmite.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(stalactite, ItemBlockBase.class, stalactite.getUnlocalizedName());
|
||||
|
||||
//Stone Variants
|
||||
GameRegistry.registerBlock(stone_porous, stone_porous.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(stone_gneiss, stone_gneiss.getUnlocalizedName());
|
||||
@ -2829,6 +2846,9 @@ public class ModBlocks {
|
||||
GameRegistry.registerBlock(bomber, bomber.getUnlocalizedName());
|
||||
|
||||
//Machines
|
||||
//GameRegistry.registerBlock(observer_off, observer_off.getUnlocalizedName());
|
||||
//GameRegistry.registerBlock(observer_on, observer_on.getUnlocalizedName());
|
||||
|
||||
GameRegistry.registerBlock(anvil_iron, ItemBlockBase.class, anvil_iron.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(anvil_lead, ItemBlockBase.class, anvil_lead.getUnlocalizedName());
|
||||
GameRegistry.registerBlock(anvil_steel, ItemBlockBase.class, anvil_steel.getUnlocalizedName());
|
||||
|
||||
70
src/main/java/com/hbm/blocks/generic/BlockStalagmite.java
Normal file
@ -0,0 +1,70 @@
|
||||
package com.hbm.blocks.generic;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.BlockEnumMulti;
|
||||
import com.hbm.blocks.BlockEnums;
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.items.ModItems;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.util.AxisAlignedBB;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class BlockStalagmite extends BlockEnumMulti {
|
||||
|
||||
public BlockStalagmite() {
|
||||
super(Material.rock, BlockEnums.EnumStoneType.class, true, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isOpaqueCube() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderAsNormalBlock() {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderType() {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int meta, Random rang, int fortune) {
|
||||
|
||||
switch(meta) {
|
||||
case 0: return ModItems.sulfur;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
|
||||
|
||||
if(this == ModBlocks.stalagmite)
|
||||
return World.doesBlockHaveSolidTopSurface(world, x, y - 1, z);
|
||||
if(this == ModBlocks.stalactite)
|
||||
return world.isSideSolid(x, y + 1, z, ForgeDirection.DOWN);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
|
||||
if(!canPlaceBlockAt(world, x, y, z)) {
|
||||
world.func_147480_a(x, y, z, true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
83
src/main/java/com/hbm/blocks/machine/BlockObserver.java
Normal file
@ -0,0 +1,83 @@
|
||||
package com.hbm.blocks.machine;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.lib.RefStrings;
|
||||
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockPistonBase;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.IBlockAccess;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
|
||||
public class BlockObserver extends Block {
|
||||
|
||||
private boolean isActive;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon iconFront;
|
||||
@SideOnly(Side.CLIENT)
|
||||
private IIcon iconBack;
|
||||
|
||||
public BlockObserver(Material mat, boolean isActive) {
|
||||
super(mat);
|
||||
this.isActive = isActive;
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconRegister) {
|
||||
this.iconBack = iconRegister.registerIcon(RefStrings.MODID + (this.isActive ? ":observer_back_on" : ":observer_back_off"));
|
||||
this.iconFront = iconRegister.registerIcon(RefStrings.MODID + ":observer_front");
|
||||
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":observer_side");
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int metadata) {
|
||||
ForgeDirection dir = ForgeDirection.getOrientation(metadata);
|
||||
ForgeDirection opp = dir.getOpposite();
|
||||
return side == dir.ordinal() ? iconFront : side == opp.ordinal() ? iconBack : blockIcon;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Item getItemDropped(int meta, Random rand, int luck) {
|
||||
return Item.getItemFromBlock(ModBlocks.observer_off);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) {
|
||||
int l = BlockPistonBase.determineOrientation(world, x, y, z, player);
|
||||
world.setBlockMetadataWithNotify(x, y, z, l, 2);
|
||||
|
||||
if(this.isActive)
|
||||
world.scheduleBlockUpdate(x, y, z, this, 2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
|
||||
|
||||
if(!this.isActive) {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean canProvidePower() {
|
||||
return this.isActive;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int isProvidingWeakPower(IBlockAccess world, int x, int y, int z, int side) {
|
||||
return this.isActive ? 15 : 0;
|
||||
}
|
||||
}
|
||||
@ -160,63 +160,55 @@ public class SoyuzLauncher extends BlockDummyable {
|
||||
private static boolean keepInventory;
|
||||
|
||||
@Override
|
||||
public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int i)
|
||||
{
|
||||
if (!keepInventory)
|
||||
{
|
||||
ISidedInventory tileentityfurnace = (ISidedInventory)world.getTileEntity(x, y, z);
|
||||
public void breakBlock(World world, int x, int y, int z, Block p_149749_5_, int i) {
|
||||
if(!keepInventory) {
|
||||
ISidedInventory tileentityfurnace = (ISidedInventory) world.getTileEntity(x, y, z);
|
||||
|
||||
if (tileentityfurnace != null)
|
||||
{
|
||||
for (int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1)
|
||||
{
|
||||
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
|
||||
if(tileentityfurnace != null) {
|
||||
for(int i1 = 0; i1 < tileentityfurnace.getSizeInventory(); ++i1) {
|
||||
ItemStack itemstack = tileentityfurnace.getStackInSlot(i1);
|
||||
|
||||
if (itemstack != null)
|
||||
{
|
||||
float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
|
||||
float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
|
||||
float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
|
||||
if(itemstack != null) {
|
||||
float f = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
|
||||
float f1 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
|
||||
float f2 = this.field_149933_a.nextFloat() * 0.8F + 0.1F;
|
||||
|
||||
while (itemstack.stackSize > 0)
|
||||
{
|
||||
int j1 = this.field_149933_a.nextInt(21) + 10;
|
||||
while(itemstack.stackSize > 0) {
|
||||
int j1 = this.field_149933_a.nextInt(21) + 10;
|
||||
|
||||
if (j1 > itemstack.stackSize)
|
||||
{
|
||||
j1 = itemstack.stackSize;
|
||||
}
|
||||
if(j1 > itemstack.stackSize) {
|
||||
j1 = itemstack.stackSize;
|
||||
}
|
||||
|
||||
itemstack.stackSize -= j1;
|
||||
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
|
||||
itemstack.stackSize -= j1;
|
||||
EntityItem entityitem = new EntityItem(world, x + f, y + f1, z + f2, new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
|
||||
|
||||
if (itemstack.hasTagCompound())
|
||||
{
|
||||
entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
|
||||
}
|
||||
if(itemstack.hasTagCompound()) {
|
||||
entityitem.getEntityItem().setTagCompound((NBTTagCompound) itemstack.getTagCompound().copy());
|
||||
}
|
||||
|
||||
float f3 = 0.05F;
|
||||
entityitem.motionX = (float)this.field_149933_a.nextGaussian() * f3;
|
||||
entityitem.motionY = (float)this.field_149933_a.nextGaussian() * f3 + 0.2F;
|
||||
entityitem.motionZ = (float)this.field_149933_a.nextGaussian() * f3;
|
||||
world.spawnEntityInWorld(entityitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(int l = 0; l < 10; l++)
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_launcher, 38)));
|
||||
for(int l = 0; l < 8; l++)
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.concrete_smooth, 41)));
|
||||
for(int l = 0; l < 6; l++)
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 64)));
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 53)));
|
||||
|
||||
world.func_147453_f(x, y, z, p_149749_5_);
|
||||
}
|
||||
}
|
||||
float f3 = 0.05F;
|
||||
entityitem.motionX = (float) this.field_149933_a.nextGaussian() * f3;
|
||||
entityitem.motionY = (float) this.field_149933_a.nextGaussian() * f3 + 0.2F;
|
||||
entityitem.motionZ = (float) this.field_149933_a.nextGaussian() * f3;
|
||||
world.spawnEntityInWorld(entityitem);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.breakBlock(world, x, y, z, p_149749_5_, i);
|
||||
}
|
||||
for(int l = 0; l < 10; l++)
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_launcher, 38)));
|
||||
for(int l = 0; l < 8; l++)
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.concrete_smooth, 41)));
|
||||
for(int l = 0; l < 6; l++)
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 64)));
|
||||
world.spawnEntityInWorld(new EntityItem(world, x + 0.5, y + 0.5, z + 0.5, new ItemStack(ModBlocks.struct_scaffold, 53)));
|
||||
|
||||
world.func_147453_f(x, y, z, p_149749_5_);
|
||||
}
|
||||
}
|
||||
|
||||
super.breakBlock(world, x, y, z, p_149749_5_, i);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -3,16 +3,36 @@ package com.hbm.blocks.test;
|
||||
import com.hbm.tileentity.network.TileEntityPipeBaseNT;
|
||||
|
||||
import cpw.mods.fml.client.registry.RenderingRegistry;
|
||||
import cpw.mods.fml.relauncher.Side;
|
||||
import cpw.mods.fml.relauncher.SideOnly;
|
||||
import net.minecraft.block.BlockContainer;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||
import net.minecraft.tileentity.TileEntity;
|
||||
import net.minecraft.util.IIcon;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class TestPipe extends BlockContainer {
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
protected IIcon overlay;
|
||||
|
||||
public TestPipe(Material mat) {
|
||||
super(mat);
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public void registerBlockIcons(IIconRegister iconRegister) {
|
||||
super.registerBlockIcons(iconRegister);
|
||||
this.overlay = iconRegister.registerIcon(this.getTextureName() + "_overlay");
|
||||
}
|
||||
|
||||
@Override
|
||||
@SideOnly(Side.CLIENT)
|
||||
public IIcon getIcon(int side, int metadata) {
|
||||
return side == 0 ? this.blockIcon : this.overlay;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
|
||||
|
||||
@ -29,7 +29,7 @@ public class MultiblockHandlerXR {
|
||||
if(a == ox && b == oy && c == oz)
|
||||
continue;
|
||||
|
||||
if(!world.getBlock(a, b, c).canPlaceBlockAt(world, a, b, c)) {
|
||||
if(!world.getBlock(a, b, c).isReplaceable(world, a, b, c)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@ -10,6 +10,7 @@ import com.hbm.handler.BulletConfiguration;
|
||||
import com.hbm.interfaces.IBulletImpactBehavior;
|
||||
import com.hbm.interfaces.IBulletUpdateBehavior;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.lib.ModDamageSource;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.packet.AuxParticlePacketNT;
|
||||
import com.hbm.packet.PacketDispatcher;
|
||||
@ -92,6 +93,7 @@ public class GunNPCFactory {
|
||||
bullet.explosive = 0.5F;
|
||||
bullet.setToBolt(BulletConfiguration.BOLT_LACUNAE);
|
||||
bullet.vPFX = "reddust";
|
||||
bullet.damageType = ModDamageSource.s_laser;
|
||||
|
||||
return bullet;
|
||||
}
|
||||
@ -124,6 +126,7 @@ public class GunNPCFactory {
|
||||
bullet.leadChance = 0;
|
||||
bullet.setToBolt(BulletConfiguration.BOLT_NIGHTMARE);
|
||||
bullet.vPFX = "reddust";
|
||||
bullet.damageType = ModDamageSource.s_laser;
|
||||
|
||||
bullet.bImpact = new IBulletImpactBehavior() {
|
||||
|
||||
@ -210,6 +213,7 @@ public class GunNPCFactory {
|
||||
bullet.leadChance = 0;
|
||||
bullet.doesRicochet = false;
|
||||
bullet.setToBolt(BulletConfiguration.BOLT_WORM);
|
||||
bullet.damageType = ModDamageSource.s_laser;
|
||||
|
||||
return bullet;
|
||||
}
|
||||
@ -226,6 +230,7 @@ public class GunNPCFactory {
|
||||
bullet.leadChance = 0;
|
||||
bullet.doesRicochet = false;
|
||||
bullet.setToBolt(BulletConfiguration.BOLT_LASER);
|
||||
bullet.damageType = ModDamageSource.s_laser;
|
||||
|
||||
return bullet;
|
||||
}
|
||||
|
||||
@ -10,6 +10,7 @@ import static com.hbm.items.ModItems.*;
|
||||
import static com.hbm.blocks.ModBlocks.*;
|
||||
import static com.hbm.inventory.OreDictManager.DictFrame.*;
|
||||
|
||||
import com.hbm.blocks.BlockEnums.EnumStoneType;
|
||||
import com.hbm.config.GeneralConfig;
|
||||
import com.hbm.hazard.HazardData;
|
||||
import com.hbm.hazard.HazardEntry;
|
||||
@ -349,7 +350,7 @@ public class OreDictManager {
|
||||
/*
|
||||
* DUST AND GEM ORES
|
||||
*/
|
||||
S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, ore_meteor_sulfur) .oreNether(ore_nether_sulfur);
|
||||
S .dust(sulfur) .block(block_sulfur) .ore(ore_sulfur, ore_nether_sulfur, basalt_sulfur, ore_meteor_sulfur, DictFrame.fromOne(stone_resource, EnumStoneType.SULFUR)) .oreNether(ore_nether_sulfur);
|
||||
KNO .dust(niter) .block(block_niter) .ore(ore_niter);
|
||||
F .dust(fluorite) .block(block_fluorite) .ore(ore_fluorite, basalt_fluorite);
|
||||
LIGNITE .gem(lignite) .dust(powder_lignite) .ore(ore_lignite);
|
||||
@ -572,9 +573,15 @@ public class OreDictManager {
|
||||
public static ItemStack fromOne(Item item, Enum en) {
|
||||
return new ItemStack(item, 1, en.ordinal());
|
||||
}
|
||||
public static ItemStack fromOne(Block block, Enum en) {
|
||||
return new ItemStack(block, 1, en.ordinal());
|
||||
}
|
||||
public static ItemStack fromOne(Item item, Enum en, int stacksize) {
|
||||
return new ItemStack(item, stacksize, en.ordinal());
|
||||
}
|
||||
public static ItemStack fromOne(Block block, Enum en, int stacksize) {
|
||||
return new ItemStack(block, stacksize, en.ordinal());
|
||||
}
|
||||
/** Same as fromOne but with an array of ItemStacks. The array type is Object[] so that the ODM methods work with it. Generates ItemStacks for the entire enum class. */
|
||||
public static Object[] fromAll(Item item, Class<? extends Enum> en) {
|
||||
Enum[] vals = en.getEnumConstants();
|
||||
|
||||
@ -178,6 +178,7 @@ public class AssemblerRecipes {
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_buster_medium, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_medium, 1), new ComparableStack(ModBlocks.det_cord, 4), new ComparableStack(ModBlocks.det_charge, 4), },150);
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_buster_large, 1), new AStack[] {new ComparableStack(ModItems.warhead_generic_large, 1), new ComparableStack(ModBlocks.det_charge, 8), },200);
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_nuclear, 1), new AStack[] {new ComparableStack(ModItems.boy_shielding, 1), new ComparableStack(ModItems.boy_target, 1), new ComparableStack(ModItems.boy_bullet, 1), new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 12), },300);
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_mirv, 1), new AStack[] {new OreDictStack(TI.plate(), 20), new OreDictStack(STEEL.plate(), 12), new OreDictStack(PU239.ingot(), 1), new OreDictStack(ANY_HIGHEXPLOSIVE.ingot(), 8), new OreDictStack(OreDictManager.getReflector(), 6), new OreDictStack(LI.ingot(), 4), new ComparableStack(ModItems.cell_deuterium, 6), },500);
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_volcano, 1), new AStack[] {new OreDictStack(TI.plate(), 24), new OreDictStack(STEEL.plate(), 16), new ComparableStack(ModBlocks.det_nuke, 3), new OreDictStack(U238.block(), 24), new ComparableStack(ModItems.circuit_tantalium, 5) }, 600);
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_thermo_endo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_endo, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 6), },300);
|
||||
makeRecipe(new ComparableStack(ModItems.warhead_thermo_exo, 1), new AStack[] {new ComparableStack(ModBlocks.therm_exo, 2), new OreDictStack(TI.plate(), 12), new OreDictStack(STEEL.plate(), 6), },300);
|
||||
|
||||
@ -93,6 +93,12 @@ public class ChemplantRecipes {
|
||||
.inputItems(new OreDictStack(KNO.dust()))
|
||||
.inputFluids(new FluidStack(Fluids.AROMATICS, 500))
|
||||
.outputItems(new ItemStack(ModItems.ball_tnt, 4)));
|
||||
recipes.add(new ChemRecipe(89, "DYNAMITE", 50)
|
||||
.inputItems(
|
||||
new ComparableStack(Items.sugar),
|
||||
new OreDictStack(KNO.dust()),
|
||||
new OreDictStack("sand"))
|
||||
.outputItems(new ItemStack(ModItems.ball_dynamite, 2)));
|
||||
recipes.add(new ChemRecipe(84, "C4", 150)
|
||||
.inputItems(new OreDictStack(KNO.dust()))
|
||||
.inputFluids(new FluidStack(Fluids.UNSATURATEDS, 500))
|
||||
|
||||
@ -2,7 +2,9 @@ package com.hbm.items.block;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import com.hbm.blocks.BlockEnumMulti;
|
||||
import com.hbm.blocks.ITooltipProvider;
|
||||
import com.hbm.util.EnumUtil;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
@ -14,6 +16,31 @@ public class ItemBlockBase extends ItemBlock {
|
||||
|
||||
public ItemBlockBase(Block block) {
|
||||
super(block);
|
||||
|
||||
if(block instanceof BlockEnumMulti) {
|
||||
this.setMaxDamage(0);
|
||||
this.setHasSubtypes(true);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getMetadata(int meta) {
|
||||
if(field_150939_a instanceof BlockEnumMulti)
|
||||
return meta;
|
||||
else
|
||||
return super.getMetadata(meta);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getUnlocalizedName(ItemStack stack) {
|
||||
|
||||
if(field_150939_a instanceof BlockEnumMulti && ((BlockEnumMulti)field_150939_a).multiName) {
|
||||
|
||||
Enum num = EnumUtil.grabEnumSafely(((BlockEnumMulti)field_150939_a).theEnum, stack.getItemDamage());
|
||||
return super.getUnlocalizedName() + "." + num.name().toLowerCase();
|
||||
} else {
|
||||
return super.getUnlocalizedName(stack);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@ -679,6 +679,7 @@ public class ClientProxy extends ServerProxy {
|
||||
RenderingRegistry.registerBlockHandler(new RenderAnvil());
|
||||
RenderingRegistry.registerBlockHandler(new RenderCrystal());
|
||||
RenderingRegistry.registerBlockHandler(new RenderTestCable());
|
||||
RenderingRegistry.registerBlockHandler(new RenderTestPipe());
|
||||
RenderingRegistry.registerBlockHandler(new RenderBlockCT());
|
||||
RenderingRegistry.registerBlockHandler(new RenderDetCord());
|
||||
RenderingRegistry.registerBlockHandler(new RenderBlockMultipass());
|
||||
@ -1161,17 +1162,20 @@ public class ClientProxy extends ServerProxy {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
double motionX = BobMathUtil.safeClamp(p.motionX + moX, -5, 5);
|
||||
double motionY = BobMathUtil.safeClamp(p.motionY + moY, -2, 2);
|
||||
double motionZ = BobMathUtil.safeClamp(p.motionZ + moZ, -5, 5);
|
||||
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, motionX * 2, motionY * 2, motionZ * 2));
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, motionX * 2, motionY * 2, motionZ * 2));
|
||||
double mX2 = BobMathUtil.safeClamp(p.motionX + moX * 2, -5, 5);
|
||||
double mY2 = BobMathUtil.safeClamp(p.motionY + moY * 2, -5, 5);
|
||||
double mZ2 = BobMathUtil.safeClamp(p.motionZ + moZ * 2, -5, 5);
|
||||
double mX3 = BobMathUtil.safeClamp(p.motionX + moX * 2, -10, 10);
|
||||
double mY3 = BobMathUtil.safeClamp(p.motionY + moY * 2, -10, 10);
|
||||
double mZ3 = BobMathUtil.safeClamp(p.motionZ + moZ * 2, -10, 10);
|
||||
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix + ox, iy, iz + oz, mX2, mY2, mZ2));
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new EntityFlameFX(world, ix - ox, iy, iz - oz, mX2, mY2, mZ2));
|
||||
|
||||
if(particleSetting == 0) {
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, motionX * 3, motionY * 3, motionZ * 3));
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, motionX * 3, motionY * 3, motionZ * 3));
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix + ox, iy, iz + oz, mX3, mY3, mZ3));
|
||||
Minecraft.getMinecraft().effectRenderer.addEffect(new net.minecraft.client.particle.EntitySmokeFX(world, ix - ox, iy, iz - oz, mX3, mY3, mZ3));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -71,6 +71,7 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom;
|
||||
import com.hbm.tileentity.machine.*;
|
||||
import com.hbm.tileentity.machine.rbmk.RBMKDials;
|
||||
import com.hbm.util.ArmorUtil;
|
||||
import com.hbm.world.feature.OreCave;
|
||||
import com.hbm.world.feature.SchistStratum;
|
||||
import com.hbm.world.generator.CellularDungeonFactory;
|
||||
|
||||
@ -973,6 +974,9 @@ public class MainRegistry {
|
||||
|
||||
//expand for the largest entity we have (currently Quackos who is 17.5m in diameter, that's one fat duck)
|
||||
World.MAX_ENTITY_RADIUS = Math.max(World.MAX_ENTITY_RADIUS, 8.75);
|
||||
|
||||
new OreCave(ModBlocks.stone_resource, 0).setThreshold(1.5D).setRangeMult(20).setYLevel(30).setMaxRange(20);
|
||||
//new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
@ -989,8 +993,6 @@ public class MainRegistry {
|
||||
SchistStratum schist = new SchistStratum();
|
||||
MinecraftForge.EVENT_BUS.register(schist); //DecorateBiomeEvent.Pre
|
||||
|
||||
//new OreLayer(Blocks.coal_ore, 0.2F).setThreshold(4).setRangeMult(3).setYLevel(70);
|
||||
|
||||
OreDictManager oreMan = new OreDictManager();
|
||||
MinecraftForge.EVENT_BUS.register(oreMan); //OreRegisterEvent
|
||||
|
||||
|
||||
@ -1179,6 +1179,7 @@ public class ResourceManager {
|
||||
public static final IModelCustom crystal_robust = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_robust.obj"));
|
||||
public static final IModelCustom crystal_trixite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/crystals_trixite.obj"));
|
||||
public static final IModelCustom cable_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/cable_neo.obj"));
|
||||
public static final IModelCustom pipe_neo = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/pipe_neo.obj"));
|
||||
|
||||
public static final IModelCustom charge_dynamite = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_dynamite.obj"));
|
||||
public static final IModelCustom charge_c4 = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/blocks/charge_c4.obj"));
|
||||
|
||||
130
src/main/java/com/hbm/render/block/RenderTestPipe.java
Normal file
@ -0,0 +1,130 @@
|
||||
package com.hbm.render.block;
|
||||
|
||||
import org.lwjgl.opengl.GL11;
|
||||
|
||||
import com.hbm.blocks.test.TestPipe;
|
||||
import com.hbm.lib.Library;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.render.util.ObjUtil;
|
||||
|
||||
import api.hbm.fluid.IFluidConductor;
|
||||
import api.hbm.fluid.IFluidConnector;
|
||||
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;
|
||||
|
||||
public class RenderTestPipe implements ISimpleBlockRenderingHandler {
|
||||
|
||||
@Override
|
||||
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
|
||||
|
||||
GL11.glPushMatrix();
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
IIcon iicon = block.getIcon(0, 0);
|
||||
tessellator.setColorOpaque_F(1, 1, 1);
|
||||
|
||||
if(renderer.hasOverrideBlockTexture()) {
|
||||
iicon = renderer.overrideBlockTexture;
|
||||
}
|
||||
|
||||
GL11.glRotated(180, 0, 1, 0);
|
||||
GL11.glScaled(1.25D, 1.25D, 1.25D);
|
||||
tessellator.startDrawingQuads();
|
||||
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pX", iicon, tessellator, 0, false);
|
||||
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nX", iicon, tessellator, 0, false);
|
||||
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pZ", iicon, tessellator, 0, false);
|
||||
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nZ", iicon, tessellator, 0, false);
|
||||
tessellator.draw();
|
||||
|
||||
GL11.glPopMatrix();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
|
||||
|
||||
Tessellator tessellator = Tessellator.instance;
|
||||
IIcon iicon = block.getIcon(0, 0);
|
||||
IIcon overlay = block.getIcon(1, 0);
|
||||
tessellator.setColorOpaque_F(1, 1, 1);
|
||||
|
||||
if(renderer.hasOverrideBlockTexture()) {
|
||||
iicon = renderer.overrideBlockTexture;
|
||||
}
|
||||
|
||||
tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z));
|
||||
tessellator.setColorOpaque_F(1, 1, 1);
|
||||
|
||||
boolean pX = world.getTileEntity(x + 1, y, z) instanceof IFluidConductor;
|
||||
boolean nX = world.getTileEntity(x - 1, y, z) instanceof IFluidConductor;
|
||||
boolean pY = world.getTileEntity(x, y + 1, z) instanceof IFluidConductor;
|
||||
boolean nY = world.getTileEntity(x, y - 1, z) instanceof IFluidConductor;
|
||||
boolean pZ = world.getTileEntity(x, y, z + 1) instanceof IFluidConductor;
|
||||
boolean nZ = world.getTileEntity(x, y, z - 1) instanceof IFluidConductor;
|
||||
|
||||
int mask = 0 + (pX ? 32 : 0) + (nX ? 16 : 0) + (pY ? 8 : 0) + (nY ? 4 : 0) + (pZ ? 2 : 0) + (nZ ? 1 : 0);
|
||||
|
||||
tessellator.addTranslation(x + 0.5F, y + 0.5F, z + 0.5F);
|
||||
|
||||
int color = 0xff0000;
|
||||
|
||||
if(mask == 0) {
|
||||
renderDuct(iicon, overlay, color, tessellator, "pX");
|
||||
renderDuct(iicon, overlay, color, tessellator, "nX");
|
||||
renderDuct(iicon, overlay, color, tessellator, "pY");
|
||||
renderDuct(iicon, overlay, color, tessellator, "nY");
|
||||
renderDuct(iicon, overlay, color, tessellator, "pZ");
|
||||
renderDuct(iicon, overlay, color, tessellator, "nZ");
|
||||
} else if(mask == 0b100000 || mask == 0b010000) {
|
||||
renderDuct(iicon, overlay, color, tessellator, "pX");
|
||||
renderDuct(iicon, overlay, color, tessellator, "nX");
|
||||
} else if(mask == 0b001000 || mask == 0b000100) {
|
||||
renderDuct(iicon, overlay, color, tessellator, "pY");
|
||||
renderDuct(iicon, overlay, color, tessellator, "nY");
|
||||
} else if(mask == 0b000010 || mask == 0b000001) {
|
||||
renderDuct(iicon, overlay, color, tessellator, "pZ");
|
||||
renderDuct(iicon, overlay, color, tessellator, "nZ");
|
||||
} else {
|
||||
|
||||
if(pX) renderDuct(iicon, overlay, color, tessellator, "pX");
|
||||
if(nX) renderDuct(iicon, overlay, color, tessellator, "nX");
|
||||
if(pY) renderDuct(iicon, overlay, color, tessellator, "pY");
|
||||
if(nY) renderDuct(iicon, overlay, color, tessellator, "nY");
|
||||
if(pZ) renderDuct(iicon, overlay, color, tessellator, "nZ");
|
||||
if(nZ) renderDuct(iicon, overlay, color, tessellator, "pZ");
|
||||
|
||||
if(!pX && !pY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "ppn", iicon, tessellator, 0, true);
|
||||
if(!pX && !pY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "ppp", iicon, tessellator, 0, true);
|
||||
if(!nX && !pY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "npn", iicon, tessellator, 0, true);
|
||||
if(!nX && !pY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "npp", iicon, tessellator, 0, true);
|
||||
if(!pX && !nY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pnn", iicon, tessellator, 0, true);
|
||||
if(!pX && !nY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "pnp", iicon, tessellator, 0, true);
|
||||
if(!nX && !nY && !pZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nnn", iicon, tessellator, 0, true);
|
||||
if(!nX && !nY && !nZ) ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, "nnp", iicon, tessellator, 0, true);
|
||||
}
|
||||
|
||||
tessellator.addTranslation(-x - 0.5F, -y - 0.5F, -z - 0.5F);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void renderDuct(IIcon iicon, IIcon overlay, int color, Tessellator tessellator, String part) {
|
||||
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, part, iicon, tessellator, 0, true);
|
||||
ObjUtil.setColor(color);
|
||||
ObjUtil.renderPartWithIcon((WavefrontObject) ResourceManager.pipe_neo, part, overlay, tessellator, 0, true);
|
||||
ObjUtil.clearColor();
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean shouldRender3DInInventory(int modelId) {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRenderId() {
|
||||
return TestPipe.renderID;
|
||||
}
|
||||
}
|
||||
@ -91,7 +91,11 @@ public class ObjUtil {
|
||||
if(brightness < 0.45F)
|
||||
brightness = 0.45F;
|
||||
|
||||
tes.setColorOpaque_F(brightness, brightness, brightness);
|
||||
if(hasColor) {
|
||||
tes.setColorOpaque((int)(red * brightness), (int)(green * brightness), (int)(blue * brightness));
|
||||
} else {
|
||||
tes.setColorOpaque_F(brightness, brightness, brightness);
|
||||
}
|
||||
}
|
||||
|
||||
for(int i = 0; i < f.vertices.length; i++) {
|
||||
@ -116,4 +120,27 @@ public class ObjUtil {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static int red;
|
||||
private static int green;
|
||||
private static int blue;
|
||||
private static boolean hasColor = false;
|
||||
|
||||
public static void setColor(int color) {
|
||||
red = (color & 0xff0000) >> 16;
|
||||
green = (color & 0x00ff00) >> 8;
|
||||
blue = color & 0x0000ff;
|
||||
hasColor = true;
|
||||
}
|
||||
|
||||
public static void setColor(int r, int g, int b) {
|
||||
red = r;
|
||||
green = g;
|
||||
blue = b;
|
||||
hasColor = true;
|
||||
}
|
||||
|
||||
public static void clearColor() {
|
||||
hasColor = false;
|
||||
}
|
||||
}
|
||||
|
||||
@ -184,6 +184,7 @@ public class TileMappings {
|
||||
put(TileEntityDeaerator.class, "tileentity_deaerator");
|
||||
put(TileEntityChungus.class, "tileentity_chungus");
|
||||
put(TileEntityCableBaseNT.class, "tileentity_ohgod");
|
||||
put(TileEntityPipeBaseNT.class, "tileentity_pipe_base");
|
||||
put(TileEntityWatz.class, "tileentity_watz");
|
||||
put(TileEntityMachineBAT9000.class, "tileentity_bat9000");
|
||||
put(TileEntityMachineOrbus.class, "tileentity_orbus");
|
||||
|
||||
@ -74,13 +74,12 @@ public class TileEntityPipeBaseNT extends TileEntity implements IFluidConductor
|
||||
}
|
||||
|
||||
@Override
|
||||
public int transferFluid(FluidType type, int fluid) {
|
||||
// TODO Auto-generated method stub
|
||||
public long transferFluid(FluidType type, long fluid) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getDemand(FluidType type) {
|
||||
public long getDemand(FluidType type) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
125
src/main/java/com/hbm/world/feature/OreCave.java
Normal file
@ -0,0 +1,125 @@
|
||||
package com.hbm.world.feature;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.blocks.generic.BlockStalagmite;
|
||||
import com.hbm.inventory.RecipesCommon.MetaBlock;
|
||||
|
||||
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.material.Material;
|
||||
import net.minecraft.util.MathHelper;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraft.world.gen.NoiseGeneratorPerlin;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.common.util.ForgeDirection;
|
||||
import net.minecraftforge.event.terraingen.DecorateBiomeEvent;
|
||||
|
||||
public class OreCave {
|
||||
|
||||
private NoiseGeneratorPerlin noise;
|
||||
private MetaBlock ore;
|
||||
/** The number that is being deducted flat from the result of the perlin noise before all other processing. Increase this to make strata rarer. */
|
||||
private double threshold = 2D;
|
||||
/** The mulitplier for the remaining bit after the threshold has been deducted. Increase to make strata wavier. */
|
||||
private int rangeMult = 3;
|
||||
/** The maximum range after multiplying - anything above this will be subtracted from (maxRange * 2) to yield the proper range. Increase this to make strata thicker. */
|
||||
private int maxRange = 4;
|
||||
/** The y-level around which the stratum is centered. */
|
||||
private int yLevel = 30;
|
||||
|
||||
public OreCave(Block ore) {
|
||||
this(ore, 0);
|
||||
}
|
||||
|
||||
public OreCave(Block ore, int meta) {
|
||||
this.ore = new MetaBlock(ore, meta);
|
||||
MinecraftForge.EVENT_BUS.register(this);
|
||||
}
|
||||
|
||||
public OreCave setThreshold(double threshold) {
|
||||
this.threshold = threshold;
|
||||
return this;
|
||||
}
|
||||
|
||||
public OreCave setRangeMult(int rangeMult) {
|
||||
this.rangeMult = rangeMult;
|
||||
return this;
|
||||
}
|
||||
|
||||
public OreCave setMaxRange(int maxRange) {
|
||||
this.maxRange = maxRange;
|
||||
return this;
|
||||
}
|
||||
|
||||
public OreCave setYLevel(int yLevel) {
|
||||
this.yLevel = yLevel;
|
||||
return this;
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onDecorate(DecorateBiomeEvent.Pre event) {
|
||||
|
||||
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;
|
||||
|
||||
double scale = 0.01D;
|
||||
|
||||
for(int x = cX; x < cX + 16; x++) {
|
||||
for(int z = cZ; z < cZ + 16; z++) {
|
||||
|
||||
double n = noise.func_151601_a(x * scale, z * scale);
|
||||
|
||||
if(n > threshold) {
|
||||
int range = (int)((n - threshold) * rangeMult);
|
||||
|
||||
if(range > maxRange)
|
||||
range = (maxRange * 2) - range;
|
||||
|
||||
if(range < 0)
|
||||
continue;
|
||||
|
||||
for(int y = yLevel - range; y <= yLevel + range; y++) {
|
||||
Block genTarget = world.getBlock(x, y, z);
|
||||
|
||||
if(genTarget.isNormalCube() && (genTarget.getMaterial() == Material.rock || genTarget.getMaterial() == Material.ground)) {
|
||||
|
||||
boolean shouldGen = false;
|
||||
|
||||
for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) {
|
||||
Block neighbor = world.getBlock(MathHelper.clamp_int(x + dir.offsetX, cX, cX + 16), y + dir.offsetY, MathHelper.clamp_int(z + dir.offsetZ, cZ, cZ + 16));
|
||||
if(neighbor.getMaterial() == Material.air || neighbor instanceof BlockStalagmite) {
|
||||
shouldGen = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(shouldGen) world.setBlock(x, y, z, ore.block, ore.meta, 2);
|
||||
} else {
|
||||
|
||||
if((genTarget.getMaterial() == Material.air || !genTarget.isNormalCube()) && event.rand.nextInt(5) == 0) {
|
||||
|
||||
if(ModBlocks.stalactite.canPlaceBlockAt(world, x, y, z)) {
|
||||
world.setBlock(x, y, z, ModBlocks.stalactite, ore.meta, 2);
|
||||
} else {
|
||||
if(ModBlocks.stalagmite.canPlaceBlockAt(world, x, y, z)) {
|
||||
world.setBlock(x, y, z, ModBlocks.stalagmite, ore.meta, 2);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -137,6 +137,7 @@ chem.DEUTERIUM=Deuteriumextrahierung
|
||||
chem.DYN_DNT=Dineutronium-Dynosynthese
|
||||
chem.DYN_EUPH=Euphemium-Dynosynthese
|
||||
chem.DYN_SCHRAB=Schrabidium-Dynosynthese
|
||||
chem.DYNAMITE=Dynamitherstellung
|
||||
chem.ELECTROLYSIS=Kryo-Elektrolyse
|
||||
chem.EPEARL=Enderperlen-Synthese
|
||||
chem.ETHANOL=Ethanolherstellung
|
||||
@ -3553,6 +3554,8 @@ tile.solar_mirror.name=Heliostatspiegel
|
||||
tile.soyuz_capsule.name=Landekapsel
|
||||
tile.soyuz_launcher.name=Soyuz-Startplatform
|
||||
tile.spikes.name=Stacheln
|
||||
tile.stalactite.sulfur.name=Schwefelhaltiger Stalaktit
|
||||
tile.stalagmite.sulfur.name=Schwefelhaltiger Stalagmit
|
||||
tile.steel_beam.name=Stahlträger
|
||||
tile.steel_corner.name=Stahlwand (Ecke)
|
||||
tile.steel_grate.name=Stahlgitter
|
||||
@ -3564,6 +3567,7 @@ tile.stone_depth.name=Tiefenfels
|
||||
tile.stone_depth_nether.name=Nether-Tiefenfels
|
||||
tile.stone_gneiss.name=Graphitschiefer
|
||||
tile.stone_porous.name=Poröser Stein
|
||||
tile.stone_resource.sulfur.name=Schwefelhaltiger Stein
|
||||
tile.struct_iter_core.name=Fusionsreaktor-Kernkomponente
|
||||
tile.struct_launcher.name=Startrampe-Komponentenblock
|
||||
tile.struct_launcher_core.name=Kompaktrampe-Kernkomponente
|
||||
|
||||
@ -306,6 +306,7 @@ chem.DUCRETE=Ducrete Production
|
||||
chem.DYN_DNT=Dineutronium Dynosynthesis
|
||||
chem.DYN_EUPH=Euphemium Dynosynthesis
|
||||
chem.DYN_SCHRAB=Schrabidium Dynosynthesis
|
||||
chem.DYNAMITE=Dynamite Synthesis
|
||||
chem.ELECTROLYSIS=Cryo-Electrolysis
|
||||
chem.EPEARL=Ender Pearl Synthesis
|
||||
chem.ETHANOL=Ethanol Production
|
||||
@ -3926,6 +3927,8 @@ tile.solar_mirror.name=Heliostat Mirror
|
||||
tile.soyuz_capsule.name=Cargo Landing Capsule
|
||||
tile.soyuz_launcher.name=Soyuz Launch Platform
|
||||
tile.spikes.name=Spikes
|
||||
tile.stalactite.sulfur.name=Sulfurous Stalactite
|
||||
tile.stalagmite.sulfur.name=Sulfurous Stalagmite
|
||||
tile.steel_beam.name=Steel Beam
|
||||
tile.steel_corner.name=Steel Wall Corner
|
||||
tile.steel_grate.name=Steel Grate
|
||||
@ -3937,6 +3940,7 @@ tile.stone_depth.name=Depth Rock
|
||||
tile.stone_depth_nether.name=Nether Depth Rock
|
||||
tile.stone_gneiss.name=Graphitic Schist
|
||||
tile.stone_porous.name=Porous Stone
|
||||
tile.stone_resource.sulfur.name=Sulfurous Stone
|
||||
tile.struct_iter_core.name=Fusion Reactor Core Component
|
||||
tile.struct_launcher.name=Launch Pad Component Block
|
||||
tile.struct_launcher_core.name=Compact Launcher Core Component
|
||||
|
||||
664
src/main/resources/assets/hbm/models/blocks/pipe_neo.obj
Normal file
@ -0,0 +1,664 @@
|
||||
# Blender v2.79 (sub 0) OBJ File: 'pipe_neo.blend'
|
||||
# www.blender.org
|
||||
o pZ
|
||||
v 0.187500 0.000000 -0.500000
|
||||
v 0.132582 -0.132582 -0.500000
|
||||
v -0.000000 -0.187500 -0.500000
|
||||
v -0.132583 -0.132582 -0.500000
|
||||
v -0.187500 0.000000 -0.500000
|
||||
v -0.132583 0.132583 -0.500000
|
||||
v -0.000000 0.187500 -0.500000
|
||||
v 0.132582 0.132583 -0.500000
|
||||
v -0.132582 0.132583 0.000000
|
||||
v 0.000000 0.187500 0.000000
|
||||
v -0.132582 -0.132583 0.000000
|
||||
v -0.187500 0.000000 0.000000
|
||||
v 0.132582 -0.132583 0.000000
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v 0.132582 0.132583 0.000000
|
||||
v 0.187500 -0.000000 0.000000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.305394 0.319606
|
||||
vt 0.250674 0.187500
|
||||
vt 0.624326 0.187500
|
||||
vt -0.000000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt 0.305394 0.055394
|
||||
vt 0.437500 0.000674
|
||||
vt 0.569606 0.055394
|
||||
vt 0.569606 0.319606
|
||||
vt 0.437500 0.374326
|
||||
vn -0.3827 0.9239 0.0000
|
||||
vn -0.9239 -0.3827 0.0000
|
||||
vn 0.3827 -0.9239 -0.0000
|
||||
vn 0.3827 0.9239 0.0000
|
||||
vn -0.9239 0.3827 0.0000
|
||||
vn -0.3827 -0.9239 -0.0000
|
||||
vn 0.9239 -0.3827 -0.0000
|
||||
vn 0.9239 0.3827 -0.0000
|
||||
vn 0.0000 0.0000 -1.0000
|
||||
s off
|
||||
f 7/1/1 9/2/1 10/3/1
|
||||
f 5/4/2 11/5/2 12/6/2
|
||||
f 3/7/3 13/8/3 14/9/3
|
||||
f 8/10/4 10/3/4 15/11/4
|
||||
f 9/12/5 5/4/5 12/6/5
|
||||
f 11/13/6 3/7/6 14/9/6
|
||||
f 2/14/7 16/15/7 13/16/7
|
||||
f 1/17/8 15/18/8 16/15/8
|
||||
f 8/19/9 1/20/9 5/21/9
|
||||
f 7/1/1 6/22/1 9/2/1
|
||||
f 5/4/2 4/23/2 11/5/2
|
||||
f 3/7/3 2/24/3 13/8/3
|
||||
f 8/10/4 7/1/4 10/3/4
|
||||
f 9/12/5 6/25/5 5/4/5
|
||||
f 11/13/6 4/26/6 3/7/6
|
||||
f 2/14/7 1/17/7 16/15/7
|
||||
f 1/17/8 8/27/8 15/18/8
|
||||
f 1/20/9 2/28/9 3/29/9
|
||||
f 3/29/9 4/30/9 1/20/9
|
||||
f 4/30/9 5/21/9 1/20/9
|
||||
f 5/21/9 6/31/9 7/32/9
|
||||
f 7/32/9 8/19/9 5/21/9
|
||||
o pX
|
||||
v 0.500000 0.000000 0.187500
|
||||
v 0.500000 -0.132582 0.132582
|
||||
v 0.500000 -0.187500 0.000000
|
||||
v 0.500000 -0.132582 -0.132582
|
||||
v 0.500000 0.000000 -0.187500
|
||||
v 0.500000 0.132583 -0.132582
|
||||
v 0.500000 0.187500 0.000000
|
||||
v 0.500000 0.132583 0.132582
|
||||
v 0.000000 -0.000000 0.187500
|
||||
v 0.000000 0.132583 0.132582
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v 0.000000 -0.132583 0.132582
|
||||
v 0.000000 0.000000 -0.187500
|
||||
v 0.000000 -0.132583 -0.132582
|
||||
v 0.000000 0.187500 0.000000
|
||||
v 0.000000 0.132583 -0.132582
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.305394 0.319606
|
||||
vt 0.250674 0.187500
|
||||
vt 0.624326 0.187500
|
||||
vt -0.000000 1.000000
|
||||
vt 0.125000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt 0.305394 0.055394
|
||||
vt 0.437500 0.000674
|
||||
vt 0.569606 0.055394
|
||||
vt 0.569606 0.319606
|
||||
vt 0.437500 0.374326
|
||||
vn -0.0000 0.9239 -0.3827
|
||||
vn 0.0000 -0.3827 -0.9239
|
||||
vn 0.0000 -0.9239 0.3827
|
||||
vn -0.0000 0.9239 0.3827
|
||||
vn -0.0000 0.3827 -0.9239
|
||||
vn 0.0000 -0.9239 -0.3827
|
||||
vn 0.0000 -0.3827 0.9239
|
||||
vn -0.0000 0.3827 0.9239
|
||||
vn 1.0000 0.0000 0.0000
|
||||
s off
|
||||
f 23/33/10 32/34/10 31/35/10
|
||||
f 29/36/11 20/37/11 30/38/11
|
||||
f 19/39/12 28/40/12 27/41/12
|
||||
f 24/42/13 31/35/13 26/43/13
|
||||
f 22/44/14 29/36/14 32/45/14
|
||||
f 20/46/15 27/41/15 30/47/15
|
||||
f 18/48/16 25/49/16 28/50/16
|
||||
f 17/51/17 26/52/17 25/49/17
|
||||
f 24/53/18 17/54/18 21/55/18
|
||||
f 23/33/10 22/56/10 32/34/10
|
||||
f 29/36/11 21/57/11 20/37/11
|
||||
f 19/39/12 18/58/12 28/40/12
|
||||
f 24/42/13 23/33/13 31/35/13
|
||||
f 22/44/14 21/57/14 29/36/14
|
||||
f 20/46/15 19/39/15 27/41/15
|
||||
f 18/48/16 17/51/16 25/49/16
|
||||
f 17/51/17 24/59/17 26/52/17
|
||||
f 17/54/18 18/60/18 19/61/18
|
||||
f 19/61/18 20/62/18 17/54/18
|
||||
f 20/62/18 21/55/18 17/54/18
|
||||
f 21/55/18 22/63/18 23/64/18
|
||||
f 23/64/18 24/53/18 21/55/18
|
||||
o nZ
|
||||
v 0.187500 -0.000000 0.500000
|
||||
v 0.132583 -0.132583 0.500000
|
||||
v 0.000000 -0.187500 0.500000
|
||||
v -0.132582 -0.132583 0.500000
|
||||
v -0.187500 -0.000000 0.500000
|
||||
v -0.132582 0.132582 0.500000
|
||||
v 0.000000 0.187500 0.500000
|
||||
v 0.132583 0.132582 0.500000
|
||||
v -0.132582 0.132583 0.000000
|
||||
v 0.000000 0.187500 0.000000
|
||||
v -0.132582 -0.132583 0.000000
|
||||
v -0.187500 0.000000 0.000000
|
||||
v 0.132582 -0.132583 0.000000
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v 0.132582 0.132583 0.000000
|
||||
v 0.187500 -0.000000 0.000000
|
||||
vt 0.624326 0.187500
|
||||
vt 0.437500 0.374326
|
||||
vt 0.250674 0.187500
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 0.000000
|
||||
vt 0.250000 0.000000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 0.000000
|
||||
vt 0.437500 0.000674
|
||||
vt 0.569606 0.055394
|
||||
vt 0.569606 0.319606
|
||||
vt 0.305394 0.319606
|
||||
vt 0.305394 0.055394
|
||||
vt 0.000000 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vn 0.0000 0.0000 1.0000
|
||||
vn 0.9239 0.3827 0.0000
|
||||
vn 0.9239 -0.3827 -0.0000
|
||||
vn -0.3827 -0.9239 -0.0000
|
||||
vn -0.9239 0.3827 0.0000
|
||||
vn 0.3827 0.9239 0.0000
|
||||
vn 0.3827 -0.9239 -0.0000
|
||||
vn -0.9239 -0.3827 0.0000
|
||||
vn -0.3827 0.9239 0.0000
|
||||
s off
|
||||
f 33/65/19 39/66/19 37/67/19
|
||||
f 48/68/20 40/69/20 33/70/20
|
||||
f 45/71/21 33/70/21 34/72/21
|
||||
f 36/73/22 46/74/22 35/75/22
|
||||
f 41/76/23 37/77/23 38/78/23
|
||||
f 47/79/24 39/80/24 40/81/24
|
||||
f 46/74/25 34/82/25 35/75/25
|
||||
f 44/83/26 36/84/26 37/77/26
|
||||
f 42/85/27 38/86/27 39/80/27
|
||||
f 35/87/19 34/88/19 33/65/19
|
||||
f 33/65/19 40/89/19 39/66/19
|
||||
f 39/66/19 38/90/19 37/67/19
|
||||
f 37/67/19 36/91/19 35/87/19
|
||||
f 35/87/19 33/65/19 37/67/19
|
||||
f 48/68/20 47/92/20 40/69/20
|
||||
f 45/71/21 48/68/21 33/70/21
|
||||
f 36/73/22 43/93/22 46/74/22
|
||||
f 41/76/23 44/83/23 37/77/23
|
||||
f 47/79/24 42/85/24 39/80/24
|
||||
f 46/74/25 45/94/25 34/82/25
|
||||
f 44/83/26 43/95/26 36/84/26
|
||||
f 42/85/27 41/96/27 38/86/27
|
||||
o nX
|
||||
v -0.500000 -0.000000 0.187500
|
||||
v -0.500000 -0.132583 0.132583
|
||||
v -0.500000 -0.187500 0.000000
|
||||
v -0.500000 -0.132583 -0.132582
|
||||
v -0.500000 -0.000000 -0.187500
|
||||
v -0.500000 0.132582 -0.132582
|
||||
v -0.500000 0.187500 0.000000
|
||||
v -0.500000 0.132582 0.132583
|
||||
v 0.000000 -0.000000 0.187500
|
||||
v 0.000000 0.132583 0.132582
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v 0.000000 -0.132583 0.132582
|
||||
v 0.000000 0.000000 -0.187500
|
||||
v 0.000000 -0.132583 -0.132582
|
||||
v 0.000000 0.187500 0.000000
|
||||
v 0.000000 0.132583 -0.132582
|
||||
vt 0.437500 0.000674
|
||||
vt 0.624326 0.187500
|
||||
vt 0.437500 0.374326
|
||||
vt 0.125000 0.000000
|
||||
vt 0.000000 0.500000
|
||||
vt -0.000000 0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.569606 0.055394
|
||||
vt 0.569606 0.319606
|
||||
vt 0.305394 0.319606
|
||||
vt 0.250674 0.187500
|
||||
vt 0.305394 0.055394
|
||||
vt 0.125000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vn -1.0000 0.0000 0.0000
|
||||
vn -0.0000 0.9239 -0.3827
|
||||
vn 0.0000 -0.3827 -0.9239
|
||||
vn 0.0000 -0.9239 0.3827
|
||||
vn -0.0000 0.9239 0.3827
|
||||
vn -0.0000 0.3827 -0.9239
|
||||
vn 0.0000 -0.9239 -0.3827
|
||||
vn 0.0000 -0.3827 0.9239
|
||||
vn -0.0000 0.3827 0.9239
|
||||
s off
|
||||
f 51/97/28 49/98/28 55/99/28
|
||||
f 55/100/29 64/101/29 54/102/29
|
||||
f 61/103/30 52/104/30 53/105/30
|
||||
f 59/106/31 50/107/31 51/108/31
|
||||
f 58/109/32 55/100/32 56/110/32
|
||||
f 64/111/33 53/105/33 54/112/33
|
||||
f 62/113/34 51/108/34 52/114/34
|
||||
f 60/115/35 49/116/35 50/117/35
|
||||
f 57/118/36 56/119/36 49/116/36
|
||||
f 51/97/28 50/120/28 49/98/28
|
||||
f 49/98/28 56/121/28 55/99/28
|
||||
f 55/99/28 54/122/28 53/123/28
|
||||
f 53/123/28 52/124/28 55/99/28
|
||||
f 52/124/28 51/97/28 55/99/28
|
||||
f 55/100/29 63/125/29 64/101/29
|
||||
f 61/103/30 62/126/30 52/104/30
|
||||
f 59/106/31 60/127/31 50/107/31
|
||||
f 58/109/32 63/125/32 55/100/32
|
||||
f 64/111/33 61/103/33 53/105/33
|
||||
f 62/113/34 59/106/34 51/108/34
|
||||
f 60/115/35 57/118/35 49/116/35
|
||||
f 57/118/36 58/128/36 56/119/36
|
||||
o pY
|
||||
v -0.000000 0.500000 -0.187500
|
||||
v -0.132583 0.500000 -0.132582
|
||||
v -0.187500 0.500000 0.000000
|
||||
v -0.132583 0.500000 0.132582
|
||||
v 0.000000 0.500000 0.187500
|
||||
v 0.132583 0.500000 0.132582
|
||||
v 0.187500 0.500000 0.000000
|
||||
v 0.132583 0.500000 -0.132582
|
||||
v -0.000000 0.000000 -0.187500
|
||||
v 0.132583 0.000000 -0.132582
|
||||
v -0.187500 0.000000 0.000000
|
||||
v -0.132583 0.000000 -0.132582
|
||||
v 0.000000 0.000000 0.187500
|
||||
v -0.132583 0.000000 0.132582
|
||||
v 0.187500 0.000000 0.000000
|
||||
v 0.132583 0.000000 0.132582
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 1.000000
|
||||
vt 0.125000 0.500000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 1.000000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.624326 0.187500
|
||||
vt 0.437500 0.374326
|
||||
vt 0.250674 0.187500
|
||||
vt -0.000000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt -0.000000 1.000000
|
||||
vt 0.305394 0.055394
|
||||
vt 0.437500 0.000674
|
||||
vt 0.569606 0.055394
|
||||
vt 0.569606 0.319606
|
||||
vt 0.305394 0.319606
|
||||
vn 0.9239 0.0000 0.3827
|
||||
vn -0.3827 0.0000 0.9239
|
||||
vn -0.9239 0.0000 -0.3827
|
||||
vn 0.9239 0.0000 -0.3827
|
||||
vn 0.3827 0.0000 0.9239
|
||||
vn -0.9239 0.0000 0.3827
|
||||
vn -0.3827 0.0000 -0.9239
|
||||
vn 0.3827 0.0000 -0.9239
|
||||
vn 0.0000 1.0000 0.0000
|
||||
s off
|
||||
f 71/129/37 80/130/37 79/131/37
|
||||
f 69/132/38 78/133/38 77/134/38
|
||||
f 67/135/39 76/136/39 75/137/39
|
||||
f 72/138/40 79/131/40 74/139/40
|
||||
f 70/140/41 77/134/41 80/141/41
|
||||
f 68/142/42 75/137/42 78/143/42
|
||||
f 66/144/43 73/145/43 76/146/43
|
||||
f 65/147/44 74/148/44 73/145/44
|
||||
f 69/149/45 71/150/45 65/151/45
|
||||
f 71/129/37 70/152/37 80/130/37
|
||||
f 69/132/38 68/153/38 78/133/38
|
||||
f 67/135/39 66/154/39 76/136/39
|
||||
f 72/138/40 71/129/40 79/131/40
|
||||
f 70/140/41 69/132/41 77/134/41
|
||||
f 68/142/42 67/135/42 75/137/42
|
||||
f 66/144/43 65/147/43 73/145/43
|
||||
f 65/147/44 72/155/44 74/148/44
|
||||
f 65/151/45 66/156/45 69/149/45
|
||||
f 66/156/45 67/157/45 69/149/45
|
||||
f 67/157/45 68/158/45 69/149/45
|
||||
f 69/149/45 70/159/45 71/150/45
|
||||
f 71/150/45 72/160/45 65/151/45
|
||||
o nnn
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v -0.132582 -0.132583 0.000000
|
||||
v -0.187500 -0.000000 0.000000
|
||||
v -0.132582 -0.000000 0.132583
|
||||
v 0.000000 -0.000000 0.187500
|
||||
v 0.000000 -0.132583 0.132583
|
||||
vt 0.250000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.625000 0.375000
|
||||
vt 0.625000 0.625000
|
||||
vn -0.3574 -0.8629 0.3574
|
||||
vn -0.3574 -0.3574 0.8629
|
||||
vn -0.5774 -0.5774 0.5774
|
||||
vn -0.8629 -0.3574 0.3574
|
||||
s off
|
||||
f 81/161/46 86/162/46 82/163/46
|
||||
f 84/164/47 86/162/47 85/165/47
|
||||
f 86/162/48 84/164/48 82/163/48
|
||||
f 82/163/49 84/164/49 83/166/49
|
||||
o nnp
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v -0.132582 -0.132583 0.000000
|
||||
v -0.187500 -0.000000 0.000000
|
||||
v 0.000000 -0.000000 -0.187500
|
||||
v -0.132582 -0.000000 -0.132583
|
||||
v 0.000000 -0.132583 -0.132583
|
||||
vt 0.250000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.625000 0.625000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.625000 0.375000
|
||||
vn -0.3574 -0.8629 -0.3574
|
||||
vn -0.3574 -0.3574 -0.8629
|
||||
vn -0.5774 -0.5774 -0.5774
|
||||
vn -0.8629 -0.3574 -0.3574
|
||||
s off
|
||||
f 87/167/50 88/168/50 92/169/50
|
||||
f 90/170/51 92/169/51 91/171/51
|
||||
f 92/169/52 88/168/52 91/171/52
|
||||
f 88/168/53 89/172/53 91/171/53
|
||||
o pnp
|
||||
v 0.187500 -0.000000 0.000000
|
||||
v 0.132583 -0.132583 0.000000
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v 0.132583 -0.000000 -0.132583
|
||||
v 0.000000 -0.000000 -0.187500
|
||||
v 0.000000 -0.132583 -0.132583
|
||||
vt 0.375000 0.625000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.625000 0.375000
|
||||
vt 0.625000 0.625000
|
||||
vn 0.3574 -0.8629 -0.3574
|
||||
vn 0.3574 -0.3574 -0.8629
|
||||
vn 0.5774 -0.5774 -0.5774
|
||||
vn 0.8629 -0.3574 -0.3574
|
||||
s off
|
||||
f 94/173/54 95/174/54 98/175/54
|
||||
f 96/176/55 98/175/55 97/177/55
|
||||
f 98/175/56 96/176/56 94/173/56
|
||||
f 93/178/57 94/173/57 96/176/57
|
||||
o pnn
|
||||
v 0.187500 -0.000000 0.000000
|
||||
v 0.132583 -0.132583 0.000000
|
||||
v 0.000000 -0.187500 0.000000
|
||||
v 0.000000 -0.000000 0.187500
|
||||
v 0.132583 -0.000000 0.132583
|
||||
v 0.000000 -0.132583 0.132583
|
||||
vt 0.375000 0.375000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.625000 0.375000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.625000 0.625000
|
||||
vn 0.3574 -0.8629 0.3574
|
||||
vn 0.8629 -0.3574 0.3574
|
||||
vn 0.5774 -0.5774 0.5774
|
||||
vn 0.3574 -0.3574 0.8629
|
||||
s off
|
||||
f 100/179/58 104/180/58 101/181/58
|
||||
f 99/182/59 103/183/59 100/179/59
|
||||
f 104/180/60 100/179/60 103/183/60
|
||||
f 103/183/61 102/184/61 104/180/61
|
||||
o ppn
|
||||
v 0.187500 -0.000000 0.000000
|
||||
v 0.000000 0.187500 0.000000
|
||||
v 0.132583 0.132582 0.000000
|
||||
v 0.000000 -0.000000 0.187500
|
||||
v 0.132583 -0.000000 0.132583
|
||||
v 0.000000 0.132582 0.132583
|
||||
vt 0.625000 0.375000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.625000 0.625000
|
||||
vn 0.3574 0.3574 0.8629
|
||||
vn 0.3574 0.8629 0.3574
|
||||
vn 0.8629 0.3574 0.3574
|
||||
vn 0.5774 0.5774 0.5774
|
||||
s off
|
||||
f 108/185/62 109/186/62 110/187/62
|
||||
f 106/188/63 110/187/63 107/189/63
|
||||
f 107/189/64 109/186/64 105/190/64
|
||||
f 109/186/65 107/189/65 110/187/65
|
||||
o npn
|
||||
v -0.187500 -0.000000 0.000000
|
||||
v -0.132582 0.132582 0.000000
|
||||
v 0.000000 0.187500 0.000000
|
||||
v -0.132582 -0.000000 0.132583
|
||||
v 0.000000 -0.000000 0.187500
|
||||
v 0.000000 0.132582 0.132583
|
||||
vt 0.625000 0.375000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.625000 0.625000
|
||||
vt 0.250000 0.500000
|
||||
vn -0.8629 0.3574 0.3574
|
||||
vn -0.5774 0.5774 0.5774
|
||||
vn -0.3574 0.3574 0.8629
|
||||
vn -0.3574 0.8629 0.3574
|
||||
s off
|
||||
f 111/191/66 114/192/66 112/193/66
|
||||
f 114/192/67 116/194/67 112/193/67
|
||||
f 114/192/68 115/195/68 116/194/68
|
||||
f 112/193/69 116/194/69 113/196/69
|
||||
o npp
|
||||
v -0.187500 -0.000000 0.000000
|
||||
v -0.132582 0.132582 0.000000
|
||||
v 0.000000 0.187500 0.000000
|
||||
v 0.000000 -0.000000 -0.187500
|
||||
v -0.132582 -0.000000 -0.132583
|
||||
v 0.000000 0.132582 -0.132583
|
||||
vt 0.625000 0.375000
|
||||
vt 0.500000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.625000 0.625000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.250000 0.500000
|
||||
vn -0.3574 0.3574 -0.8629
|
||||
vn -0.8629 0.3574 -0.3574
|
||||
vn -0.5774 0.5774 -0.5774
|
||||
vn -0.3574 0.8629 -0.3574
|
||||
s off
|
||||
f 120/197/70 121/198/70 122/199/70
|
||||
f 117/200/71 118/201/71 121/198/71
|
||||
f 121/198/72 118/201/72 122/199/72
|
||||
f 118/201/73 119/202/73 122/199/73
|
||||
o ppp
|
||||
v 0.187500 -0.000000 0.000000
|
||||
v 0.000000 0.187500 0.000000
|
||||
v 0.132583 0.132582 0.000000
|
||||
v 0.132583 -0.000000 -0.132583
|
||||
v 0.000000 -0.000000 -0.187500
|
||||
v 0.000000 0.132582 -0.132583
|
||||
vt 0.500000 0.500000
|
||||
vt 0.625000 0.625000
|
||||
vt 0.375000 0.625000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.375000 0.375000
|
||||
vt 0.625000 0.375000
|
||||
vn 0.3574 0.3574 -0.8629
|
||||
vn 0.3574 0.8629 -0.3574
|
||||
vn 0.5774 0.5774 -0.5774
|
||||
vn 0.8629 0.3574 -0.3574
|
||||
s off
|
||||
f 126/203/74 127/204/74 128/205/74
|
||||
f 124/206/75 125/207/75 128/205/75
|
||||
f 128/205/76 125/207/76 126/203/76
|
||||
f 125/207/77 123/208/77 126/203/77
|
||||
o nY
|
||||
v -0.000000 -0.500000 -0.187500
|
||||
v -0.132583 -0.500000 -0.132582
|
||||
v -0.187500 -0.500000 0.000000
|
||||
v -0.132583 -0.500000 0.132582
|
||||
v 0.000000 -0.500000 0.187500
|
||||
v 0.132583 -0.500000 0.132582
|
||||
v 0.187500 -0.500000 0.000000
|
||||
v 0.132583 -0.500000 -0.132582
|
||||
v -0.000000 0.000000 -0.187500
|
||||
v 0.132583 0.000000 -0.132582
|
||||
v -0.187500 0.000000 0.000000
|
||||
v -0.132583 0.000000 -0.132582
|
||||
v 0.000000 0.000000 0.187500
|
||||
v -0.132583 0.000000 0.132582
|
||||
v 0.187500 0.000000 0.000000
|
||||
v 0.132583 0.000000 0.132582
|
||||
vt 0.305394 0.055394
|
||||
vt 0.437500 0.000674
|
||||
vt 0.437500 0.374326
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 0.000000
|
||||
vt 0.125000 0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.250000 0.500000
|
||||
vt 0.125000 -0.000000
|
||||
vt 0.250000 -0.000000
|
||||
vt 0.125000 0.500000
|
||||
vt -0.000000 -0.000000
|
||||
vt 0.569606 0.055394
|
||||
vt 0.624326 0.187500
|
||||
vt 0.569606 0.319606
|
||||
vt 0.305394 0.319606
|
||||
vt 0.250674 0.187500
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vt 0.000000 0.500000
|
||||
vn 0.0000 -1.0000 0.0000
|
||||
vn 0.9239 0.0000 0.3827
|
||||
vn -0.3827 0.0000 0.9239
|
||||
vn -0.9239 0.0000 -0.3827
|
||||
vn 0.9239 0.0000 -0.3827
|
||||
vn 0.3827 0.0000 0.9239
|
||||
vn -0.9239 0.0000 0.3827
|
||||
vn -0.3827 0.0000 -0.9239
|
||||
vn 0.3827 0.0000 -0.9239
|
||||
s off
|
||||
f 132/209/78 131/210/78 135/211/78
|
||||
f 143/212/79 134/213/79 135/214/79
|
||||
f 141/215/80 132/216/80 133/217/80
|
||||
f 139/218/81 130/219/81 131/220/81
|
||||
f 138/221/82 135/214/82 136/222/82
|
||||
f 144/223/83 133/217/83 134/224/83
|
||||
f 142/225/84 131/220/84 132/226/84
|
||||
f 140/227/85 129/228/85 130/229/85
|
||||
f 137/230/86 136/231/86 129/228/86
|
||||
f 131/210/78 130/232/78 135/211/78
|
||||
f 130/232/78 129/233/78 135/211/78
|
||||
f 129/233/78 136/234/78 135/211/78
|
||||
f 135/211/78 134/235/78 133/236/78
|
||||
f 133/236/78 132/209/78 135/211/78
|
||||
f 143/212/79 144/237/79 134/213/79
|
||||
f 141/215/80 142/238/80 132/216/80
|
||||
f 139/218/81 140/239/81 130/219/81
|
||||
f 138/221/82 143/212/82 135/214/82
|
||||
f 144/223/83 141/215/83 133/217/83
|
||||
f 142/225/84 139/218/84 131/220/84
|
||||
f 140/227/85 137/230/85 129/228/85
|
||||
f 137/230/86 138/240/86 136/231/86
|
||||
|
After Width: | Height: | Size: 655 B |
|
After Width: | Height: | Size: 697 B |
BIN
src/main/resources/assets/hbm/textures/blocks/observer_front.png
Normal file
|
After Width: | Height: | Size: 876 B |
@ -0,0 +1,105 @@
|
||||
{
|
||||
"animation": {
|
||||
"frames": [
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
1
|
||||
]
|
||||
}
|
||||
}
|
||||
BIN
src/main/resources/assets/hbm/textures/blocks/observer_side.png
Normal file
|
After Width: | Height: | Size: 539 B |
BIN
src/main/resources/assets/hbm/textures/blocks/pipe_neo.png
Normal file
|
After Width: | Height: | Size: 246 B |
|
After Width: | Height: | Size: 98 B |
|
After Width: | Height: | Size: 270 B |
|
After Width: | Height: | Size: 278 B |
|
After Width: | Height: | Size: 262 B |
|
After Width: | Height: | Size: 267 B |
|
After Width: | Height: | Size: 342 B |
|
After Width: | Height: | Size: 798 B |
|
After Width: | Height: | Size: 372 B |
BIN
src/main/resources/assets/hbm/textures/items/can_mug.png
Normal file
|
After Width: | Height: | Size: 419 B |
|
After Width: | Height: | Size: 409 B |