Merge pull request #1290 from 70000hp/caster-o'-strands

Strand Caster
This commit is contained in:
HbmMods 2024-01-14 18:57:28 +01:00 committed by GitHub
commit 9eb4cbe6c9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 1895 additions and 11 deletions

View File

@ -689,6 +689,7 @@ public class ModBlocks {
public static Block foundry_channel;
public static Block foundry_tank;
public static Block foundry_outlet;
public static Block machine_strand_caster;
public static Block foundry_slagtap;
public static Block slag;
@ -1830,6 +1831,7 @@ public class ModBlocks {
machine_stirling_steel = new MachineStirling().setBlockName("machine_stirling_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_stirling_creative = new MachineStirling().setBlockName("machine_stirling_creative").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_sawmill = new MachineSawmill().setBlockName("machine_sawmill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_strand_caster = new MachineStrandCaster().setBlockName("machine_strand_caster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
machine_crucible = new MachineCrucible().setBlockName("machine_crucible").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire");
machine_boiler = new MachineHeatBoiler().setBlockName("machine_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper");
machine_industrial_boiler = new MachineHeatBoilerIndustrial().setBlockName("machine_industrial_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -3114,6 +3116,7 @@ public class ModBlocks {
register(machine_stirling_creative);
register(machine_sawmill);
register(machine_crucible);
register(machine_strand_caster);
register(machine_boiler);
register(machine_industrial_boiler);
register(foundry_mold);

View File

@ -0,0 +1,232 @@
package com.hbm.blocks.machine;
import api.hbm.block.ICrucibleAcceptor;
import api.hbm.block.IToolable;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ILookOverlay;
import com.hbm.handler.MultiblockHandlerXR;
import com.hbm.inventory.material.Mats;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemMold;
import com.hbm.items.machine.ItemScraps;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityCrucible;
import com.hbm.tileentity.machine.TileEntityFoundryCastingBase;
import com.hbm.tileentity.machine.TileEntityMachineStrandCaster;
import com.hbm.util.I18nUtil;
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.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.item.ItemTool;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.common.util.ForgeDirection;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcceptor, ILookOverlay, IToolable {
public MachineStrandCaster() {
super(Material.iron);
}
//reminder, if the machine is a solid brick, get dimensions will already handle it without the need to use fillSapce
//the order is up, down, forward, backward, left, right
//x is for left(-)/right(+), z is for forward(+)/backward(-), y you already know
@Override
public int[] getDimensions() {
return new int[]{0, 0, 6, 0, 1, 0};
}
@Override
public int getOffset() {
return 0;
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if (meta >= 12) return new TileEntityMachineStrandCaster();
if (meta >= 6) return new TileEntityProxyCombo(true, false, true).moltenMetal();
return null;
}
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
//up,down;forward,backward;left,right
MultiblockHandlerXR.fillSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, this, dir);
//Fluid ports
this.makeExtra(world, x + rot.offsetX - dir.offsetX, y, z + rot.offsetZ - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX, y, z - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX * 5, y, z - dir.offsetZ * 5);
this.makeExtra(world, x + rot.offsetX - dir.offsetX * 5, y, z + rot.offsetZ - dir.offsetZ * 5);
//Molten slop ports
this.makeExtra(world, x + rot.offsetX - dir.offsetX, y + 2, z + rot.offsetZ - dir.offsetZ);
this.makeExtra(world, x - dir.offsetX, y + 2, z - dir.offsetZ);
this.makeExtra(world, x + rot.offsetX, y + 2, z + rot.offsetZ);
this.makeExtra(world, x, y + 2, z);
}
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
TileEntity poured = world.getTileEntity(x, y, z);
if (!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return false;
int[] pos = this.findCore(world, x, y, z);
if (pos == null) return false;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if (!(tile instanceof TileEntityMachineStrandCaster)) return false;
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile;
return caster.canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack);
}
@Override
public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
TileEntity poured = world.getTileEntity(x, y, z);
if (!(poured instanceof TileEntityProxyCombo && ((TileEntityProxyCombo) poured).moltenMetal)) return stack;
int[] pos = this.findCore(world, x, y, z);
if (pos == null) return stack;
TileEntity tile = world.getTileEntity(pos[0], pos[1], pos[2]);
if (!(tile instanceof TileEntityMachineStrandCaster)) return stack;
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) tile;
return caster.pour(world, x, y, z, dX, dY, dZ, side, stack);
}
@Override
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
return false;
}
@Override
public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
if (world.isRemote) {
return true;
}
int[] coords = findCore(world, x, y, z);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
if (cast != null) {
//insert mold
if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.mold && cast.slots[0] == null) {
cast.slots[0] = player.getHeldItem().copy();
cast.slots[0].stackSize = 1;
player.getHeldItem().stackSize--;
world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F);
cast.markDirty();
return true;
}
if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && player.getHeldItem().getItem().getToolClasses(player.getHeldItem()).contains("shovel")) {
if (cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount));
if (!player.inventory.addItemStackToInventory(scrap)) {
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap);
world.spawnEntityInWorld(item);
} else {
player.inventoryContainer.detectAndSendChanges();
}
cast.amount = 0;
cast.type = null;
cast.markDirty();
}
return true;
}
}
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override
public void breakBlock(World world, int x, int y, int z, Block b, int i) {
TileEntity te = world.getTileEntity(x, y, z);
if (te instanceof TileEntityMachineStrandCaster) {
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) te;
if (cast.amount > 0) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount));
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap);
world.spawnEntityInWorld(item);
cast.amount = 0; //just for safety
}
}
super.breakBlock(world, x, y, z, b, i);
}
public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) {
int[] coords = findCore(world, x, y, z);
if (coords == null) return;
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
List<String> text = new ArrayList();
if (cast != null) {
if (cast.slots[0] == null) {
text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast"));
} else if (cast.slots[0].getItem() == ModItems.mold) {
ItemMold.Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]);
text.add(EnumChatFormatting.BLUE + mold.getTitle());
}
}
ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text);
}
@Override
protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) {
x += dir.offsetX * o;
z += dir.offsetZ * o;
if (!MultiblockHandlerXR.checkSpace(world, x, y, z, getDimensions(), x, y, z, dir)) return false;
return MultiblockHandlerXR.checkSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, x, y, z, dir);
}
@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.SCREWDRIVER)
return false;
int[] coords = findCore(world, x, y, z);
TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]);
if (cast.slots[0] == null)
return false;
if (!player.inventory.addItemStackToInventory(cast.slots[0].copy())) {
EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, cast.slots[0].copy());
world.spawnEntityInWorld(item);
} else {
player.inventoryContainer.detectAndSendChanges();
}
cast.markDirty();
cast.slots[0] = null;
return true;
}
}

View File

@ -0,0 +1,76 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotCraftingOutput;
import com.hbm.inventory.SlotNonRetarded;
import com.hbm.tileentity.machine.TileEntityMachineStrandCaster;
import com.hbm.util.InventoryUtil;
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 ContainerMachineStrandCaster extends Container {
protected TileEntityMachineStrandCaster caster;
public ContainerMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster caster) {
this.caster = caster;
//the wretched mold
this.addSlotToContainer(new SlotNonRetarded(this.caster, 0, 57, 62));
//output
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 2; j++) {
this.addSlotToContainer(new SlotCraftingOutput(invPlayer.player, this.caster, j + i * 2 + 1, 125 + j * 18, 26 + i * 18));
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 9; j++) {
this.addSlotToContainer(new Slot(invPlayer, j + i * 9 + 9, 8 + j * 18, 132 + i * 18));
}
}
for (int i = 0; i < 9; i++) {
this.addSlotToContainer(new Slot(invPlayer, i, 8 + i * 18, 190));
}
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack stack = null;
Slot slot = (Slot) this.inventorySlots.get(index);
if (slot != null && slot.getHasStack()) {
ItemStack originalStack = slot.getStack();
stack = originalStack.copy();
if (index <= 6) {
if (!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 7, this.inventorySlots.size(), true)) {
return null;
}
slot.onSlotChange(originalStack, stack);
} else if (!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 1, 2, false)) {
return null;
}
if (originalStack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
}
return stack;
}
@Override
public boolean canInteractWith(EntityPlayer player) {
return caster.isUseableByPlayer(player);
}
}

View File

@ -0,0 +1,98 @@
package com.hbm.inventory.gui;
import com.hbm.inventory.container.ContainerMachineStrandCaster;
import com.hbm.inventory.material.Mats;
import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineStrandCaster;
import com.hbm.util.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
public class GUIMachineStrandCaster extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_strand_caster.png");
private TileEntityMachineStrandCaster caster;
public GUIMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster tedf) {
super(new ContainerMachineStrandCaster(invPlayer, tedf));
caster = tedf;
this.xSize = 176;
this.ySize = 214;
}
@Override
public void drawScreen(int x, int y, float interp) {
super.drawScreen(x, y, interp);
drawStackInfo(x, y, 16, 17);
caster.water.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 14, 16, 24);
caster.steam.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 64, 16, 24);
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.caster.hasCustomInventoryName() ? this.caster.getInventoryName() : I18n.format(this.caster.getInventoryName());
this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 0xffffff);
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 (caster.amount != 0) {
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE);
int targetHeight = Math.min((caster.amount) * 79 / caster.getCapacity(), 92);
int hex = caster.type.moltenColor;
//hex = 0xC18336;
Color color = new Color(hex);
GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F);
drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight);
GL11.glEnable(GL11.GL_BLEND);
GL11.glColor4f(1F, 1F, 1F, 0.3F);
drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight);
GL11.glDisable(GL11.GL_BLEND);
}
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor3f(255, 255, 255);
caster.water.renderTank(guiLeft + 82, guiTop + 38, this.zLevel, 16, 24);
caster.steam.renderTank(guiLeft + 82, guiTop + 90, this.zLevel, 16, 24);
}
protected void drawStackInfo(int mouseX, int mouseY, int x, int y) {
List<String> list = new ArrayList();
if (caster.type == null) list.add(EnumChatFormatting.RED + "Empty");
else
list.add(EnumChatFormatting.YELLOW + I18nUtil.resolveKey(caster.type.getUnlocalizedName()) + ": " + Mats.formatAmount(caster.amount, Keyboard.isKeyDown(Keyboard.KEY_LSHIFT)));
this.drawCustomInfoStat(mouseX, mouseY, guiLeft + x, guiTop + y, 36, 81, mouseX, mouseY, list);
}
}

View File

@ -447,6 +447,15 @@ public class AssemblerRecipes {
new ComparableStack(ModItems.wire_red_copper, 24),
new ComparableStack(ModItems.circuit_copper, 1)
}, 300);
makeRecipe(new ComparableStack(ModBlocks.machine_strand_caster, 1), new AStack[] {
new ComparableStack(ModItems.ingot_firebrick, 12),
new OreDictStack(STEEL.plateCast(), 6),
new OreDictStack(CU.plateWelded(), 2),
new ComparableStack(ModItems.tank_steel, 2),
new OreDictStack(ANY_CONCRETE.any(), 8)
}, 100);
makeRecipe(new ComparableStack(ModItems.piston_set, 1, EnumPistonType.STEEL.ordinal()), new AStack[] {
new OreDictStack(STEEL.plate(), 16),
new OreDictStack(CU.plate(), 4),

View File

@ -306,6 +306,7 @@ public class ClientProxy extends ServerProxy {
//Foundry
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineStrandCaster.class, new RenderStrandCaster());
//AMS
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter());

View File

@ -51,6 +51,9 @@ public class ResourceManager {
public static final IModelCustom boiler_industrial = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/industrial_boiler.obj"));
public static final IModelCustom hephaestus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/hephaestus.obj"));
//Caster o' Strands
public static final IModelCustom strand_caster = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/strand_caster.obj"));
//Furnaces
public static final IModelCustom furnace_iron = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_iron.obj"));
public static final IModelCustom furnace_steel = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_steel.obj"));
@ -449,6 +452,9 @@ public class ResourceManager {
public static final ResourceLocation boiler_industrial_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/industrial_boiler.png");
public static final ResourceLocation hephaestus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/hephaestus.png");
//Strand Caster
public static final ResourceLocation strand_caster_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/strand_caster.png");
//Furnaces
public static final ResourceLocation furnace_iron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_iron.png");
public static final ResourceLocation furnace_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_steel.png");

View File

@ -0,0 +1,125 @@
package com.hbm.render.tileentity;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.lib.RefStrings;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.tileentity.machine.TileEntityMachineStrandCaster;
import net.minecraft.client.renderer.GLAllocation;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.IItemRenderer;
import org.lwjgl.opengl.GL11;
import java.awt.*;
import java.nio.DoubleBuffer;
public class RenderStrandCaster extends TileEntitySpecialRenderer implements IItemRendererProvider {
public static final ResourceLocation lava = new ResourceLocation(RefStrings.MODID, "textures/models/machines/lava_gray.png");
private static DoubleBuffer buf = null;
@Override
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) {
TileEntityMachineStrandCaster caster = (TileEntityMachineStrandCaster) te;
if(buf == null){
buf = GLAllocation.createDirectByteBuffer(8*4).asDoubleBuffer();
}
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y, z + 0.5);
switch(te.getBlockMetadata() - BlockDummyable.offset) {
case 4: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(270, 0F, 1F, 0F); break;
case 2: GL11.glRotatef(0, 0F, 1F, 0F); break;
}
GL11.glTranslated( 0.5, 0, 0.5);
GL11.glRotated(180, 0, 1, 0);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.strand_caster_tex);
ResourceManager.strand_caster.renderPart("caster");
if (caster.amount != 0 && caster.getInstalledMold() != null) {
double level = ((double) caster.amount / (double) caster.getCapacity()) * 0.675D;
double offset = ((double) caster.amount / (double) caster.getInstalledMold().getCost()) * 0.375D;
int color = caster.type.moltenColor;
int r = color >> 16 & 0xFF;
int g = color >> 8 & 0xFF;
int b = color & 0xFF;
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
GL11.glDisable(GL11.GL_LIGHTING);
GL11.glPushMatrix();
GL11.glColor3f( r/ 255F, g/ 255F, b/ 255F);
GL11.glEnable(GL11.GL_CLIP_PLANE0);
buf.put(new double[] { 0, 0, -1, 0.5} );
buf.rewind();
GL11.glClipPlane(GL11.GL_CLIP_PLANE0, buf);
GL11.glTranslated(0,0,-offset + 3.4);
ResourceManager.strand_caster.renderPart("plate");
GL11.glDisable(GL11.GL_CLIP_PLANE0);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_CULL_FACE);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
Tessellator tess = Tessellator.instance;
tess.setNormal(0F, 1F, 0F);
tess.setColorOpaque_F(r / 255F, g / 255F, b / 255F);
bindTexture(lava);
tess.startDrawingQuads();
tess.addVertexWithUV(-0.9, 2.3 + level, -0.999, 0, 0);
tess.addVertexWithUV(-0.9, 2.3 + level, 0.999, 0, 1);
tess.addVertexWithUV(0.9, 2.3 + level, 0.999, 1, 1);
tess.addVertexWithUV(0.9, 2.3 + level, -0.999, 1, 0);
tess.draw();
GL11.glPopMatrix();
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
}
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.machine_strand_caster);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase( ) {
public void renderInventory() {
GL11.glTranslated(2, 0, 2);
GL11.glScaled( 2, 2, 2);
}
public void renderCommon() {
GL11.glScaled(1, 1, 1);
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.strand_caster_tex); ResourceManager.strand_caster.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}
};
}
}

View File

@ -1,6 +1,7 @@
package com.hbm.tileentity;
import api.hbm.block.ICrucibleAcceptor;
import com.hbm.interfaces.IFluidAcceptor;
import com.hbm.interfaces.IFluidContainer;
import com.hbm.inventory.fluid.FluidType;
@ -9,20 +10,23 @@ import api.hbm.energy.IEnergyConnector;
import api.hbm.energy.IEnergyUser;
import api.hbm.fluid.IFluidConnector;
import api.hbm.tile.IHeatSource;
import com.hbm.inventory.material.Mats;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource {
public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource, ICrucibleAcceptor {
TileEntity tile;
boolean inventory;
boolean power;
boolean fluid;
boolean heat;
public boolean moltenMetal;
public TileEntityProxyCombo() { }
@ -41,7 +45,10 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
this.power = true;
return this;
}
public TileEntityProxyCombo moltenMetal() {
this.moltenMetal = true;
return this;
}
public TileEntityProxyCombo fluid() {
this.fluid = true;
return this;
@ -425,6 +432,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
this.inventory = nbt.getBoolean("inv");
this.power = nbt.getBoolean("power");
this.fluid = nbt.getBoolean("fluid");
this.moltenMetal = nbt.getBoolean("metal");
this.heat = nbt.getBoolean("heat");
}
@ -435,6 +443,7 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
nbt.setBoolean("inv", inventory);
nbt.setBoolean("power", power);
nbt.setBoolean("fluid", fluid);
nbt.setBoolean("metal", moltenMetal);
nbt.setBoolean("heat", heat);
}
@ -497,4 +506,36 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
((IHeatSource)getTile()).useUpHeat(heat);
}
}
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){
return ((ICrucibleAcceptor)getTile()).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack);
}
return false;
}
@Override
public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){
return ((ICrucibleAcceptor)getTile()).pour(world, x, y, z, dX, dY, dZ, side, stack);
}
return null;
}
@Override
public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){
return ((ICrucibleAcceptor)getTile()).canAcceptPartialFlow(world, x, y, z, side, stack);
}
return false;
}
@Override
public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){
return ((ICrucibleAcceptor)getTile()).flow(world, x, y, z, side, stack);
}
return null;
}
}

View File

@ -292,6 +292,7 @@ public class TileMappings {
put(TileEntityFoundryOutlet.class, "tileentity_foundry_outlet");
put(TileEntityFoundrySlagtap.class, "tileentity_foundry_slagtap");
put(TileEntitySlag.class, "tileentity_foundry_slag");
put(TileEntityMachineStrandCaster.class, "tileentity_strand_caster");
put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter");
put(TileEntityMachineFunnel.class, "tileentity_funnel");

View File

@ -158,7 +158,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset).getOpposite();
Vec3 impact = Vec3.createVectorHelper(0, 0, 0);
MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, this.wasteStack, MaterialShapes.NUGGET.q(2), impact);
MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, this.wasteStack, MaterialShapes.NUGGET.q(3), impact);
if(didPour != null) {
NBTTagCompound data = new NBTTagCompound();
@ -198,7 +198,7 @@ public class TileEntityCrucible extends TileEntityMachineBase implements IGUIPro
}
Vec3 impact = Vec3.createVectorHelper(0, 0, 0);
MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, toCast, MaterialShapes.NUGGET.q(2), impact);
MaterialStack didPour = CrucibleUtil.pourFullStack(worldObj, xCoord + 0.5D + dir.offsetX * 1.875D, yCoord + 0.25D, zCoord + 0.5D + dir.offsetZ * 1.875D, 6, true, toCast, MaterialShapes.NUGGET.q(3), impact);
if(didPour != null) {
NBTTagCompound data = new NBTTagCompound();

View File

@ -8,6 +8,10 @@ import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityFoundryBasin extends TileEntityFoundryCastingBase implements IRenderFoundry {
public TileEntityFoundryBasin() {
super(2);
}
@Override
public void updateEntity() {
super.updateEntity();

View File

@ -7,6 +7,7 @@ import com.hbm.items.machine.ItemMold.Mold;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
@ -19,8 +20,10 @@ import net.minecraftforge.common.util.ForgeDirection;
*
*/
public abstract class TileEntityFoundryCastingBase extends TileEntityFoundryBase implements ISidedInventory {
public ItemStack slots[] = new ItemStack[2];
public ItemStack[] slots;
public TileEntityFoundryCastingBase(int slotCount) {
slots = new ItemStack[slotCount];
}
public int cooloff = 100;
@Override

View File

@ -4,6 +4,10 @@ import com.hbm.inventory.material.NTMMaterial;
public class TileEntityFoundryMold extends TileEntityFoundryCastingBase implements IRenderFoundry {
public TileEntityFoundryMold() {
super(2);
}
@Override
public void updateEntity() {
super.updateEntity();

View File

@ -0,0 +1,333 @@
package com.hbm.tileentity.machine;
import api.hbm.block.ICrucibleAcceptor;
import api.hbm.fluid.IFluidStandardTransceiver;
import com.hbm.blocks.BlockDummyable;
import com.hbm.inventory.container.ContainerMachineStrandCaster;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIMachineStrandCaster;
import com.hbm.inventory.material.Mats;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemMold;
import com.hbm.items.machine.ItemScraps;
import com.hbm.packet.NBTPacket;
import com.hbm.packet.PacketDispatcher;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.INBTPacketReceiver;
import com.hbm.util.fauxpointtwelve.DirPos;
import cpw.mods.fml.common.network.NetworkRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.entity.item.EntityItem;
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.util.AxisAlignedBB;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
//god thank you bob for this base class
public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor, ISidedInventory, IFluidStandardTransceiver, INBTPacketReceiver, IInventory {
public FluidTank water;
public FluidTank steam;
public String getName() {
return "container.machineStrandCaster";
}
@Override
public String getInventoryName() {
return getName();
}
public TileEntityMachineStrandCaster() {
super(7);
water = new FluidTank(Fluids.WATER, 64_000);
steam = new FluidTank(Fluids.SPENTSTEAM, 64_000);
}
@Override
public void updateEntity() {
if (!worldObj.isRemote) {
if (this.lastType != this.type || this.lastAmount != this.amount) {
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
this.lastType = this.type;
this.lastAmount = this.amount;
}
if (this.amount >= this.getCapacity()) {
//In case of overfill problems, spit out the excess as scrap
if (amount > getCapacity()) {
ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, amount));
EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord + 2, zCoord + 0.5, scrap);
worldObj.spawnEntityInWorld(item);
}
this.amount = this.getCapacity();
}
if (this.amount == 0) {
this.type = null;
}
this.updateConnections();
ItemMold.Mold mold = this.getInstalledMold();
if (canProcess()) {
int itemsCasted = Math.min(amount / mold.getCost(), 9);
for (int j = 0; j < itemsCasted; j++) {
this.amount -= mold.getCost();
ItemStack out = mold.getOutput(type);
for (int i = 1; i < 7; i++) {
if (slots[i] == null) {
slots[i] = out.copy();
break;
}
if (slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) {
slots[i].stackSize += out.stackSize;
break;
}
}
}
markChanged();
water.setFill(water.getFill() - getWaterRequired() * itemsCasted);
steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted);
}
}
NBTTagCompound data = new NBTTagCompound();
water.writeToNBT(data, "w");
steam.writeToNBT(data, "s");
this.networkPack(data, 150);
}
public boolean canProcess() {
ItemMold.Mold mold = this.getInstalledMold();
if (type != null && mold != null && this.amount >= mold.getCost() * 9 && mold.getOutput(type) != null) {
for (int i = 1; i < 7; i++) {
if (slots[i] == null || slots[i].isItemEqual(mold.getOutput(type)) && slots[i].stackSize + mold.getOutput(type).stackSize <= mold.getOutput(type).getMaxStackSize())
return water.getFill() >= getWaterRequired() && steam.getFill() < steam.getMaxFill();
}
}
return false;
}
public DirPos[] getFluidConPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new DirPos[]{
new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ, rot),
new DirPos(xCoord - rot.offsetX - dir.offsetX, yCoord, zCoord - rot.offsetZ - dir.offsetZ, rot.getOpposite()),
new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX * 5, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ * 5, rot),
new DirPos(xCoord - rot.offsetX - dir.offsetX * 5, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 5, rot.getOpposite()),
};
}
public int[][] getMetalPourPos() {
ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset);
ForgeDirection rot = dir.getRotation(ForgeDirection.UP);
return new int[][]{
new int[]{xCoord + rot.offsetX - dir.offsetX, yCoord + 2, zCoord + rot.offsetZ - dir.offsetZ},
new int[]{xCoord - dir.offsetX, yCoord + 2, zCoord - dir.offsetZ},
new int[]{xCoord + rot.offsetX, yCoord + 2, zCoord + rot.offsetZ},
new int[]{xCoord, yCoord + 2, zCoord},
};
}
@Override
public ItemMold.Mold getInstalledMold() {
if (slots[0] == null) return null;
if (slots[0].getItem() == ModItems.mold) {
return ((ItemMold) slots[0].getItem()).getMold(slots[0]);
}
return null;
}
@Override
public int getMoldSize() {
return getInstalledMold().size;
}
@Override
public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) {
if (side != ForgeDirection.UP) return false;
for (int[] pos : getMetalPourPos()) {
if (pos[0] == x && pos[1] == y && pos[2] == z) {
return this.standardCheck(world, x, y, z, side, stack);
}
}
return false;
}
@Override
public boolean standardCheck(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) {
if (this.type != null && this.type != stack.material) return false;
return !(this.amount >= this.getCapacity() || getInstalledMold() == null);
}
@Override
public int getCapacity() {
ItemMold.Mold mold = this.getInstalledMold();
return mold == null ? 50000 : mold.getCost() * 10;
}
private int getWaterRequired() {
return getInstalledMold() != null ? 5 * getInstalledMold().getCost() : 50;
}
private void updateConnections() {
for (DirPos pos : getFluidConPos()) {
this.trySubscribe(water.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
for (DirPos pos : getFluidConPos()) {
sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir());
}
}
@Override
public FluidTank[] getSendingTanks() {
return new FluidTank[]{steam};
}
@Override
public FluidTank[] getReceivingTanks() {
return new FluidTank[]{water};
}
@Override
public FluidTank[] getAllTanks() {
return new FluidTank[]{water, steam};
}
@Override
public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new ContainerMachineStrandCaster(player.inventory, this);
}
@Override
@SideOnly(Side.CLIENT)
public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) {
return new GUIMachineStrandCaster(player.inventory, this);
}
public void networkPack(NBTTagCompound nbt, int range) {
if (!worldObj.isRemote)
PacketDispatcher.wrapper.sendToAllAround(new NBTPacket(nbt, xCoord, yCoord, zCoord), new NetworkRegistry.TargetPoint(this.worldObj.provider.dimensionId, xCoord, yCoord, zCoord, range));
}
@Override
public void networkUnpack(NBTTagCompound nbt) {
water.readFromNBT(nbt, "w");
steam.readFromNBT(nbt, "s");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
water.writeToNBT(nbt, "w");
steam.writeToNBT(nbt, "s");
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
water.readFromNBT(nbt, "w");
steam.readFromNBT(nbt, "s");
}
@Override
public boolean isItemValidForSlot(int i, ItemStack stack) {
if (i == 0) {
return stack.getItem() == ModItems.mold;
}
return false;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
public int[] getAccessibleSlotsFromSide(int meta) {
return new int[]{1, 2, 3, 4, 5, 6};
}
public void markChanged() {
this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this);
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
if (worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) {
return false;
} else {
return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128;
}
}
@Override
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
return this.isItemValidForSlot(slot, itemStack);
}
@Override
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
return !this.isItemValidForSlot(slot, itemStack);
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if (bb == null) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 7,
yCoord,
zCoord - 7,
xCoord + 7,
yCoord + 3,
zCoord + 7
);
}
return bb;
}
}

View File

@ -721,6 +721,7 @@ container.machineSelenium=Radial Performance Engine
container.machineShredder=Shredder
container.machineSILEX=SILEX
container.machineSolidifier=Solidifier
container.machineStrandCaster=Strand Caster
container.machineTurbine=Steam Turbine
container.machineTurbofan=Turbofan
container.machineWoodBurner=Wood-Burner
@ -5176,6 +5177,7 @@ tile.machine_stirling_creative.desc=Turns heat into energy. Requires external he
tile.machine_stirling_steel.name=Heavy Stirling Engine
tile.machine_stirling_steel.desc=Turns heat into energy. Requires external heat source.$Uses a much heavier gear to support higher temperatures.$Heat transfer rate: T*0.1 TU/t$Max intake: 1500 TU/t$Efficiency: 50%%
tile.machine_storage_drum.name=Nuclear Waste Disposal Drum
tile.machine_strand_caster.name=Strand Caster
tile.machine_telelinker.name=Turret Telemetry Linker
tile.machine_teleporter.name=Teleporter
tile.machine_tower_large.name=Cooling Tower

View File

@ -0,0 +1,946 @@
# Blender 3.6.1
# www.blender.org
mtllib strand_caster.mtl
o caster
v -1.000000 0.000000 1.000000
v 1.000000 0.000000 1.000000
v -1.000000 -0.000000 -6.000000
v 1.000000 -0.000000 -6.000000
v -1.000000 0.750000 -6.000000
v -1.000000 0.750000 1.000000
v 1.000000 0.750000 1.000000
v 1.000000 0.750000 -6.000000
v -1.000000 2.000000 1.000000
v 1.000000 2.000000 1.000000
v -1.000000 3.000000 1.000000
v 1.000000 3.000000 1.000000
v -1.000000 2.000000 -1.000000
v 1.000000 2.000000 -1.000000
v -1.000000 3.000000 -1.000000
v 1.000000 3.000000 -1.000000
v -0.875000 3.000000 0.875000
v 0.875000 3.000000 0.875000
v -0.875000 3.000000 -0.875000
v 0.875000 3.000000 -0.875000
v -0.875000 2.125000 0.875000
v 0.875000 2.125000 0.875000
v -0.875000 2.125000 -0.875000
v 0.875000 2.125000 -0.875000
v -0.750000 2.000000 0.750000
v 0.750000 2.000000 0.750000
v -0.750000 2.000000 -0.750000
v 0.750000 2.000000 -0.750000
v -0.750000 0.500000 -1.500000
v -0.750000 0.500000 0.750000
v 0.750000 0.500000 -1.500000
v -0.750000 0.750000 -5.750000
v -0.750000 0.750000 0.750000
v 0.750000 0.750000 0.750000
v 0.750000 0.750000 -5.750000
v -0.750000 0.500000 -5.750000
v 0.750000 0.500000 0.750000
v 0.750000 0.500000 -5.750000
v 0.750000 1.250000 -1.500000
v -0.750000 1.250000 -1.500000
v 0.750000 0.812500 -3.125000
v -0.750000 0.812500 -3.125000
v -0.750000 0.812500 -2.125000
v 0.750000 0.812500 -2.125000
v -0.750000 0.724112 -2.088388
v 0.750000 0.724112 -2.088388
v -0.750000 0.687500 -2.000000
v 0.750000 0.687500 -2.000000
v -0.750000 0.724112 -1.911612
v 0.750000 0.724112 -1.911612
v -0.750000 0.812500 -1.875000
v 0.750000 0.812500 -1.875000
v -0.750000 0.900888 -1.911612
v 0.750000 0.900888 -1.911612
v -0.750000 0.937500 -2.000000
v 0.750000 0.937500 -2.000000
v -0.750000 0.900888 -2.088388
v 0.750000 0.900888 -2.088388
v -0.750000 0.724112 -3.088388
v 0.750000 0.724112 -3.088388
v -0.750000 0.687500 -3.000000
v 0.750000 0.687500 -3.000000
v -0.750000 0.724112 -2.911612
v 0.750000 0.724112 -2.911612
v -0.750000 0.812500 -2.875000
v 0.750000 0.812500 -2.875000
v -0.750000 0.900888 -2.911612
v 0.750000 0.900888 -2.911612
v -0.750000 0.937500 -3.000000
v 0.750000 0.937500 -3.000000
v -0.750000 0.900888 -3.088388
v 0.750000 0.900888 -3.088388
v 0.750000 0.812500 -4.125000
v -0.750000 0.812500 -4.125000
v -0.750000 0.724112 -4.088388
v 0.750000 0.724112 -4.088388
v -0.750000 0.687500 -4.000000
v 0.750000 0.687500 -4.000000
v -0.750000 0.724112 -3.911612
v 0.750000 0.724112 -3.911612
v -0.750000 0.812500 -3.875000
v 0.750000 0.812500 -3.875000
v -0.750000 0.900888 -3.911612
v 0.750000 0.900888 -3.911612
v -0.750000 0.937500 -4.000000
v 0.750000 0.937500 -4.000000
v -0.750000 0.900888 -4.088388
v 0.750000 0.900888 -4.088388
v 0.750000 0.812500 -5.125000
v -0.750000 0.812500 -5.125000
v -0.750000 0.724112 -5.088388
v 0.750000 0.724112 -5.088388
v -0.750000 0.687500 -5.000000
v 0.750000 0.687500 -5.000000
v -0.750000 0.724112 -4.911612
v 0.750000 0.724112 -4.911612
v -0.750000 0.812500 -4.875000
v 0.750000 0.812500 -4.875000
v -0.750000 0.900888 -4.911612
v 0.750000 0.900888 -4.911612
v -0.750000 0.937500 -5.000000
v 0.750000 0.937500 -5.000000
v -0.750000 0.900888 -5.088388
v 0.750000 0.900888 -5.088388
v 0.750000 1.187500 -3.625000
v -0.750000 1.187500 -3.625000
v -0.750000 1.187500 -2.625000
v 0.750000 1.187500 -2.625000
v -0.750000 1.099112 -2.588388
v 0.750000 1.099112 -2.588388
v -0.750000 1.062500 -2.500000
v 0.750000 1.062500 -2.500000
v -0.750000 1.099112 -2.411612
v 0.750000 1.099112 -2.411612
v -0.750000 1.187500 -2.375000
v 0.750000 1.187500 -2.375000
v -0.750000 1.275888 -2.411612
v 0.750000 1.275888 -2.411612
v -0.750000 1.312500 -2.500000
v 0.750000 1.312500 -2.500000
v -0.750000 1.275888 -2.588388
v 0.750000 1.275888 -2.588388
v -0.750000 1.099112 -3.588388
v 0.750000 1.099112 -3.588388
v -0.750000 1.062500 -3.500000
v 0.750000 1.062500 -3.500000
v -0.750000 1.099112 -3.411612
v 0.750000 1.099112 -3.411612
v -0.750000 1.187500 -3.375000
v 0.750000 1.187500 -3.375000
v -0.750000 1.275888 -3.411612
v 0.750000 1.275888 -3.411612
v -0.750000 1.312500 -3.500000
v 0.750000 1.312500 -3.500000
v -0.750000 1.275888 -3.588388
v 0.750000 1.275888 -3.588388
v 0.750000 1.187500 -4.625000
v -0.750000 1.187500 -4.625000
v -0.750000 1.099112 -4.588388
v 0.750000 1.099112 -4.588388
v -0.750000 1.062500 -4.500000
v 0.750000 1.062500 -4.500000
v -0.750000 1.099112 -4.411612
v 0.750000 1.099112 -4.411612
v -0.750000 1.187500 -4.375000
v 0.750000 1.187500 -4.375000
v -0.750000 1.275888 -4.411612
v 0.750000 1.275888 -4.411612
v -0.750000 1.312500 -4.500000
v 0.750000 1.312500 -4.500000
v -0.750000 1.275888 -4.588388
v 0.750000 1.275888 -4.588388
v 0.750000 0.937500 -2.125000
v 0.875000 0.937500 -2.125000
v 0.750000 0.937500 -2.375000
v 0.875000 0.937500 -2.375000
v 0.750000 1.062500 -2.375000
v -0.750000 1.312500 -2.125000
v -0.875000 1.312500 -2.125000
v 0.875000 1.062500 -2.375000
v -0.750000 1.062500 -2.375000
v 0.750000 1.312500 -2.125000
v 0.875000 1.312500 -2.125000
v -0.875000 1.062500 -2.375000
v 0.875000 1.062500 -4.625000
v 0.750000 1.062500 -4.625000
v -0.750000 0.937500 -2.375000
v -0.875000 0.937500 -2.375000
v -0.750000 0.937500 -2.125000
v -0.875000 0.937500 -2.125000
v 0.875000 1.312500 -4.875000
v 0.750000 1.312500 -4.875000
v 0.875000 0.937500 -4.625000
v 0.750000 0.937500 -4.625000
v 0.875000 0.937500 -4.875000
v 0.750000 0.937500 -4.875000
v -0.750000 1.062500 -4.625000
v -0.875000 1.062500 -4.625000
v -0.750000 1.312500 -4.875000
v -0.875000 1.312500 -4.875000
v -0.750000 0.937500 -4.625000
v -0.875000 0.937500 -4.625000
v -0.750000 0.937500 -4.875000
v -0.875000 0.937500 -4.875000
v 0.750000 0.937500 -1.625000
v 0.875000 0.937500 -1.625000
v -0.750000 0.937500 -1.625000
v -0.875000 0.937500 -1.625000
v 0.750000 0.937500 -5.375000
v 0.875000 0.937500 -5.375000
v -0.750000 0.937500 -5.375000
v -0.875000 0.937500 -5.375000
v 0.750000 0.750000 -1.625000
v 0.875000 0.750000 -1.625000
v -0.875000 0.750000 -1.625000
v -0.750000 0.750000 -1.625000
v 0.750000 0.750000 -5.375000
v 0.875000 0.750000 -5.375000
v -0.875000 0.750000 -5.375000
v -0.750000 0.750000 -5.375000
v 0.250000 1.250000 -1.500000
v 0.161612 1.275888 -1.474112
v 0.125000 1.338388 -1.411612
v 0.161612 1.400888 -1.349112
v 0.250000 1.426777 -1.323223
v 0.338388 1.400888 -1.349112
v 0.375000 1.338388 -1.411612
v 0.338388 1.275888 -1.474112
v 0.250000 1.426777 -1.573223
v 0.161612 1.426777 -1.536612
v 0.125000 1.426777 -1.448223
v 0.161612 1.426777 -1.359835
v 0.338388 1.426777 -1.359835
v 0.375000 1.426777 -1.448223
v 0.338388 1.426777 -1.536612
v 0.250000 1.603553 -1.500000
v 0.161612 1.577665 -1.474112
v 0.125000 1.515165 -1.411612
v 0.161612 1.452665 -1.349112
v 0.338388 1.452665 -1.349112
v 0.375000 1.515165 -1.411612
v 0.338388 1.577665 -1.474112
v -0.161612 1.275888 -1.474112
v -0.125000 1.338388 -1.411612
v -0.161612 1.400888 -1.349112
v -0.250000 1.426777 -1.323223
v -0.338388 1.400888 -1.349112
v -0.375000 1.338388 -1.411612
v -0.338388 1.275888 -1.474112
v -0.250000 1.250000 -1.500000
v 0.161612 2.152189 -0.899587
v 0.250000 2.178077 -0.925476
v 0.125000 2.089689 -0.837087
v 0.161612 2.027189 -0.774587
v 0.375000 2.089689 -0.837087
v 0.338388 2.027189 -0.774587
v 0.338388 2.152189 -0.899587
v 0.250000 2.001301 -0.748699
v -0.250000 1.426777 -1.573223
v -0.338388 1.426777 -1.536612
v -0.375000 1.426777 -1.448223
v -0.338388 1.426777 -1.359835
v -0.161612 1.426777 -1.359835
v -0.125000 1.426777 -1.448223
v -0.161612 1.426777 -1.536612
v -0.250000 1.603553 -1.500000
v -0.338388 1.577665 -1.474112
v -0.375000 1.515165 -1.411612
v -0.338388 1.452665 -1.349112
v -0.161612 1.452665 -1.349112
v -0.125000 1.515165 -1.411612
v -0.161612 1.577665 -1.474112
v -0.338388 2.152189 -0.899587
v -0.250000 2.178077 -0.925476
v -0.375000 2.089689 -0.837087
v -0.338388 2.027189 -0.774587
v -0.125000 2.089689 -0.837087
v -0.161612 2.027189 -0.774587
v -0.161612 2.152189 -0.899587
v -0.250000 2.001301 -0.748699
v 0.750000 0.750000 -0.125000
v 0.750000 2.000000 -0.125000
v 0.838388 0.750000 -0.088388
v 0.838388 2.000000 -0.088388
v 0.875000 0.750000 -0.000000
v 0.875000 2.000000 -0.000000
v 0.838388 0.750000 0.088388
v 0.838388 2.000000 0.088388
v 0.750000 0.750000 0.125000
v 0.750000 2.000000 0.125000
v 0.750000 0.750000 0.375000
v 0.750000 2.000000 0.375000
v 0.838388 0.750000 0.411612
v 0.838388 2.000000 0.411612
v 0.875000 0.750000 0.500000
v 0.875000 2.000000 0.500000
v 0.838388 0.750000 0.588388
v 0.838388 2.000000 0.588388
v 0.750000 0.750000 0.625000
v 0.750000 2.000000 0.625000
v 0.750000 0.750000 -0.625000
v 0.750000 2.000000 -0.625000
v 0.838388 0.750000 -0.588388
v 0.838388 2.000000 -0.588388
v 0.875000 0.750000 -0.500000
v 0.875000 2.000000 -0.500000
v 0.838388 0.750000 -0.411612
v 0.838388 2.000000 -0.411612
v 0.750000 0.750000 -0.375000
v 0.750000 2.000000 -0.375000
v -0.750000 0.750000 -0.125000
v -0.750000 2.000000 -0.125000
v -0.750000 0.750000 0.125000
v -0.750000 2.000000 0.125000
v -0.838388 0.750000 0.088388
v -0.838388 2.000000 0.088388
v -0.875000 0.750000 -0.000000
v -0.875000 2.000000 -0.000000
v -0.838388 0.750000 -0.088388
v -0.838388 2.000000 -0.088388
v -0.750000 0.750000 0.375000
v -0.750000 2.000000 0.375000
v -0.750000 0.750000 0.625000
v -0.750000 2.000000 0.625000
v -0.838388 0.750000 0.588388
v -0.838388 2.000000 0.588388
v -0.875000 0.750000 0.500000
v -0.875000 2.000000 0.500000
v -0.838388 0.750000 0.411612
v -0.838388 2.000000 0.411612
v -0.750000 0.750000 -0.625000
v -0.750000 2.000000 -0.625000
v -0.750000 0.750000 -0.375000
v -0.750000 2.000000 -0.375000
v -0.838388 0.750000 -0.411612
v -0.838388 2.000000 -0.411612
v -0.875000 0.750000 -0.500000
v -0.875000 2.000000 -0.500000
v -0.838388 0.750000 -0.588388
v -0.838388 2.000000 -0.588388
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
vn -0.0000 -0.0000 1.0000
vn 1.0000 -0.0000 -0.0000
vn -1.0000 -0.0000 -0.0000
vn -0.0000 0.7071 -0.7071
vn -0.0000 -0.7071 0.7071
vn -0.0000 -0.7071 -0.7071
vn -0.0000 0.7071 0.7071
vn -0.7311 0.2611 0.6303
vn -0.9955 -0.0000 -0.0949
vn -0.9947 -0.0393 -0.0948
vn -0.6333 -0.2962 -0.7150
vn -0.0000 -0.3827 -0.9239
vn 0.6333 -0.2962 -0.7150
vn 0.9955 -0.0000 -0.0949
vn 0.7311 0.2611 0.6303
vn 0.9947 -0.0393 -0.0948
vn -0.6630 -0.0000 -0.7486
vn 0.6630 -0.0000 -0.7486
vn 0.6794 0.4063 -0.6110
vn 0.9987 0.0196 -0.0473
vn 0.7574 -0.0000 0.6530
vn -0.9987 0.0196 -0.0473
vn -0.7263 -0.3800 0.5728
vn -0.7574 -0.0000 0.6530
vn -0.6794 0.4063 -0.6110
vn -0.0000 -0.5562 0.8311
vn 0.7263 -0.3800 0.5728
vn 0.7071 -0.5000 0.5000
vn -0.7071 -0.5000 0.5000
vn -0.0000 0.5628 -0.8266
vn -0.7071 0.5000 -0.5000
vn 0.3827 -0.0000 -0.9239
vn 0.7071 -0.0000 -0.7071
vn 0.7071 -0.0000 0.7071
vn 0.3827 -0.0000 0.9239
vn -0.3827 -0.0000 0.9239
vn -0.7071 -0.0000 0.7071
vn -0.7071 -0.0000 -0.7071
vn -0.3827 -0.0000 -0.9239
vn 0.7071 0.5000 -0.5000
vt 0.484375 0.100000
vt 0.046875 0.366667
vt 0.046875 0.100000
vt 0.484375 0.733333
vt 0.468750 0.500000
vt 0.484375 0.466667
vt 0.531250 0.366667
vt 0.484375 0.366667
vt -0.000000 0.100000
vt 0.046875 0.466667
vt 0.484375 -0.000000
vt 0.656250 0.600000
vt 0.531250 0.466667
vt 0.656250 0.466667
vt 0.531250 0.600000
vt 0.531250 0.200000
vt 0.539062 0.616667
vt 0.648438 0.616667
vt 0.539062 0.733333
vt 0.648438 0.966667
vt 0.539062 0.966667
vt 0.468750 0.733333
vt 0.062500 0.766667
vt 0.062500 0.733333
vt 0.062500 0.700000
vt 0.046875 0.733333
vt 0.531250 -0.000000
vt 0.671875 -0.000000
vt 0.671875 0.100000
vt 0.812500 0.200000
vt 0.765625 -0.000000
vt 0.906250 -0.000000
vt 0.765625 0.100000
vt 0.906250 0.200000
vt 1.000000 -0.000000
vt 1.000000 0.200000
vt 0.058594 0.500000
vt 0.468750 0.700000
vt 0.468750 0.966667
vt 0.062500 0.966667
vt 0.062500 1.000000
vt 0.468750 1.000000
vt 0.484375 0.966667
vt 0.468750 0.766667
vt 0.484375 0.766667
vt 0.046875 0.766667
vt 0.046875 0.966667
vt 0.671875 0.200000
vt 0.765625 0.200000
vt 0.695312 0.550000
vt 0.679688 0.566667
vt 0.679688 0.516667
vt 0.875000 0.500000
vt 0.851562 0.516667
vt 0.851562 0.500000
vt 0.687500 0.433333
vt 0.695312 0.450000
vt 0.687500 0.450000
vt 0.695312 0.466667
vt 0.679688 0.450000
vt 0.835938 0.550000
vt 0.851562 0.566667
vt 0.835938 0.566667
vt 0.679688 0.500000
vt 0.656250 0.516667
vt 0.656250 0.500000
vt 0.695312 0.433333
vt 0.835938 0.450000
vt 0.835938 0.433333
vt 0.843750 0.450000
vt 0.835938 0.466667
vt 0.851562 0.450000
vt 0.902344 0.391667
vt 0.667969 0.408333
vt 0.667969 0.391667
vt 0.902344 0.366667
vt 0.914062 0.408333
vt 0.902344 0.408333
vt 0.656250 0.391667
vt 0.667969 0.433333
vt 0.531250 0.100000
vt 0.000000 0.366667
vt 0.046875 -0.000000
vt 0.656250 0.200000
vt 0.648438 0.733333
vt 0.621094 0.200000
vt 0.695312 0.566667
vt 0.875000 0.516667
vt 0.843750 0.433333
vt 0.667969 0.366667
vt 0.914062 0.391667
vt 0.656250 0.408333
vt 0.902344 0.433333
vt 0.921875 0.200000
vt 0.929688 0.400000
vt 0.921875 0.400000
vt 0.960938 0.200000
vt 0.968750 0.400000
vt 0.960938 0.400000
vt 0.937500 0.200000
vt 0.945312 0.400000
vt 0.937500 0.400000
vt 0.968750 0.200000
vt 0.976562 0.400000
vt 0.929688 0.200000
vt 0.914062 0.200000
vt 0.914062 0.400000
vt 0.953125 0.200000
vt 0.953125 0.400000
vt 0.945312 0.200000
vt 0.695312 0.341667
vt 0.703125 0.333333
vt 0.703125 0.350000
vt 0.710938 0.358333
vt 0.718750 0.333333
vt 0.718750 0.358333
vt 0.726562 0.358333
vt 0.734375 0.333333
vt 0.742188 0.341667
vt 0.734375 0.350000
vt 0.710938 0.333333
vt 0.726562 0.333333
vt 0.726562 0.308333
vt 0.734375 0.316667
vt 0.742188 0.333333
vt 0.703125 0.316667
vt 0.695312 0.325000
vt 0.695312 0.333333
vt 0.710938 0.308333
vt 0.687500 0.333333
vt 0.750000 0.333333
vt 0.742188 0.325000
vt 0.742188 0.200000
vt 0.750000 0.308333
vt 0.742188 0.308333
vt 0.734375 0.200000
vt 0.734375 0.308333
vt 0.695312 0.200000
vt 0.703125 0.308333
vt 0.695312 0.308333
vt 0.718750 0.200000
vt 0.718750 0.308333
vt 0.703125 0.200000
vt 0.687500 0.200000
vt 0.687500 0.308333
vt 0.710938 0.200000
vt 0.687500 0.366667
vt 0.679688 0.200000
vt 0.679688 0.366667
vt 0.671875 0.366667
vt 0.664062 0.200000
vt 0.664062 0.366667
vt 0.976562 0.200000
vt 0.750000 0.200000
vt 0.726562 0.200000
vt 0.656250 0.366667
s 0
usemtl
f 3/1/1 2/2/1 1/3/1
f 5/4/2 35/5/2 8/6/2
f 3/1/3 8/7/3 4/8/3
f 2/2/4 6/9/4 1/3/4
f 4/8/5 7/10/5 2/2/5
f 1/3/6 5/11/6 3/1/6
f 12/12/4 9/13/4 10/14/4
f 13/14/3 16/15/3 14/13/3
f 10/13/5 16/12/5 12/15/5
f 9/16/1 14/14/1 10/13/1
f 11/12/6 13/13/6 9/14/6
f 11/12/2 19/17/2 15/15/2
f 17/18/5 23/19/5 19/17/5
f 16/12/2 18/17/2 12/15/2
f 15/12/2 20/17/2 16/15/2
f 12/12/2 17/17/2 11/15/2
f 22/19/2 23/20/2 21/21/2
f 19/18/4 24/19/4 20/17/4
f 20/18/6 22/19/6 18/17/6
f 18/18/3 21/19/3 17/17/3
f 35/22/6 37/23/6 34/24/6
f 7/10/2 33/25/2 6/26/2
f 37/27/5 31/28/5 39/29/5
f 27/30/6 29/31/6 30/32/6
f 39/29/3 29/31/3 40/33/3
f 25/34/4 37/35/4 26/36/4
f 8/6/2 34/37/2 7/10/2
f 6/26/2 32/38/2 5/4/2
f 37/23/2 36/39/2 30/40/2
f 33/41/5 36/39/5 32/42/5
f 32/43/4 38/44/4 35/45/4
f 34/46/3 30/40/3 33/47/3
f 28/48/7 40/33/7 27/49/7
f 157/50/6 153/51/6 162/52/6
f 183/53/3 180/54/3 179/55/3
f 155/56/3 160/57/3 156/58/3
f 160/59/5 154/60/5 156/57/5
f 178/61/6 184/62/6 182/63/6
f 163/64/4 153/65/4 154/66/4
f 164/67/1 177/68/1 161/57/1
f 178/69/4 181/70/4 177/68/4
f 161/59/5 179/55/5 158/64/5
f 171/55/2 162/52/2 163/64/2
f 161/59/5 169/60/5 167/57/5
f 177/71/5 183/72/5 179/55/5
f 157/67/1 165/68/1 160/57/1
f 179/55/2 159/52/2 158/64/2
f 166/61/6 176/62/6 174/63/6
f 160/59/5 171/55/5 163/64/5
f 162/52/6 166/61/6 157/50/6
f 158/64/4 170/65/4 169/66/4
f 159/52/6 178/61/6 164/50/6
f 164/50/6 170/51/6 159/52/6
f 165/71/5 175/72/5 171/55/5
f 166/69/4 173/70/4 165/68/4
f 168/56/3 161/57/3 167/58/3
f 175/53/3 172/54/3 171/55/3
f 191/73/2 188/74/2 187/75/2
f 190/73/2 185/74/2 186/75/2
f 187/75/5 200/76/5 191/73/5
f 190/73/3 197/77/3 189/78/3
f 185/74/4 194/79/4 186/75/4
f 189/78/6 193/80/6 185/74/6
f 192/78/6 195/80/6 188/74/6
f 191/73/3 199/77/3 192/78/3
f 188/74/4 196/79/4 187/75/4
f 186/75/5 198/76/5 190/73/5
f 3/1/1 4/8/1 2/2/1
f 5/4/2 32/38/2 35/5/2
f 3/1/3 5/81/3 8/7/3
f 2/2/4 7/82/4 6/9/4
f 4/8/5 8/6/5 7/10/5
f 1/3/6 6/83/6 5/11/6
f 12/12/4 11/15/4 9/13/4
f 13/14/3 15/12/3 16/15/3
f 10/13/5 14/14/5 16/12/5
f 9/16/1 13/84/1 14/14/1
f 11/12/6 15/15/6 13/13/6
f 11/12/2 17/18/2 19/17/2
f 17/18/5 21/85/5 23/19/5
f 16/12/2 20/18/2 18/17/2
f 15/12/2 19/18/2 20/17/2
f 12/12/2 18/18/2 17/17/2
f 22/19/2 24/85/2 23/20/2
f 19/18/4 23/85/4 24/19/4
f 20/18/6 24/85/6 22/19/6
f 18/18/3 22/85/3 21/19/3
f 35/22/6 38/44/6 37/23/6
f 7/10/2 34/37/2 33/25/2
f 39/29/5 28/86/5 37/27/5
f 28/86/5 26/16/5 37/27/5
f 30/32/6 25/34/6 27/30/6
f 27/30/6 40/33/6 29/31/6
f 39/29/3 31/28/3 29/31/3
f 25/34/4 30/32/4 37/35/4
f 8/6/2 35/5/2 34/37/2
f 6/26/2 33/25/2 32/38/2
f 37/23/2 38/44/2 36/39/2
f 33/41/5 30/40/5 36/39/5
f 32/43/4 36/39/4 38/44/4
f 34/46/3 37/23/3 30/40/3
f 28/48/7 39/29/7 40/33/7
f 157/50/6 155/87/6 153/51/6
f 183/53/3 184/88/3 180/54/3
f 155/56/3 157/67/3 160/57/3
f 160/59/5 163/64/5 154/60/5
f 178/61/6 180/54/6 184/62/6
f 163/64/4 162/52/4 153/65/4
f 164/67/1 178/69/1 177/68/1
f 178/69/4 182/89/4 181/70/4
f 161/59/5 177/71/5 179/55/5
f 171/55/2 172/54/2 162/52/2
f 161/59/5 158/64/5 169/60/5
f 177/71/5 181/68/5 183/72/5
f 157/67/1 166/69/1 165/68/1
f 179/55/2 180/54/2 159/52/2
f 166/61/6 172/54/6 176/62/6
f 160/59/5 165/71/5 171/55/5
f 162/52/6 172/54/6 166/61/6
f 158/64/4 159/52/4 170/65/4
f 159/52/6 180/54/6 178/61/6
f 164/50/6 168/87/6 170/51/6
f 165/71/5 173/68/5 175/72/5
f 166/69/4 174/89/4 173/70/4
f 168/56/3 164/67/3 161/57/3
f 175/53/3 176/88/3 172/54/3
f 191/73/2 192/78/2 188/74/2
f 190/73/2 189/78/2 185/74/2
f 187/75/5 196/90/5 200/76/5
f 190/73/3 198/91/3 197/77/3
f 185/74/4 193/92/4 194/79/4
f 189/78/6 197/93/6 193/80/6
f 192/78/6 199/93/6 195/80/6
f 191/73/3 200/91/3 199/77/3
f 188/74/4 195/92/4 196/79/4
f 186/75/5 194/90/5 198/76/5
s 1
f 80/94/8 81/95/4 79/96/8
f 44/97/3 45/98/9 43/99/3
f 68/100/10 69/101/2 67/102/10
f 46/103/9 47/104/1 45/98/9
f 84/100/10 85/101/2 83/102/10
f 66/105/4 67/102/10 65/95/4
f 48/106/1 49/96/8 47/107/1
f 64/94/8 65/95/4 63/96/8
f 50/94/8 51/95/4 49/96/8
f 62/106/1 63/96/8 61/107/1
f 52/105/4 53/102/10 51/95/4
f 72/108/7 42/99/3 71/109/7
f 60/103/9 61/104/1 59/98/9
f 54/100/10 55/101/2 53/102/10
f 41/97/3 59/98/9 42/99/3
f 56/110/2 57/109/7 55/101/2
f 82/105/4 83/102/10 81/95/4
f 70/110/2 71/109/7 69/101/2
f 58/108/7 43/99/3 57/109/7
f 78/106/1 79/96/8 77/107/1
f 88/108/7 74/99/3 87/109/7
f 76/103/9 77/104/1 75/98/9
f 73/97/3 75/98/9 74/99/3
f 86/110/2 87/109/7 85/101/2
f 96/94/8 97/95/4 95/96/8
f 100/100/10 101/101/2 99/102/10
f 98/105/4 99/102/10 97/95/4
f 94/106/1 95/96/8 93/107/1
f 104/108/7 90/99/3 103/109/7
f 92/103/9 93/104/1 91/98/9
f 89/97/3 91/98/9 90/99/3
f 102/110/2 103/109/7 101/101/2
f 144/94/8 145/95/4 143/96/8
f 108/97/3 109/98/9 107/99/3
f 132/100/10 133/101/2 131/102/10
f 110/103/9 111/104/1 109/98/9
f 148/100/10 149/101/2 147/102/10
f 130/105/4 131/102/10 129/95/4
f 112/106/1 113/96/8 111/107/1
f 128/94/8 129/95/4 127/96/8
f 114/94/8 115/95/4 113/96/8
f 126/106/1 127/96/8 125/107/1
f 116/105/4 117/102/10 115/95/4
f 136/108/7 106/99/3 135/109/7
f 124/103/9 125/104/1 123/98/9
f 118/100/10 119/101/2 117/102/10
f 105/97/3 123/98/9 106/99/3
f 120/110/2 121/109/7 119/101/2
f 146/105/4 147/102/10 145/95/4
f 134/110/2 135/109/7 133/101/2
f 122/108/7 107/99/3 121/109/7
f 142/106/1 143/96/8 141/107/1
f 152/108/7 138/99/3 151/109/7
f 140/103/9 141/104/1 139/98/9
f 137/97/3 139/98/9 138/99/3
f 150/110/2 151/109/7 149/101/2
f 204/111/11 211/112/12 203/113/13
f 202/114/14 209/115/3 201/116/15
f 209/115/3 208/117/16 201/116/15
f 214/118/17 206/119/18 207/120/19
f 203/113/13 210/121/20 202/114/14
f 215/122/21 207/120/19 208/117/16
f 209/115/3 222/123/22 215/122/21
f 221/124/23 213/125/24 214/118/17
f 218/126/25 210/121/20 211/112/12
f 215/122/21 221/124/23 214/118/17
f 219/127/26 211/112/12 212/128/27
f 217/129/28 209/115/3 210/121/20
f 204/111/11 205/130/29 212/128/27
f 212/128/27 205/130/29 219/127/26
f 205/131/29 206/119/18 213/125/24
f 213/125/24 220/132/30 205/131/29
f 236/133/31 205/134/29 220/135/30
f 230/116/15 245/122/21 223/117/16
f 222/123/22 235/136/5 221/137/23
f 234/138/32 218/139/25 219/140/26
f 232/141/7 222/123/22 216/142/33
f 235/136/5 220/135/30 221/137/23
f 233/143/6 217/129/28 218/139/25
f 227/111/11 241/112/12 228/113/13
f 238/144/8 219/140/26 205/145/29
f 228/113/13 240/121/20 229/114/14
f 239/115/3 252/123/22 245/122/21
f 248/126/25 240/121/20 241/112/12
f 240/121/20 230/116/15 229/114/14
f 244/118/17 225/119/18 224/120/19
f 245/122/21 224/120/19 223/117/16
f 251/124/23 243/125/24 244/118/17
f 231/146/34 216/142/33 217/129/28
f 245/122/21 251/124/23 244/118/17
f 242/128/27 248/126/25 241/112/12
f 247/129/28 239/115/3 240/121/20
f 227/111/11 226/130/29 242/128/27
f 242/128/27 226/130/29 249/127/26
f 226/131/29 225/119/18 243/125/24
f 243/125/24 250/132/30 226/131/29
f 258/133/31 226/134/29 250/135/30
f 252/123/22 257/136/5 251/137/23
f 256/138/32 248/139/25 249/140/26
f 254/141/7 252/123/22 246/142/33
f 257/136/5 250/135/30 251/137/23
f 255/143/6 247/129/28 248/139/25
f 260/144/8 249/140/26 226/145/29
f 253/146/34 246/142/33 247/129/28
f 262/147/35 263/148/36 261/144/35
f 264/149/36 265/48/5 263/148/36
f 266/150/5 267/151/37 265/48/5
f 268/152/37 269/84/38 267/151/37
f 274/149/36 275/48/5 273/148/36
f 272/147/35 273/148/36 271/144/35
f 276/150/5 277/151/37 275/48/5
f 278/152/37 279/84/38 277/151/37
f 284/149/36 285/48/5 283/148/36
f 282/147/35 283/148/36 281/144/35
f 286/150/5 287/151/37 285/48/5
f 288/152/37 289/84/38 287/151/37
f 294/147/39 295/148/40 293/144/39
f 296/149/40 297/48/6 295/148/40
f 298/150/6 299/151/41 297/48/6
f 300/152/41 291/84/42 299/151/41
f 304/147/39 305/148/40 303/144/39
f 306/149/40 307/48/6 305/148/40
f 308/150/6 309/151/41 307/48/6
f 310/152/41 301/84/42 309/151/41
f 314/147/39 315/148/40 313/144/39
f 316/149/40 317/48/6 315/148/40
f 318/150/6 319/151/41 317/48/6
f 320/152/41 311/84/42 319/151/41
f 80/94/8 82/105/4 81/95/4
f 44/97/3 46/103/9 45/98/9
f 68/100/10 70/110/2 69/101/2
f 46/103/9 48/153/1 47/104/1
f 84/100/10 86/110/2 85/101/2
f 66/105/4 68/100/10 67/102/10
f 48/106/1 50/94/8 49/96/8
f 64/94/8 66/105/4 65/95/4
f 50/94/8 52/105/4 51/95/4
f 62/106/1 64/94/8 63/96/8
f 52/105/4 54/100/10 53/102/10
f 72/108/7 41/97/3 42/99/3
f 60/103/9 62/153/1 61/104/1
f 54/100/10 56/110/2 55/101/2
f 41/97/3 60/103/9 59/98/9
f 56/110/2 58/108/7 57/109/7
f 82/105/4 84/100/10 83/102/10
f 70/110/2 72/108/7 71/109/7
f 58/108/7 44/97/3 43/99/3
f 78/106/1 80/94/8 79/96/8
f 88/108/7 73/97/3 74/99/3
f 76/103/9 78/153/1 77/104/1
f 73/97/3 76/103/9 75/98/9
f 86/110/2 88/108/7 87/109/7
f 96/94/8 98/105/4 97/95/4
f 100/100/10 102/110/2 101/101/2
f 98/105/4 100/100/10 99/102/10
f 94/106/1 96/94/8 95/96/8
f 104/108/7 89/97/3 90/99/3
f 92/103/9 94/153/1 93/104/1
f 89/97/3 92/103/9 91/98/9
f 102/110/2 104/108/7 103/109/7
f 144/94/8 146/105/4 145/95/4
f 108/97/3 110/103/9 109/98/9
f 132/100/10 134/110/2 133/101/2
f 110/103/9 112/153/1 111/104/1
f 148/100/10 150/110/2 149/101/2
f 130/105/4 132/100/10 131/102/10
f 112/106/1 114/94/8 113/96/8
f 128/94/8 130/105/4 129/95/4
f 114/94/8 116/105/4 115/95/4
f 126/106/1 128/94/8 127/96/8
f 116/105/4 118/100/10 117/102/10
f 136/108/7 105/97/3 106/99/3
f 124/103/9 126/153/1 125/104/1
f 118/100/10 120/110/2 119/101/2
f 105/97/3 124/103/9 123/98/9
f 120/110/2 122/108/7 121/109/7
f 146/105/4 148/100/10 147/102/10
f 134/110/2 136/108/7 135/109/7
f 122/108/7 108/97/3 107/99/3
f 142/106/1 144/94/8 143/96/8
f 152/108/7 137/97/3 138/99/3
f 140/103/9 142/153/1 141/104/1
f 137/97/3 140/103/9 139/98/9
f 150/110/2 152/108/7 151/109/7
f 204/111/11 212/128/27 211/112/12
f 202/114/14 210/121/20 209/115/3
f 209/115/3 215/122/21 208/117/16
f 214/118/17 213/125/24 206/119/18
f 203/113/13 211/112/12 210/121/20
f 215/122/21 214/118/17 207/120/19
f 209/115/3 216/142/33 222/123/22
f 221/124/23 220/132/30 213/125/24
f 218/126/25 217/129/28 210/121/20
f 215/122/21 222/123/22 221/124/23
f 219/127/26 218/126/25 211/112/12
f 217/129/28 216/142/33 209/115/3
f 236/133/31 238/154/8 205/134/29
f 230/116/15 239/115/3 245/122/21
f 222/123/22 237/155/43 235/136/5
f 234/138/32 233/143/6 218/139/25
f 232/141/7 237/155/43 222/123/22
f 235/136/5 236/133/31 220/135/30
f 233/143/6 231/146/34 217/129/28
f 227/111/11 242/128/27 241/112/12
f 238/144/8 234/138/32 219/140/26
f 228/113/13 241/112/12 240/121/20
f 239/115/3 246/142/33 252/123/22
f 248/126/25 247/129/28 240/121/20
f 240/121/20 239/115/3 230/116/15
f 244/118/17 243/125/24 225/119/18
f 245/122/21 244/118/17 224/120/19
f 251/124/23 250/132/30 243/125/24
f 231/146/34 232/141/7 216/142/33
f 245/122/21 252/123/22 251/124/23
f 242/128/27 249/127/26 248/126/25
f 247/129/28 246/142/33 239/115/3
f 258/133/31 260/154/8 226/134/29
f 252/123/22 259/155/43 257/136/5
f 256/138/32 255/143/6 248/139/25
f 254/141/7 259/155/43 252/123/22
f 257/136/5 258/133/31 250/135/30
f 255/143/6 253/146/34 247/129/28
f 260/144/8 256/138/32 249/140/26
f 253/146/34 254/141/7 246/142/33
f 262/147/35 264/149/36 263/148/36
f 264/149/36 266/150/5 265/48/5
f 266/150/5 268/152/37 267/151/37
f 268/152/37 270/156/38 269/84/38
f 274/149/36 276/150/5 275/48/5
f 272/147/35 274/149/36 273/148/36
f 276/150/5 278/152/37 277/151/37
f 278/152/37 280/156/38 279/84/38
f 284/149/36 286/150/5 285/48/5
f 282/147/35 284/149/36 283/148/36
f 286/150/5 288/152/37 287/151/37
f 288/152/37 290/156/38 289/84/38
f 294/147/39 296/149/40 295/148/40
f 296/149/40 298/150/6 297/48/6
f 298/150/6 300/152/41 299/151/41
f 300/152/41 292/156/42 291/84/42
f 304/147/39 306/149/40 305/148/40
f 306/149/40 308/150/6 307/48/6
f 308/150/6 310/152/41 309/151/41
f 310/152/41 302/156/42 301/84/42
f 314/147/39 316/149/40 315/148/40
f 316/149/40 318/150/6 317/48/6
f 318/150/6 320/152/41 319/151/41
f 320/152/41 312/156/42 311/84/42
o plate
v -0.500000 0.937500 -1.500000
v 0.500000 0.937500 -1.500000
v -0.500000 0.937500 -5.250000
v 0.500000 0.937500 -5.250000
v -0.500000 1.062500 -5.250000
v -0.500000 1.062500 -1.500000
v 0.500000 1.062500 -1.500000
v 0.500000 1.062500 -5.250000
vn -0.0000 -1.0000 -0.0000
vn -0.0000 1.0000 -0.0000
vn -0.0000 -0.0000 -1.0000
vn 1.0000 -0.0000 -0.0000
vn -1.0000 -0.0000 -0.0000
vt 0.890625 0.566667
vt 0.656250 0.700000
vt 0.656250 0.566667
vt 0.890625 0.700000
vt 0.664062 0.700000
vt 0.664062 0.566667
vt 0.890625 0.683333
vt 0.656250 0.683333
vt 0.656250 0.583333
vt 0.890625 0.583333
s 0
usemtl
f 323/157/44 322/158/44 321/159/44
f 327/159/45 325/160/45 326/158/45
f 323/161/46 328/159/46 324/162/46
f 324/163/47 327/158/47 322/164/47
f 321/165/48 325/157/48 323/166/48
f 323/157/44 324/160/44 322/158/44
f 327/159/45 328/157/45 325/160/45
f 323/161/46 325/158/46 328/159/46
f 324/163/47 328/160/47 327/158/47
f 321/165/48 326/159/48 325/157/48

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB