diff --git a/src/main/java/ley/modding/dartcraft/Dartcraft.java b/src/main/java/ley/modding/dartcraft/Dartcraft.java index 7d1498d..b320b8f 100644 --- a/src/main/java/ley/modding/dartcraft/Dartcraft.java +++ b/src/main/java/ley/modding/dartcraft/Dartcraft.java @@ -6,15 +6,14 @@ import cpw.mods.fml.common.event.FMLInitializationEvent; import cpw.mods.fml.common.event.FMLPostInitializationEvent; import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.registry.EntityRegistry; -import cpw.mods.fml.relauncher.Side; import ley.modding.dartcraft.block.BlockPowerOre; import ley.modding.dartcraft.block.Blocks; +import ley.modding.dartcraft.entity.*; import ley.modding.dartcraft.event.EventHandler; import ley.modding.dartcraft.internal.Registry; -import ley.modding.dartcraft.entity.EntityColdChicken; -import ley.modding.dartcraft.entity.EntityColdCow; -import ley.modding.dartcraft.entity.EntityColdPig; import ley.modding.dartcraft.item.BaseItem; +import ley.modding.dartcraft.item.ItemEntityBottle; +import ley.modding.dartcraft.item.ItemForceFlask; import ley.modding.dartcraft.item.Items; import ley.modding.dartcraft.item.tool.ItemForceMitts; import ley.modding.dartcraft.item.tool.ItemForcePickaxe; @@ -33,7 +32,6 @@ public class Dartcraft { @Mod.Instance public static Dartcraft instance = new Dartcraft(); - public static DartcraftClient client = new DartcraftClient(); public static IRegistry registry; @SidedProxy(serverSide = "ley.modding.dartcraft.proxy.CommonProxy", clientSide = "ley.modding.dartcraft.proxy.ClientProxy") public static CommonProxy proxy; @@ -47,10 +45,6 @@ public class Dartcraft { @Mod.EventHandler public void init(FMLInitializationEvent e) { - // TODO: use proxys - if (e.getSide() == Side.CLIENT) - client.init(); - registry = new Registry(); Items.forcegem = registry.registerItem(new BaseItem("forcegem")); Items.forceingot = registry.registerItem(new BaseItem("forceingot")); @@ -60,12 +54,16 @@ public class Dartcraft { Items.forcemitts = registry.registerItem(new ItemForceMitts()); Items.forcepickaxe = registry.registerItem(new ItemForcePickaxe()); Items.forceshears = registry.registerItem(new ItemForceShears()); + Items.forceflask = registry.registerItem(new ItemForceFlask()); + Items.entitybottle = registry.registerItem(new ItemEntityBottle()); Blocks.powerore = registry.registerBlock(new BlockPowerOre()); - + proxy.init(); int entityId = 0; EntityRegistry.registerModEntity(EntityColdChicken.class, "coldChicken", entityId++, Dartcraft.instance, 40, 1, true); EntityRegistry.registerModEntity(EntityColdCow.class, "coldCow", entityId++, Dartcraft.instance, 40, 1, true); EntityRegistry.registerModEntity(EntityColdPig.class, "coldPig", entityId++, Dartcraft.instance, 40, 1, true); + EntityRegistry.registerModEntity(EntityBottle.class, "entityBottleItem", entityId++, Dartcraft.instance, 40, 1, true); + EntityRegistry.registerModEntity(EntityFlyingFlask.class, "entityFlyingFlask", entityId++, Dartcraft.instance, 40, 1, true); } @Mod.EventHandler diff --git a/src/main/java/ley/modding/dartcraft/DartcraftClient.java b/src/main/java/ley/modding/dartcraft/DartcraftClient.java deleted file mode 100644 index a044585..0000000 --- a/src/main/java/ley/modding/dartcraft/DartcraftClient.java +++ /dev/null @@ -1,22 +0,0 @@ -package ley.modding.dartcraft; - -import cpw.mods.fml.client.registry.RenderingRegistry; -import ley.modding.dartcraft.client.renderer.entity.RenderColdAnimal; -import ley.modding.dartcraft.entity.EntityColdChicken; -import ley.modding.dartcraft.entity.EntityColdCow; -import ley.modding.dartcraft.entity.EntityColdPig; -import net.minecraft.client.model.ModelChicken; -import net.minecraft.client.model.ModelCow; -import net.minecraft.client.model.ModelPig; - -class DartcraftClient { - public void init() { - renderEntities(); - } - - public void renderEntities() { - RenderingRegistry.registerEntityRenderingHandler(EntityColdChicken.class, new RenderColdAnimal(new ModelChicken(), 0.6f, "textures/entity/coldChicken.png")); - RenderingRegistry.registerEntityRenderingHandler(EntityColdCow.class, new RenderColdAnimal(new ModelCow(), 0.6f, "textures/entity/coldCow.png")); - RenderingRegistry.registerEntityRenderingHandler(EntityColdPig.class, new RenderColdAnimal(new ModelPig(), 0.6f, "textures/entity/coldPig.png")); - } -} diff --git a/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java b/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java index 139bfc1..04b3d84 100644 --- a/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java +++ b/src/main/java/ley/modding/dartcraft/api/IBottleRenderable.java @@ -8,5 +8,4 @@ public interface IBottleRenderable { void setEntityItem(ItemStack var1); - void sendDescriptionPacket(); } diff --git a/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java b/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java new file mode 100644 index 0000000..f2ac280 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/client/renderer/entity/RenderEntityBottle.java @@ -0,0 +1,44 @@ +package ley.modding.dartcraft.client.renderer.entity; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBottleRenderable; +import ley.modding.dartcraft.client.renderer.item.RenderItemForceFlask; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.entity.Entity; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderEntityBottle extends RenderLiving { + + private static final ResourceLocation texture = new ResourceLocation(Dartcraft.MODID, "bottle.png"); + + private static IModelCustom bottle = AdvancedModelLoader.loadModel(new ResourceLocation(Dartcraft.MODID, "models/bottle.obj")); + + public RenderEntityBottle() { + super(null, 0.2F); + } + + @Override + public void doRender(Entity entity, double par2, double par4, double par6, float par8, float par9) { + if (entity instanceof IBottleRenderable) { + ItemStack stack = ((IBottleRenderable)entity).getEntityItem(); + GL11.glPushMatrix(); + GL11.glTranslated(par2, par4 + 0.25D, par6); + GL11.glScalef(0.5F, 0.5F, 0.5F); + RenderItemForceFlask.instance.renderItem(IItemRenderer.ItemRenderType.ENTITY, stack, new Object[0]); + GL11.glPopMatrix(); + } + } + + protected ResourceLocation getEntityTexture(Entity entity) { + return texture; + } + +} diff --git a/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java b/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java new file mode 100644 index 0000000..81eeb04 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/client/renderer/item/RenderItemForceFlask.java @@ -0,0 +1,230 @@ +package ley.modding.dartcraft.client.renderer.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.entity.EntityBottle; +import ley.modding.dartcraft.item.ItemEntityBottle; +import ley.modding.dartcraft.util.EntityUtils; +import net.minecraft.client.Minecraft; +import net.minecraft.client.entity.EntityClientPlayerMP; +import net.minecraft.client.gui.FontRenderer; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.client.renderer.entity.RenderManager; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ResourceLocation; +import net.minecraft.world.World; +import net.minecraftforge.client.IItemRenderer; +import net.minecraftforge.client.model.AdvancedModelLoader; +import net.minecraftforge.client.model.IModelCustom; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +@SideOnly(Side.CLIENT) +public class RenderItemForceFlask implements IItemRenderer { + + private static RenderItem renderer = new RenderItem(); + + private IModelCustom bottle = AdvancedModelLoader.loadModel(new ResourceLocation(Dartcraft.MODID, "models/bottle.obj")); + + private IModelCustom liquid = AdvancedModelLoader.loadModel(new ResourceLocation(Dartcraft.MODID, "models/liquid.obj")); + + public static RenderItemForceFlask instance = new RenderItemForceFlask(); + + public boolean handleRenderType(ItemStack item, IItemRenderer.ItemRenderType type) { + return true; + } + + public boolean shouldUseRenderHelper(IItemRenderer.ItemRenderType type, ItemStack item, IItemRenderer.ItemRendererHelper helper) { + return (type == IItemRenderer.ItemRenderType.INVENTORY || type == IItemRenderer.ItemRenderType.ENTITY); + } + + public void renderItem(IItemRenderer.ItemRenderType type, ItemStack item, Object... data) { + FontRenderer fontRenderer = (Minecraft.getMinecraft()).fontRenderer; + Entity entity = null; + GL11.glPushMatrix(); + if (item != null && item.getItem() instanceof ItemEntityBottle && item.hasTagCompound()) + try { + if (item.getItemDamage() == 0) { + EntityLivingBase entityLivingBase = null; + NBTTagCompound comp = (NBTTagCompound)item.getTagCompound().copy(); + Entity temp = null; + if (comp.hasKey("CanPickUpLoot")) { + temp = EntityList.createEntityFromNBT(comp, (World)(Minecraft.getMinecraft()).theWorld); + } else { + temp = EntityUtils.getEntity(comp.getString("id")); + } + if (temp instanceof EntityLivingBase) + entityLivingBase = (EntityLivingBase)temp; + if (entityLivingBase != null && (Dartcraft.proxy.getClientInstance()).theWorld != null) { + entityLivingBase.setWorld((World)(Dartcraft.proxy.getClientInstance()).theWorld); + entityLivingBase.setLocationAndAngles(0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + } + entity = entityLivingBase; + } else if (item.getItemDamage() == 1) { + EntityItem entityItem = new EntityItem((World)(Dartcraft.proxy.getClientInstance()).theWorld); + entityItem.setLocationAndAngles(0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + entityItem.hoverStart = 1.0F; + entityItem.setEntityItemStack(new ItemStack(Blocks.brick_block)); + entity = entityItem; + } + } catch (Exception e) {} + float value = 0.0F; + float angle = 0.0F; + float scale = 0.0F; + scale(type); + if (type == IItemRenderer.ItemRenderType.INVENTORY && (entity instanceof net.minecraft.entity.monster.EntityEnderman || entity instanceof net.minecraft.entity.monster.EntitySpider || entity instanceof net.minecraft.entity.monster.EntityCaveSpider)) + entity = null; + if (entity != null) { + float coef = 1.0F; + if (entity instanceof net.minecraft.entity.monster.EntitySilverfish || entity instanceof net.minecraft.entity.passive.EntityOcelot || entity instanceof net.minecraft.entity.passive.EntityWolf) + coef = 2.5F; + scale = 8.0F * ((((Entity)entity).height > ((Entity)entity).width * coef) ? (1.3F / ((Entity)entity).height) : (0.5F / ((Entity)entity).width)); + value = -((Entity)entity).height; + angle = 0.0F; + if (entity instanceof net.minecraft.entity.passive.EntityPig) + scale = 6.5F / ((Entity)entity).height; + if (entity instanceof EntityBottle) { + scale = 30.0F; + value += 1.5F; + } + if (entity instanceof net.minecraft.entity.passive.EntityAnimal) { + int age = item.getTagCompound().getInteger("Age"); + if (age < 0) { + scale /= 2.0F; + value -= ((Entity)entity).height * 0.5F; + } + } + if (type == IItemRenderer.ItemRenderType.INVENTORY) + angle = 45.0F; + if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) + angle = 90.0F; + GL11.glScalef(scale, scale, scale); + GL11.glTranslatef(0.0F, value, 0.0F); + GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + try { + boolean shouldRender = (type != IItemRenderer.ItemRenderType.INVENTORY); + if (!shouldRender) { + Minecraft mc = Dartcraft.proxy.getClientInstance(); + EntityClientPlayerMP entityClientPlayerMP = (mc != null) ? mc.thePlayer : null; + boolean found = false; + if (entityClientPlayerMP != null && ((EntityPlayer)entityClientPlayerMP).inventory != null && ((EntityPlayer)entityClientPlayerMP).inventory.mainInventory != null) + for (int i = 0; i < 9; i++) { + ItemStack invStack = ((EntityPlayer)entityClientPlayerMP).inventory.mainInventory[i]; + if (invStack != null && invStack == item) { + found = true; + break; + } + } + if (!found) + shouldRender = true; + } + if (shouldRender) { + Render render = RenderManager.instance.getEntityRenderObject((Entity)entity); + if (render != null && entity != null) + render.doRender((Entity)entity, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + } + } catch (Exception e) {} + GL11.glPopMatrix(); + GL11.glPushMatrix(); + scale(type); + } else if (item != null && item.getItemDamage() > 0) { + Dartcraft.proxy.bindTexture("liquid.png"); + GL11.glEnable(3042); + float alpha = 1.0F; + switch (item.getItemDamage()) { + case 6: + GL11.glColor4f(0.0F, 0.5F, 1.0F, alpha); + break; + case 5: + GL11.glColor4f(1.0F, 0.0F, 0.0F, alpha); + break; + case 4: + GL11.glColor4f(0.0627F, 0.7176F, 0.4863F, alpha); + break; + case 2: + GL11.glColor4f(1.0F, 1.0F, 0.0F, alpha); + break; + } + scale = 7.0F; + float yScale = 1.0F; + GL11.glScalef(scale, scale, scale); + if (type == IItemRenderer.ItemRenderType.ENTITY) { + GL11.glRotatef(0.44999766F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(168.90388F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, 0.65270597F, 0.0F); + } else if (type == IItemRenderer.ItemRenderType.EQUIPPED || type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + GL11.glRotatef(185.40428F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(6.599979F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, 0.65270597F, 0.0F); + } else if (type == IItemRenderer.ItemRenderType.INVENTORY) { + GL11.glRotatef(184.65428F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(6.749961F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, 0.65270597F, 0.0F); + } + GL11.glTranslatef(0.0F, 1.0F - yScale, 0.0F); + GL11.glScalef(1.0F, yScale, 1.0F); + this.liquid.renderAll(); + GL11.glDisable(3042); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + scale(type); + } + GL11.glEnable(3042); + GL11.glBlendFunc(770, 771); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + Dartcraft.proxy.bindTexture("bottle.png"); + this.bottle.renderAll(); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void scale(IItemRenderer.ItemRenderType type) { + float value = 0.0F; + float angle = 0.0F; + float angle2 = 0.0F; + float scale = 0.0F; + value = ((Entity)(Minecraft.getMinecraft()).thePlayer).rotationYaw * 2.0F; + angle = ((Entity)(Minecraft.getMinecraft()).thePlayer).rotationPitch * 2.0F; + angle2 = ((EntityLivingBase)(Minecraft.getMinecraft()).thePlayer).rotationYawHead * 2.0F; + if (Keyboard.isKeyDown(50)); + if (type == IItemRenderer.ItemRenderType.INVENTORY) { + scale = 0.04557239F; + GL11.glScalef(scale, scale, scale); + GL11.glRotatef(1950.6F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(1950.6F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-178.5F, 0.0F, 1.0F, 0.0F); + } + if (type == IItemRenderer.ItemRenderType.EQUIPPED) { + value = 0.5F; + angle = -30.0F; + scale = 0.036F; + GL11.glTranslatef(0.35F, 0.65F, -0.1F); + GL11.glScalef(scale, scale, scale); + GL11.glRotatef(angle, 1.0F, 0.0F, -1.0F); + } + if (type == IItemRenderer.ItemRenderType.EQUIPPED_FIRST_PERSON) { + value = 0.5F; + angle = 180.0F; + scale = 0.025F; + GL11.glTranslatef(value, value, -0.1F); + GL11.glScalef(scale, scale, scale); + } + if (type == IItemRenderer.ItemRenderType.ENTITY) { + value = 0.5F; + angle = 180.0F; + scale = 0.035F; + GL11.glScalef(scale, scale, scale); + } + } + +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityBottle.java b/src/main/java/ley/modding/dartcraft/entity/EntityBottle.java new file mode 100644 index 0000000..1747254 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityBottle.java @@ -0,0 +1,185 @@ +package ley.modding.dartcraft.entity; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBottleRenderable; +import ley.modding.dartcraft.item.ItemEntityBottle; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.DamageSource; +import net.minecraft.world.World; + +public class EntityBottle extends EntityLivingBase implements IBottleRenderable { + + private int timeout; + + public EntityBottle(World world) { + super(world); + } + + public EntityBottle(World world, double x, double y, double z, ItemStack contents) { + super(world); + setPosition(x, y, z); + setEntityItem(contents); + setSize(0.2F, 0.2F); + } + + protected void entityInit() { + super.entityInit(); + ((Entity)this).getDataWatcher().addObject(12, new ItemStack(Items.entitybottle)); + } + + public void writeToNBT(NBTTagCompound comp) { + super.writeToNBT(comp); + ItemStack contents = getEntityItem(); + if (contents != null) + comp.setTag("bottleContents", (NBTBase)contents.writeToNBT(new NBTTagCompound())); + } + + public void readFromNBT(NBTTagCompound comp) { + super.readFromNBT(comp); + if (comp.hasKey("bottleContents")) + setEntityItem(ItemStack.loadItemStackFromNBT(comp + .getCompoundTag("bottleContents"))); + } + + public void writeEntityToNBT(NBTTagCompound comp) {} + + public void readEntityFromNBT(NBTTagCompound comp) {} + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.timeout--; + if (!Dartcraft.proxy.isSimulating(((Entity)this).worldObj)) { + if (this.timeout <= 0) + this.timeout = 40; + } else { + ItemStack contents = getEntityItem(); + if (contents != null && contents.getItem() instanceof ItemEntityBottle && this.timeout <= 0) { + this.timeout = 40; + NBTTagCompound comp = contents.getTagCompound(); + if (comp.hasKey("Fire") && comp.getShort("Fire") > 0) + comp.setShort("Fire", (short)-1); + if (comp.hasKey("FallDistance") && comp.getFloat("FallDistance") > 0.0F) + comp.setFloat("FallDistance", 0.0F); + short maxHealth = 0; + Entity temp = EntityList.createEntityFromNBT((NBTTagCompound)comp.copy(), ((Entity)this).worldObj); + EntityLivingBase bottled = null; + if (temp instanceof EntityLivingBase) + bottled = (EntityLivingBase)temp; + try { + maxHealth = (short)(int)bottled.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + if (maxHealth > 0 && comp.hasKey("Health") && comp.getShort("Health") < maxHealth) + comp.setShort("Health", (short)(comp.getShort("Health") + 1)); + } + } + } + + public String getBottledName() { + String name = ""; + ItemStack bottleStack = null; + int iterations = 0; + try { + ItemStack contents = getEntityItem(); + bottleStack = (contents != null) ? contents.copy() : null; + if (bottleStack != null) { + Entity entity = EntityList.createEntityFromNBT(bottleStack.getTagCompound(), ((Entity)this).worldObj); + while (entity instanceof EntityBottle) { + EntityBottle bottle = (EntityBottle)entity; + bottleStack = bottle.getEntityItem(); + entity = EntityList.createEntityFromNBT(bottleStack.getTagCompound(), ((Entity)this).worldObj); + iterations++; + } + switch (iterations) { + case 0: + name = name + "Twice "; + break; + case 1: + name = name + "Thrice "; + break; + default: + name = name + (iterations + 2) + "x "; + break; + } + name = name + "Bottled " + bottleStack.getTagCompound().getString("dartName"); + } + } catch (Exception e) { + return "Bottled Something"; + } + return name; + } + + public boolean canBePushed() { + return false; + } + + protected void dealFireDamage(int damage) {} + + public boolean attackEntityFrom(DamageSource source, float amount) { + if (((Entity)this).isDead || !Dartcraft.proxy.isSimulating(((Entity)this).worldObj)) + return false; + if (source.getEntity() != null && source.getEntity() instanceof EntityPlayer && + !source.isProjectile()) { + ItemStack contents = getEntityItem(); + if (contents != null) { + if (!contents.hasTagCompound()) + contents.setTagCompound(new NBTTagCompound()); + contents.getTagCompound().setBoolean("wasDropped", true); + } + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "dartcraft:bottle", 2.0F, + EntityUtils.randomPitch()); + ItemUtils.dropItem(contents, ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + setDead(); + } + return false; + } + + public void onCollideWithPlayer(EntityPlayer player) {} + + @SideOnly(Side.CLIENT) + public boolean canRenderOnFire() { + return false; + } + + public void setFire(int time) {} + + public ItemStack getHeldItem() { + return null; + } + + public void setCurrentItemOrArmor(int i, ItemStack itemstack) {} + + public ItemStack[] getLastActiveItems() { + return null; + } + + public ItemStack getEntityItem() { + return ((Entity)this).getDataWatcher().getWatchableObjectItemStack(12); + } + + public void setEntityItem(ItemStack stack) { + ((Entity)this).getDataWatcher().updateObject(12, stack); + try { + String foundName = stack.getTagCompound().getString("id"); + getEntityData().setString("name", foundName); + } catch (Exception e) { + e.printStackTrace(); + } + if (Dartcraft.proxy.isSimulating(((Entity)this).worldObj)); + } + + public ItemStack getEquipmentInSlot(int slot) { + return null; + } + +} diff --git a/src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java b/src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java new file mode 100644 index 0000000..e1cfd7e --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/entity/EntityFlyingFlask.java @@ -0,0 +1,147 @@ +package ley.modding.dartcraft.entity; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.api.IBottleRenderable; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.projectile.EntityThrowable; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; + +public class EntityFlyingFlask extends EntityThrowable implements IBottleRenderable { + + public EntityLivingBase contained; + + private boolean creative = false; + + private boolean capture = false; + + public EntityFlyingFlask(World world) { + super(world); + } + + public EntityFlyingFlask(World world, double x, double y, double z) { + super(world, x, y, z); + } + + public EntityFlyingFlask(World world, EntityLivingBase thrower, ItemStack flaskStack) { + super(world, thrower); + try { + if (thrower instanceof EntityPlayer && ((EntityPlayer)thrower).capabilities.isCreativeMode) + this.creative = true; + if (flaskStack != null) { + NBTTagCompound comp = (NBTTagCompound)flaskStack.getTagCompound().copy(); + Entity entity = EntityList.createEntityFromNBT(comp, world); + NBTTagCompound dartTag = EntityUtils.getModComp(entity); + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 10); + this.contained = (EntityLivingBase)entity; + } else { + this.capture = true; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + protected void entityInit() { + super.entityInit(); + ((Entity)this).getDataWatcher().addObject(12, new ItemStack(Items.entitybottle)); + } + + protected void onImpact(MovingObjectPosition pos) { + if (Dartcraft.proxy.isSimulating(((Entity)this).worldObj)) { + if (this.contained != null) { + this.contained.setPosition(((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + ((Entity)this).worldObj.spawnEntityInWorld((Entity)this.contained); + if (!this.creative) { + ItemStack flaskStack = new ItemStack(Items.forceflask); + ItemUtils.dropItem(flaskStack, ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + } + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "random.pop", 1.0F, + EntityUtils.randomPitch()); + } else if (this.capture) { + if (!bottleEntity(pos.entityHit)) { + ((Entity)this).worldObj.playSoundAtEntity((Entity)this, "random.pop", 1.0F, + EntityUtils.randomPitch()); + ItemUtils.dropItem(new ItemStack(Items.forceflask), ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + } + } + setDead(); + } + } + + private boolean bottleEntity(Entity entity) { + try { + if (entity == null) + return false; + EntityLivingBase victim = null; + if (entity instanceof EntityLivingBase) + victim = (EntityLivingBase)entity; + if (victim != null && !((Entity)victim).isDead && victim.getHealth() > 0.0F) { + boolean nope = false; + /*boolean whitelisted = !Config.entityWhitelist; + if (!whitelisted && PluginBottles.whitelist != null) + for (String check : PluginBottles.whitelist) { + if (check != null && check.equals(victim.getClass().getCanonicalName())) { + whitelisted = true; + break; + } + } + if (!whitelisted) + nope = true;*/ + if (victim instanceof EntityPlayer || victim instanceof EntityBottle) + nope = true; + if (!nope && (victim instanceof net.minecraft.entity.monster.EntityMob || victim instanceof net.minecraft.entity.monster.EntityGhast)) { + float maxHealth = 0.0F; + try { + maxHealth = (float)victim.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + float ratio = victim.getHealth() / maxHealth; + float limit = 0.25F; + if (ratio >= limit && maxHealth >= 5.0F) + nope = true; + NBTTagCompound dartTag = EntityUtils.getModComp(entity); + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 5); + } + if (nope) { + ((Entity)this).worldObj.playSoundAtEntity((Entity)victim, "dartcraft:nope", 2.0F, + EntityUtils.randomPitch()); + return false; + } + ItemStack bottleStack = EntityUtils.bottleEntity((Entity)victim); + ((Entity)this).worldObj.playSoundAtEntity((Entity)victim, "dartcraft:swipe", 2.0F, + EntityUtils.randomPitch()); + ((Entity)this).worldObj.removeEntity((Entity)victim); + victim = null; + ItemUtils.dropItem(bottleStack, ((Entity)this).worldObj, ((Entity)this).posX, ((Entity)this).posY, ((Entity)this).posZ); + } + return true; + } catch (Exception e) { + e.printStackTrace(); + return false; + } + } + + public ItemStack getEntityItem() { + return ((Entity)this).getDataWatcher().getWatchableObjectItemStack(12); + } + + public void setEntityItem(ItemStack stack) { + ((Entity)this).getDataWatcher().updateObject(12, stack); + try { + getEntityData().setString("name", stack.getTagCompound().getString("id")); + } catch (Exception e) {} + } + +} diff --git a/src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java b/src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java new file mode 100644 index 0000000..0d7abe9 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/event/EntityBottleHandler.java @@ -0,0 +1,118 @@ +package ley.modding.dartcraft.event; + +import cpw.mods.fml.common.Mod.EventHandler; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.util.EntityUtils; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityAgeable; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.*; +import net.minecraft.entity.passive.*; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraftforge.event.entity.player.EntityItemPickupEvent; +import net.minecraftforge.event.entity.player.PlayerEvent; + +public class EntityBottleHandler { + + @EventHandler + public void handleTaggedPickup(EntityItemPickupEvent event) { + try { + if (((PlayerEvent)event).entityPlayer == null || event.item == null || event.item.getEntityItem() == null) + return; + boolean trigger = false; + if (event.item.getEntityItem().getItem() == Items.entitybottle) + if (meshBottles(((PlayerEvent)event).entityPlayer, event.item.getEntityItem())) { + event.setCanceled(true); + trigger = true; + } + if (Dartcraft.proxy.isSimulating(((Entity)((PlayerEvent)event).entityPlayer).worldObj) && trigger) { + ((Entity)((PlayerEvent)event).entityPlayer).worldObj.playSoundAtEntity((Entity)((PlayerEvent)event).entityPlayer, "random.pop", 0.25F, + EntityUtils.randomPitch()); + ((Entity)((PlayerEvent)event).entityPlayer).worldObj.removeEntity((Entity)event.item); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public static boolean meshBottles(EntityPlayer player, ItemStack item) { + try { + EntityLivingBase entityOne = (EntityLivingBase)EntityList.createEntityFromNBT(item + .getTagCompound(), null); + if (!getHandleEntity((Entity)entityOne)) + return false; + String nameOne = entityOne.getClass().getCanonicalName(); + ItemStack[] equipOne = new ItemStack[5]; + int color = 0; + boolean child = false; + boolean villager = false; + String owner = ""; + String nameTagName = entityOne.getEntityData().getString("nameTagName"); + if (entityOne instanceof EntitySheep) + color = ((EntitySheep)entityOne).getFleeceColor(); + if (entityOne instanceof EntityAgeable && ((EntityAgeable)entityOne).isChild()) + child = true; + if (entityOne instanceof EntityZombie && ((EntityZombie)entityOne).isChild()) + child = true; + if (entityOne instanceof EntityZombie && ((EntityZombie)entityOne).isVillager()) + villager = true; + if (entityOne instanceof EntityTameable) { + EntityLivingBase owningEntity = ((EntityTameable) entityOne).getOwner(); + owner = (owningEntity != null) ? owningEntity.getCommandSenderName() : null; + } + int i; + for (i = 0; i < 5; i++) { + equipOne[i] = entityOne.getEquipmentInSlot(i); + if (equipOne[i] != null && (!(entityOne instanceof EntityPigZombie) || i != 0 || equipOne[i] + .getItem() != net.minecraft.init.Items.golden_sword)) + return false; + } + for (i = 0; i < player.inventory.mainInventory.length; i++) { + ItemStack invStack = player.inventory.mainInventory[i]; + if (invStack != null && invStack.getItem() == Items.entitybottle && invStack + .hasTagCompound() && invStack.stackSize < invStack.getMaxStackSize()) { + EntityLivingBase entityTwo = (EntityLivingBase)EntityList.createEntityFromNBT(invStack + .getTagCompound(), null); + if (nameOne.equals(entityTwo.getClass().getCanonicalName())) + if (!(entityTwo instanceof EntitySheep) || ((EntitySheep)entityTwo).getFleeceColor() == color) + if (!(entityTwo instanceof EntityAgeable) || ((EntityAgeable)entityTwo).isChild() == child) + if (!(entityTwo instanceof EntityZombie) || ((EntityZombie)entityTwo).isChild() == child) + if (!(entityTwo instanceof EntityZombie) || ((EntityZombie)entityTwo).isVillager() == villager) + if (!(entityTwo instanceof EntityTameable) || ((EntityTameable)entityTwo).getOwner() + .equals(owner)) { + for (int j = 0; j < 5; j++) { + ItemStack checkStack = entityTwo.getEquipmentInSlot(j); + if (checkStack != null && (!(entityOne instanceof EntityPigZombie) || j != 0 || checkStack + .getItem() != net.minecraft.init.Items.golden_sword)) + return false; + } + invStack.stackSize++; + invStack.animationsToGo = 10; + return true; + } + } + } + } catch (Exception e) {} + return false; + } + + private static boolean getHandleEntity(Entity entity) { + try { + String name = entity.getClass().getCanonicalName(); + Class[] accepted = { + EntityCow.class, EntityChicken.class, EntitySheep.class, EntityPig.class, EntityWolf.class, EntityZombie.class, EntityEnderman.class, EntityGhast.class, EntityBlaze.class, EntityPigZombie.class, + EntitySkeleton.class }; + for (Class check : accepted) { + if (name.equals(check.getCanonicalName())) + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + +} diff --git a/src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java b/src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java new file mode 100644 index 0000000..f7ff6d3 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/item/ItemEntityBottle.java @@ -0,0 +1,249 @@ +package ley.modding.dartcraft.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.entity.EntityBottle; +import ley.modding.dartcraft.entity.EntityFlyingFlask; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.monster.EntityCreeper; +import net.minecraft.entity.monster.EntitySkeleton; +import net.minecraft.entity.passive.EntityChicken; +import net.minecraft.entity.passive.EntityCow; +import net.minecraft.entity.passive.EntityPig; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.MathHelper; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemEntityBottle extends Item { + + public static final int ENTITY_META = 0; + + public static final int AREA_META = 1; + + public static final int CHECK_TIME = 40; + + public ItemEntityBottle() { + setCreativeTab(Dartcraft.tab); + setMaxStackSize(64); + setUnlocalizedName("entitybottle"); + } + + @SideOnly(Side.CLIENT) + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean thing) { + if (stack.hasTagCompound()) { + NBTTagCompound comp = (NBTTagCompound)stack.getTagCompound().copy(); + if (stack.getItemDamage() == 0) { + Entity entity = null; + if (comp.hasKey("CanPickUpLoot")) + entity = EntityList.createEntityFromNBT(comp, ((Entity)player).worldObj); + if (comp != null && comp.hasKey("dartName")) { + String name = null; + if (entity instanceof EntityBottle) + name = ((EntityBottle)entity).getBottledName(); + if (name != null) { + list.clear(); + list.add(name); + } + } + } else if (stack.getItemDamage() == 1) { + if (comp.hasKey("specialID")) { + if (comp.getString("specialID").equals("fountain")) + list.add("Fairy Fountain"); + if (comp.getString("specialID").equals("darthome")) + list.add("Dart Home"); + } + } + } + } + + private String retrieveName(String name) { + if (name.contains("entity.Cat.name")) + return "Cat"; + return name; + } + + public String getItemStackDisplayName(ItemStack stack) { + if (!stack.hasTagCompound()) + return super.getItemStackDisplayName(stack); + if (stack.getItemDamage() == 0) { + String name = stack.getTagCompound().getString("dartName"); + NBTTagCompound comp = (NBTTagCompound)stack.getTagCompound().copy(); + if (name.equals("entity.DartCraft.entityBeeSwarm.name")) + return "Flask of Angry Bees"; + if (name.equals("entity.DartCraft.entityFairy.name")) + return "Bottled Fairy"; + if (name != null && !name.equals("")) + return "" + name; + } else if (stack.getItemDamage() == 1) { + return "Bottled Area"; + } + return super.getItemStackDisplayName(stack); + } + + public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) { + if (stack == null || !Dartcraft.proxy.isSimulating(world)) + return; + if (stack.getItemDamage() == 0) { + if (stack.hasTagCompound()) + stack.getTagCompound().setInteger("timeout", stack.getTagCompound().getInteger("timeout") + 1); + if (stack.hasTagCompound() && stack.getTagCompound().hasKey("wasDropped")) + stack.getTagCompound().removeTag("wasDropped"); + if (stack != null && stack.getItem() instanceof ItemEntityBottle && stack.hasTagCompound() && stack + .getTagCompound().getInteger("timeout") >= 40) { + stack.getTagCompound().setInteger("timeout", 0); + NBTTagCompound comp = stack.getTagCompound(); + String name = comp.getString("dartName"); + if (name != null && name.equals("Creeper")) { + boolean bane = (comp.hasKey("ForgeData") && comp.getCompoundTag("ForgeData").hasKey("DartCraft") && comp.getCompoundTag("ForgeData").getCompoundTag("DartCraft").getBoolean("baned")); + if (!bane && entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer)entity; + world.createExplosion((Entity)new EntityCreeper(world), ((Entity)player).posX, ((Entity)player).posY, ((Entity)player).posZ, 0.25F, false); + comp.setBoolean("dartToDestroy", true); + for (int i = 0; i < player.inventory.mainInventory.length; i++) { + ItemStack tempStack = player.inventory.mainInventory[i]; + if (tempStack != null && tempStack.getItem() instanceof ItemEntityBottle && tempStack + .hasTagCompound() && tempStack.getTagCompound().hasKey("dartToDestroy") && tempStack + .getTagCompound().getBoolean("dartToDestroy")) { + //player.inventory.setInventorySlotContents(i, new ItemStack(PAItems.resource, CommonProxy.rand.nextInt(3) + 1, 3)); + break; + } + } + return; + } + } + if (comp.hasKey("Fire") && comp.getShort("Fire") > 0) + comp.setShort("Fire", (short)-1); + if (comp.hasKey("FallDistance") && comp.getFloat("FallDistance") > 0.0F) + comp.setFloat("FallDistance", 0.0F); + short maxHealth = 0; + Entity temp = EntityList.createEntityFromNBT((NBTTagCompound)comp.copy(), world); + EntityLivingBase bottled = null; + if (temp instanceof EntityLivingBase) + bottled = (EntityLivingBase)temp; + try { + maxHealth = (short)(int)bottled.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + if (maxHealth > 0 && comp.hasKey("Health") && comp.getShort("Health") < maxHealth) + comp.setShort("Health", (short)(comp.getShort("Health") + 1)); + } + } + } + + public boolean onItemUseFirst(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ) { + try { + if (!Dartcraft.proxy.isSimulating(world) || stack == null || stack + .getItemDamage() == 1); + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + try { + if (stack.getItemDamage() == 0) { + boolean thrown = player.isSneaking(); + if (Dartcraft.proxy.isSimulating(world)) + if (!thrown) { + spawnEntity(world, player, stack); + } else { + EntityFlyingFlask flask = new EntityFlyingFlask(world, (EntityLivingBase)player, stack); + world.spawnEntityInWorld((Entity)flask); + flask.setEntityItem(stack.copy()); + world.playSoundAtEntity((Entity)player, "random.bow", 1.0F, + EntityUtils.randomPitch()); + } + stack.stackSize--; + if (!thrown) { + if (stack.stackSize > 0) { + if (!player.inventory.addItemStackToInventory(new ItemStack(Items.forceflask))) + if (Dartcraft.proxy.isSimulating(world)) + ItemUtils.dropItem(new ItemStack(Items.forceflask), world, ((Entity)player).posX, ((Entity)player).posY, ((Entity)player).posZ); + return stack; + } + return new ItemStack(Items.forceflask); + } + } else if (stack.getItemDamage() == 1) { + + } + } catch (Exception e) { + e.printStackTrace(); + } + return stack; + } + + private void spawnEntity(World world, EntityPlayer player, ItemStack stack) { + if (stack != null && stack.hasTagCompound()) { + NBTTagCompound comp = (NBTTagCompound)stack.getTagCompound().copy(); + Entity entity = EntityList.createEntityFromNBT(comp, world); + if (entity != null && entity instanceof EntityLivingBase) { + double xIncr = (-MathHelper.sin(((Entity)player).rotationYaw / 180.0F * 3.1415927F) * MathHelper.cos(((Entity)player).rotationPitch / 180.0F * 3.1415927F)); + double yIncr = -MathHelper.sin(((Entity)player).rotationPitch / 180.0F * 3.1415927F); + double zIncr = (MathHelper.cos(((Entity)player).rotationYaw / 180.0F * 3.1415927F) * MathHelper.cos(((Entity)player).rotationPitch / 180.0F * 3.1415927F)); + double x = ((Entity)player).posX + xIncr * 2.0D; + double y = ((Entity)player).posY; + double z = ((Entity)player).posZ + zIncr * 2.0D; + EntityLivingBase restored = (EntityLivingBase)entity; + restored.setPosition(x, y, z); + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)restored); + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 10); + world.spawnEntityInWorld((Entity)restored); + world.playSoundAtEntity((Entity)player, "dartcraft:bottle", 2.0F, + EntityUtils.randomPitch()); + } + } + } + + public boolean hasCustomEntity(ItemStack stack) { + if (stack == null || !stack.hasTagCompound()) + return false; + return ((!stack.getTagCompound().getBoolean("wasDropped") && stack.getItemDamage() == 0) || ( + !stack.getTagCompound().hasKey("specialID") && stack.getItemDamage() == 1 && stack.stackSize < 2)); + } + + public Entity createEntity(World world, Entity entity, ItemStack stack) { + if (stack == null || !stack.hasTagCompound()) + return null; + try { + if (stack.getItemDamage() == 0) { + EntityBottle item = new EntityBottle(world, entity.posX, entity.posY, entity.posZ, stack); + ((Entity)item).motionX = entity.motionX; + ((Entity)item).motionY = entity.motionY; + ((Entity)item).motionZ = entity.motionZ; + return (Entity)item; + } + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + @Override + public void getSubItems(Item par1, CreativeTabs tabs, List list) { + try { + list.add(EntityUtils.bottleEntity((Entity)new EntityCow(null))); + list.add(EntityUtils.bottleEntity((Entity)new EntityPig(null))); + list.add(EntityUtils.bottleEntity((Entity)new EntityChicken(null))); + EntitySkeleton skeleton = new EntitySkeleton(null); + skeleton.setSkeletonType(1); + list.add(EntityUtils.bottleEntity((Entity)skeleton)); + } catch (Exception e) { + e.printStackTrace(); + } + } + +} diff --git a/src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java b/src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java new file mode 100644 index 0000000..880a9e5 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/item/ItemForceFlask.java @@ -0,0 +1,294 @@ +package ley.modding.dartcraft.item; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.entity.EntityBottle; +import ley.modding.dartcraft.entity.EntityFlyingFlask; +import ley.modding.dartcraft.event.EntityBottleHandler; +import ley.modding.dartcraft.util.EntityUtils; +import ley.modding.dartcraft.util.ItemUtils; +import net.minecraft.creativetab.CreativeTabs; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; +import net.minecraft.item.EnumAction; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +import java.util.List; + +public class ItemForceFlask extends Item { + + public static final int EMPTY_META = 0; + + public static final int MILK_META = 1; + + public static final int FORCE_META = 2; + + public static final int CHATEAU_META = 3; + + public static final int GREEN_META = 4; + + public static final int RED_META = 5; + + public static final int BLUE_META = 6; + + public static final float FLASK_AMOUNT = 250.0F; + + public static final float DRINK_AMOUNT = 1.0F; + + public ItemForceFlask() { + setMaxDamage(0); + setHasSubtypes(true); + setUnlocalizedName("forceflask"); + setCreativeTab(Dartcraft.tab); + setMaxStackSize(64); + setContainerItem(this); + } + + public boolean doesContainerItemLeaveCraftingGrid(ItemStack stack) { + return true; + } + + public ItemStack getContainerItemStack(ItemStack stack) { + if (stack != null) + if (stack.hasTagCompound() && stack.getTagCompound().getBoolean("triedCraft")) + return new ItemStack(Blocks.glass); + return new ItemStack(this, 1, 0); + } + + public void onUpdate(ItemStack stack, World world, Entity entity, int par4, boolean par5) { + try { + if (Dartcraft.proxy.isSimulating(world) && stack != null && entity != null && entity instanceof EntityPlayer) { + EntityPlayer player = (EntityPlayer)entity; + if (stack.getItemDamage() == 2 || stack.getItemDamage() == 1) { + if (!stack.hasTagCompound()) + stack.setTagCompound(new NBTTagCompound()); + if (stack.getTagCompound().hasKey("triedCraft") && stack.getTagCompound() + .getBoolean("triedCraft")) + stack.getTagCompound().removeTag("triedCraft"); + } else if (stack.getItemDamage() != 0 || stack.stackSize == 0) { + + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + public String getUnlocalizedName(ItemStack stack) { + String name = "item.forceflask_"; + if (stack != null) + switch (stack.getItemDamage()) { + case 0: + name = name + "empty"; + break; + case 1: + name = name + "milk"; + break; + case 4: + name = name + "potion_green"; + break; + case 6: + name = name + "potion_blue"; + break; + case 5: + name = name + "potion_red"; + break; + case 3: + name = name + "potion_chateau"; + break; + case 2: + name = name + "potion_force"; + break; + } + return name; + } + + public boolean itemInteractionForEntity(ItemStack stack, EntityPlayer player, EntityLivingBase entity) { + try { + if (stack.getItemDamage() == 0) + if (entity instanceof net.minecraft.entity.passive.EntityCow) { + player.swingItem(); + if (stack.stackSize == 1) + stack.setItemDamage(1); + return true; + } + } catch (Exception e) { + e.printStackTrace(); + } + return false; + } + + public EnumAction getItemUseAction(ItemStack stack) { + try { + switch (stack.getItemDamage()) { + case 1: + case 5: + case 4: + case 2: + case 6: + case 3: + return EnumAction.drink; + } + } catch (Exception e) { + e.printStackTrace(); + } + return EnumAction.none; + } + + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + try { + if (stack.getItemDamage() == 0 && player.isSneaking()) { + if (Dartcraft.proxy.isSimulating(world)) { + EntityFlyingFlask flask = new EntityFlyingFlask(world, (EntityLivingBase)player, null); + world.spawnEntityInWorld((Entity)flask); + world.playSoundAtEntity((Entity)player, "random.bow", 1.0F, + EntityUtils.randomPitch()); + } + stack.stackSize--; + return stack; + } + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)player); + if ((stack.getItemDamage() >= 32 && stack.hasTagCompound() && stack + .getTagCompound().getFloat("amount") >= 1.0F) || stack.getItemDamage() == 1) + player.setItemInUse(stack, getMaxItemUseDuration(stack)); + } catch (Exception e) { + e.printStackTrace(); + } + return stack; + } + + public int getMaxItemUseDuration(ItemStack stack) { + try { + switch (stack.getItemDamage()) { + case 1: + return 16; + case 2: + case 3: + case 4: + case 5: + case 6: + return 32; + } + if (stack.getItemDamage() >= 32) + return 32; + } catch (Exception e) { + e.printStackTrace(); + } + return 0; + } + + public ItemStack onEaten(ItemStack stack, World world, EntityPlayer player) { + if (stack == null || world == null || player == null) + return stack; + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)player); + boolean server = Dartcraft.proxy.isSimulating(((Entity)player).worldObj); + if (dartTag.hasKey("lastPotion")) + return stack; + if (dartTag.hasKey("combatTime")) + return stack; + if (stack != null) { + int meta = stack.getItemDamage(); + switch (meta) { + case 1: + if (server) { + player.clearActivePotions(); + player.heal(4.0F); + world.playSoundAtEntity((Entity)player, "dartcraft:heart", 1.0F, 1.0F); + return reduceContainer(player, stack); + } + break; + } + } + return stack; + } + + private ItemStack reduceContainer(EntityPlayer player, ItemStack stack) { + try { + stack.stackSize--; + if (stack.stackSize <= 0) { + player.setCurrentItemOrArmor(0, new ItemStack(this)); + stack = new ItemStack(this); + } else { + player.inventory.addItemStackToInventory(new ItemStack(this)); + } + } catch (Exception e) { + e.printStackTrace(); + } + return stack; + } + + public boolean onLeftClickEntity(ItemStack stack, EntityPlayer player, Entity entity) { + if (!Dartcraft.proxy.isSimulating(((Entity)player).worldObj) || stack == null || stack + .getItemDamage() != 0) + return true; + World world = ((Entity)player).worldObj; + EntityLivingBase victim = null; + if (entity instanceof EntityLivingBase) + victim = (EntityLivingBase)entity; + if (victim != null && !((Entity)victim).isDead && victim.getHealth() > 0.0F) { + boolean nope = false; + //TODO Whitelist + /*boolean whitelisted = !Config.entityWhitelist; + if (!whitelisted && PluginBottles.whitelist != null) + for (String check : PluginBottles.whitelist) { + if (check != null && check.equals(victim.getClass().getCanonicalName())) { + whitelisted = true; + break; + } + } + if (!whitelisted) + nope = true;*/ + if (victim instanceof EntityPlayer || victim instanceof EntityBottle) + nope = true; + if (!nope && (victim instanceof net.minecraft.entity.monster.EntityMob || victim instanceof net.minecraft.entity.monster.EntityGhast)) { + float maxHealth = 0.0F; + try { + maxHealth = (float)victim.getAttributeMap().getAttributeInstanceByName("generic.maxHealth").getAttributeValue(); + } catch (Exception e) {} + float ratio = victim.getHealth() / maxHealth; + float limit = 0.25F; + if (ratio >= limit && maxHealth >= 5.0F) + nope = true; + NBTTagCompound dartTag = EntityUtils.getModComp((Entity)victim); + if (player.capabilities.isCreativeMode) + nope = false; + dartTag.removeTag("time"); + dartTag.removeTag("timeTime"); + dartTag.setInteger("timeImmune", 5); + } + if (nope) { + world.playSoundAtEntity((Entity) victim, "dartcraft:nope", 2.0F, + EntityUtils.randomPitch()); + return true; + } + ItemStack bottleStack = EntityUtils.bottleEntity((Entity)victim); + world.playSoundAtEntity((Entity)victim, "dartcraft:swipe", 2.0F, + EntityUtils.randomPitch()); + world.removeEntity((Entity)victim); + victim = null; + stack.stackSize--; + if (stack.stackSize <= 0) { + player.setCurrentItemOrArmor(0, bottleStack); + } else if (!EntityBottleHandler.meshBottles(player, bottleStack)) { + if (!player.inventory.addItemStackToInventory(bottleStack)) + if (Dartcraft.proxy.isSimulating(world)) + ItemUtils.dropItem(bottleStack, world, ((Entity)player).posX, ((Entity)player).posY, ((Entity)player).posZ); + } + } + return true; + } + + @SideOnly(Side.CLIENT) + public void getSubItems(Item meta, CreativeTabs tabs, List itemList) { + int[] toAdd = { 0, 1, 2, 4, 5, 6 }; + for (int i : toAdd) + itemList.add(new ItemStack(this, 1, i)); + } + +} diff --git a/src/main/java/ley/modding/dartcraft/item/Items.java b/src/main/java/ley/modding/dartcraft/item/Items.java index 384eb43..a02bb1c 100644 --- a/src/main/java/ley/modding/dartcraft/item/Items.java +++ b/src/main/java/ley/modding/dartcraft/item/Items.java @@ -12,5 +12,7 @@ public class Items { public static Item forceshears; public static Item forcepickaxe; public static Item forcemitts; + public static Item forceflask; + public static Item entitybottle; } diff --git a/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java b/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java index 7659460..db66a25 100644 --- a/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java +++ b/src/main/java/ley/modding/dartcraft/proxy/ClientProxy.java @@ -1,6 +1,18 @@ package ley.modding.dartcraft.proxy; +import cpw.mods.fml.client.registry.RenderingRegistry; +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.client.renderer.entity.RenderColdAnimal; +import ley.modding.dartcraft.client.renderer.entity.RenderEntityBottle; +import ley.modding.dartcraft.client.renderer.item.RenderItemForceFlask; +import ley.modding.dartcraft.entity.*; +import ley.modding.dartcraft.item.Items; +import net.minecraft.client.model.ModelChicken; +import net.minecraft.client.model.ModelCow; +import net.minecraft.client.model.ModelPig; +import net.minecraft.util.ResourceLocation; import net.minecraft.world.World; +import net.minecraftforge.client.MinecraftForgeClient; public class ClientProxy extends CommonProxy { @@ -8,4 +20,21 @@ public class ClientProxy extends CommonProxy { return world != null && !world.isRemote; } + public void bindTexture(String texture) { + if (texture != null) + getClientInstance().getTextureManager().bindTexture(new ResourceLocation(Dartcraft.MODID, texture)); + } + + public void init() { + super.init(); + MinecraftForgeClient.registerItemRenderer(Items.forceflask, RenderItemForceFlask.instance); + MinecraftForgeClient.registerItemRenderer(Items.entitybottle, RenderItemForceFlask.instance); + RenderEntityBottle bottleRenderer = new RenderEntityBottle(); + RenderingRegistry.registerEntityRenderingHandler(EntityBottle.class, bottleRenderer); + RenderingRegistry.registerEntityRenderingHandler(EntityFlyingFlask.class, bottleRenderer); + RenderingRegistry.registerEntityRenderingHandler(EntityColdChicken.class, new RenderColdAnimal(new ModelChicken(), 0.6f, "textures/entity/coldChicken.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityColdCow.class, new RenderColdAnimal(new ModelCow(), 0.6f, "textures/entity/coldCow.png")); + RenderingRegistry.registerEntityRenderingHandler(EntityColdPig.class, new RenderColdAnimal(new ModelPig(), 0.6f, "textures/entity/coldPig.png")); + } + } diff --git a/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java b/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java index 417fea4..a958e53 100644 --- a/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java +++ b/src/main/java/ley/modding/dartcraft/proxy/CommonProxy.java @@ -1,11 +1,17 @@ package ley.modding.dartcraft.proxy; +import cpw.mods.fml.client.FMLClientHandler; +import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.util.ChatComponentText; import net.minecraft.world.World; +import java.util.Random; + public class CommonProxy { + public static Random rand = new Random(); + public void sendChatToPlayer(EntityPlayer player, String message) { player.addChatMessage(new ChatComponentText(message)); } @@ -14,4 +20,15 @@ public class CommonProxy { return true; } + public Minecraft getClientInstance() { + return FMLClientHandler.instance().getClient(); + } + + public void bindTexture(String texture) { + } + + public void init() { + + } + } diff --git a/src/main/java/ley/modding/dartcraft/util/EntityUtils.java b/src/main/java/ley/modding/dartcraft/util/EntityUtils.java new file mode 100644 index 0000000..fd86464 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/util/EntityUtils.java @@ -0,0 +1,84 @@ +package ley.modding.dartcraft.util; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.item.Items; +import ley.modding.dartcraft.proxy.CommonProxy; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.*; +import net.minecraft.world.World; + +import java.lang.reflect.Constructor; + +public class EntityUtils { + + public static NBTTagCompound getModComp(Entity entity) { + if (entity == null || entity.getEntityData() == null) + return new NBTTagCompound(); + NBTTagCompound comp = entity.getEntityData().hasKey(Dartcraft.MODID) ? entity.getEntityData().getCompoundTag(Dartcraft.MODID) : null; + if (comp == null) { + entity.getEntityData().setTag(Dartcraft.MODID, (NBTBase)new NBTTagCompound()); + comp = entity.getEntityData().getCompoundTag(Dartcraft.MODID); + } + return comp; + } + + public static ItemStack bottleEntity(Entity victim) { + try { + String entityName = EntityList.getEntityString(victim); + if (victim == null || entityName == null) + return null; + ItemStack bottleStack = new ItemStack(Items.entitybottle); + NBTTagCompound bottleComp = new NBTTagCompound(); + victim.writeToNBT(bottleComp); + bottleComp.removeTag("OnGround"); + bottleComp.removeTag("PersistenceRequired"); + bottleComp.removeTag("Dimension"); + bottleComp.removeTag("PortalCooldown"); + bottleComp.removeTag("UUIDLeast"); + bottleComp.removeTag("UUIDMost"); + bottleComp.removeTag("DropChances"); + bottleComp.removeTag("Motion"); + bottleComp.removeTag("Pos"); + bottleComp.removeTag("Rotation"); + NBTTagDouble dummyDouble = new NBTTagDouble(0.0D); + NBTTagFloat dummyFloat = new NBTTagFloat(0.0F); + NBTTagList motion = new NBTTagList(); + motion.appendTag(dummyDouble.copy()); + motion.appendTag(dummyDouble.copy()); + motion.appendTag(dummyDouble.copy()); + NBTTagList rot = new NBTTagList(); + rot.appendTag(dummyFloat.copy()); + rot.appendTag(dummyFloat.copy()); + bottleComp.setTag("Pos", motion.copy()); + bottleComp.setTag("Motion", motion.copy()); + bottleComp.setTag("Rotation", rot.copy()); + bottleComp.setString("id", entityName); + bottleComp.setString("dartName", victim.getCommandSenderName()); + bottleStack.setTagCompound(bottleComp); + return bottleStack; + } catch (Exception e) { + e.printStackTrace(); + return null; + } + } + + public static Entity getEntity(String name) { + try { + Class entityClass = (Class) EntityList.stringToClassMapping.get(name); + if (entityClass != null) { + Constructor constructor = entityClass.getConstructor(new Class[] { World.class }); + Entity entity = constructor.newInstance(new Object[] { null }); + return entity; + } + } catch (Exception e) {} + return null; + } + + public static float randomPitch() { + return CommonProxy.rand.nextFloat() * 0.25F + 0.85F; + } + + +} diff --git a/src/main/java/ley/modding/dartcraft/util/ItemUtils.java b/src/main/java/ley/modding/dartcraft/util/ItemUtils.java new file mode 100644 index 0000000..eb0e048 --- /dev/null +++ b/src/main/java/ley/modding/dartcraft/util/ItemUtils.java @@ -0,0 +1,40 @@ +package ley.modding.dartcraft.util; + +import ley.modding.dartcraft.Dartcraft; +import ley.modding.dartcraft.proxy.CommonProxy; +import net.minecraft.entity.Entity; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class ItemUtils { + + public static void dropItem(ItemStack stack, World world, double x, double y, double z) { + if (stack != null && world != null && Dartcraft.proxy.isSimulating(world)) { + float xRand = CommonProxy.rand.nextFloat() * 0.2F + 0.1F; + float yRand = CommonProxy.rand.nextFloat() * 0.8F + 0.1F; + float zRand = CommonProxy.rand.nextFloat() * 0.2F + 0.1F; + while (stack.stackSize > 0) { + int randInt = CommonProxy.rand.nextInt(21) + 10; + if (randInt > stack.stackSize) + randInt = stack.stackSize; + stack.stackSize -= randInt; + EntityItem droppedItem = new EntityItem(world, ((float)x + xRand), ((float)y + yRand), ((float)z + zRand), new ItemStack(stack.getItem(), randInt, stack.getItemDamage())); + if (stack.hasTagCompound()) + droppedItem.getEntityItem().setTagCompound((NBTTagCompound) stack + .getTagCompound().copy()); + float modifier = 0.025F; + ((Entity)droppedItem) + .motionX = ((float)CommonProxy.rand.nextGaussian() * modifier); + ((Entity)droppedItem) + .motionY = ((float)CommonProxy.rand.nextGaussian() * modifier + 0.2F); + ((Entity)droppedItem) + .motionZ = ((float)CommonProxy.rand.nextGaussian() * modifier); + droppedItem.delayBeforeCanPickup = 10; + world.spawnEntityInWorld((Entity)droppedItem); + } + } + } + +} diff --git a/src/main/resources/assets/dartcraft/bottle.png b/src/main/resources/assets/dartcraft/bottle.png new file mode 100644 index 0000000..c218695 Binary files /dev/null and b/src/main/resources/assets/dartcraft/bottle.png differ diff --git a/src/main/resources/assets/dartcraft/lang/en_US.lang b/src/main/resources/assets/dartcraft/lang/en_US.lang index 29fb5b1..4f175a7 100644 --- a/src/main/resources/assets/dartcraft/lang/en_US.lang +++ b/src/main/resources/assets/dartcraft/lang/en_US.lang @@ -5,5 +5,11 @@ item.forcestick.name=Force Stick item.forceshard.name=Force Shard item.forcemitts.name=Force Mitts item.forceshears.name=Force Shears +item.forceflask_empty.name=Force Flask +item.forceflask_milk.name=Milk Flask +item.forceflask_potion_force.name=Liquid Force Flask +item.forceflask_potion_green.name=Green Liquid Flask +item.forceflask_potion_blue.name=Blue Liquid Flask +item.forceflask_potion_red.name=Red Liquid Flask itemGroup.dartcraft=Dartcraft diff --git a/src/main/resources/assets/dartcraft/liquid.png b/src/main/resources/assets/dartcraft/liquid.png new file mode 100644 index 0000000..3dd9689 Binary files /dev/null and b/src/main/resources/assets/dartcraft/liquid.png differ diff --git a/src/main/resources/assets/dartcraft/models/bottle.obj b/src/main/resources/assets/dartcraft/models/bottle.obj new file mode 100644 index 0000000..39e22c3 --- /dev/null +++ b/src/main/resources/assets/dartcraft/models/bottle.obj @@ -0,0 +1,1924 @@ +# Blender v2.66 (sub 1) OBJ File: '' +# www.blender.org +mtllib bottle.mtl +o mesh_mesh0 +v 1.975020 14.424900 -1.759398 +v 1.975380 14.595901 -2.974708 +v 3.832560 14.095900 -1.297968 +v 4.440100 14.159499 -2.362008 +v 1.920910 14.292500 -3.603778 +v 4.673380 13.805500 -2.919508 +v 1.560000 11.815701 -4.428398 +v 4.545790 11.287301 -3.686168 +v 3.743130 10.368600 -2.610828 +v 5.429660 9.896350 -0.956743 +v 3.341170 6.971740 -3.233459 +v 5.087480 6.482760 -1.520859 +v 3.976860 6.460231 -4.574219 +v 6.248820 5.824161 -2.345699 +v 4.584950 4.903421 -6.279429 +v 7.472730 4.095080 -3.446989 +v 4.697370 2.763201 -7.326550 +v 7.894460 1.868291 -4.190440 +v 2.132600 -12.409099 -8.726492 +v 5.025050 -13.219298 -5.889272 +v 3.825270 -14.665599 -5.512472 +v 4.731250 -15.267699 -2.146702 +v -2.034990 -14.325399 -2.015762 +v 3.824160 -15.617300 1.253737 +v 1.346960 -15.620501 3.778707 +v 5.023640 -14.331000 2.015378 +v 2.129690 -14.334901 4.965018 +v 7.892880 0.639576 4.546010 +v 4.694110 0.634980 7.805670 +v 7.471500 2.984669 4.445021 +v 4.582010 2.980859 7.389350 +v 6.247360 4.950699 3.862871 +v 3.974360 4.947859 6.179381 +v 5.086830 5.811530 3.251421 +v 3.340030 5.809309 5.031971 +v 5.428290 9.248069 3.651072 +v 3.741670 9.246038 5.370701 +v 4.543500 9.832509 6.657802 +v 1.557630 10.135798 7.515851 +v 4.671230 12.464000 6.615802 +v 1.918770 12.744099 7.406632 +v 4.438440 12.958299 6.177102 +v 1.973220 13.208698 6.885602 +v 3.831170 13.191298 5.136542 +v 1.973580 13.379599 5.670282 +v 1.321550 9.817309 -2.359198 +v -0.512151 10.003699 -1.832158 +v 0.851022 6.521960 -2.955719 +v 3.155090 9.492960 -1.903498 +v 2.749520 6.186141 -2.483579 +v 4.497190 9.117060 -0.587400 +v 4.139530 5.796850 -1.120579 +v 4.988270 8.790589 1.237161 +v 4.647730 5.458850 0.768289 +v 4.138880 5.262440 2.677191 +v 5.054510 4.522049 3.156141 +v 3.245560 4.519639 4.999551 +v 3.707230 2.798049 5.940540 +v 0.566800 3.117289 6.843131 +v 0.290479 1.077479 7.241690 +v -2.573380 3.673339 6.062780 +v -3.186060 1.692679 6.377680 +v -4.871920 4.316860 3.808151 +v -5.730280 2.405389 3.882320 +v -5.712450 4.875860 0.684209 +v -6.661050 3.024070 0.423714 +v -5.728910 3.383501 -3.070529 +v -7.190340 -10.176299 -4.712611 +v -4.835420 -10.172999 -7.113251 +v -4.566610 -11.719599 -6.512132 +v -1.813180 -11.999799 -7.303452 +v -1.814510 -12.774099 -1.797032 +v 0.939778 -12.486798 -6.619182 +v 2.954600 -13.051000 -4.642582 +v 1.597620 -11.068899 -7.237842 +v 3.951600 -11.728299 -4.929132 +v 6.313970 1.705711 -3.304170 +v 7.244680 1.086630 0.153883 +v 6.848340 3.125680 0.440760 +v 6.312600 0.727608 3.648680 +v 6.006450 2.801470 3.597501 +v 3.766840 0.724200 6.242800 +v 3.093770 9.418010 -1.823418 +v 4.398450 9.053070 -0.543998 +v 5.191790 13.715600 0.035606 +v 4.875550 8.735849 1.229311 +v 5.689190 13.384900 1.883372 +v 4.397930 8.551159 3.021122 +v 5.191300 13.192899 3.750692 +v 3.092570 8.549879 4.350892 +v 1.310340 8.730609 4.863351 +v -0.472129 9.046489 4.420301 +v 0.116040 13.708698 5.208852 +v -1.776330 9.411359 3.140882 +v -1.243120 14.089499 3.875352 +v -2.253900 9.728660 1.367572 +v -1.740580 14.419600 2.027512 +v -1.775880 9.912730 -0.423826 +v -1.242700 14.611700 0.160198 +v -0.470925 9.914630 -1.754008 +v 0.117497 14.613700 -1.225588 +v 1.311790 9.733820 -2.266468 +v 6.244280 13.654300 -0.592354 +v 6.687660 13.241000 -0.943462 +v 6.731350 10.674900 -1.542818 +v 6.046580 9.486400 1.334972 +v 5.726480 6.058030 0.853056 +v 7.079910 5.271570 0.742461 +v 8.529260 3.392440 0.478715 +v 9.064219 1.090660 0.155025 +v 6.083470 -13.922600 -1.957222 +v 4.496660 8.601088 3.080302 +v 2.748650 5.260729 4.093991 +v 0.774994 4.770579 5.709501 +v -1.695510 5.207859 5.095821 +v -3.503490 5.714159 3.322301 +v -4.165020 6.153990 0.864252 +v -4.870570 5.200070 -2.472539 +v -3.183690 3.386561 -5.665200 +v -1.618660 -10.499899 -8.037122 +v 1.349290 -13.972599 -7.940692 +v -1.819760 -11.709798 -9.708892 +v 0.329396 3.536641 -8.412289 +v 0.639393 5.602051 -7.259829 +v 0.872690 7.009441 -5.345449 +v 0.955360 7.394170 -3.826339 +v 1.439060 10.776200 -3.183468 +v -0.865206 11.010600 -2.521388 +v -1.426350 12.119101 -3.570348 +v -2.551880 11.008100 -0.802317 +v -3.612590 12.116099 -1.341918 +v -4.413320 11.807600 1.659542 +v 3.153730 8.599109 4.448681 +v 0.849302 5.453679 4.639881 +v -1.049130 5.789969 4.167821 +v -2.439210 6.178780 2.804751 +v -2.947410 6.516780 0.915878 +v -3.502440 6.409280 -1.618729 +v -2.571350 5.203491 -4.815569 +v 0.293159 3.033211 -6.664090 +v 3.769210 2.418081 -5.800089 +v 1.320030 8.785569 4.975232 +v -0.513441 9.110399 4.519601 +v -1.855600 9.485819 3.203441 +v -2.346690 9.812230 1.379362 +v -2.438560 6.713200 -0.993020 +v -1.693470 6.411750 -3.462629 +v 0.569084 4.884251 -5.718159 +v 3.709270 4.328201 -4.937809 +v 6.007800 3.684680 -2.683179 +v -0.489839 14.846200 -2.266208 +v -0.832102 14.572100 -2.813018 +v -2.294850 14.843800 -0.426671 +v -2.847230 14.569300 -0.758717 +v -2.955880 14.589100 2.050992 +v -3.585340 14.285299 2.008232 +v -2.848530 13.795098 4.746253 +v -3.613780 11.276198 4.630202 +v -1.428640 10.664399 6.773622 +v -2.552710 10.360199 3.806052 +v -0.866669 9.887980 5.460132 +v -1.432220 6.474359 5.124381 +v 0.953596 6.051929 5.717261 +v 0.869849 5.263069 7.071271 +v -2.033400 -13.373797 -8.781972 +v -5.772040 -11.308000 -8.573032 +v -4.039060 3.980391 -7.156929 +v -7.237750 3.976271 -3.897199 +v -6.196120 5.998870 -3.181639 +v -7.253890 5.591100 0.784666 +v -5.337300 7.001420 0.983423 +v -6.197280 4.888999 4.709951 +v -4.506210 6.448830 4.071581 +v -3.309570 4.080189 7.542330 +v -2.234250 5.812749 6.300101 +v 0.636049 3.381968 8.523281 +v -2.295680 14.150299 4.503242 +v -0.833705 13.231000 6.722363 +v 1.437340 9.479918 6.032712 +v 0.325672 1.078799 9.060550 +v -4.042310 1.852179 7.975290 +v -1.823060 -13.933101 6.100398 +v -5.774950 -13.233801 5.118478 +v -5.419280 -14.678201 3.909658 +v -7.895250 -13.985100 1.480958 +v -8.801180 -13.382600 -1.884262 +v -7.894080 -13.032899 -5.285192 +v -9.725810 -11.720300 -1.650782 +v -8.665979 -11.311999 -5.623382 +v -8.409160 3.524710 0.493714 +v 3.691880 -13.541300 -1.904082 +v 4.812960 -12.300600 -1.729202 +v 3.950650 -12.633200 1.503868 +v 1.595260 -12.636400 3.904028 +v -1.621020 -12.309601 4.828378 +v -1.855090 10.001699 -0.463776 +v -1.047830 6.714900 -2.410309 +v 0.777024 6.160330 -4.172639 +v 3.247520 5.722980 -3.558479 +v 5.055500 5.216691 -1.784969 +v 5.717040 4.776920 0.672602 +v 6.904480 13.215500 1.859892 +v 7.425020 12.751300 1.794622 +v 7.530880 10.143499 1.427842 +v 6.730160 9.834989 4.429301 +v -1.430590 7.636721 -3.141049 +v -3.177390 7.634500 -1.360499 +v -3.169620 10.770200 1.513852 +v -3.817590 7.387590 1.037801 +v -3.178520 6.963339 3.411791 +v -2.036100 -15.277001 4.750458 +v 2.953680 -13.825800 0.863768 +v 0.937587 -13.828600 2.918068 +v -1.815360 -13.548501 3.709388 +v -2.231750 7.325121 -4.453488 +v -4.504820 7.321810 -2.137059 +v -4.568320 -13.061501 3.025118 +v -6.583620 -12.497200 1.048518 +v -7.320900 -12.006900 -1.690472 +v -7.191270 -11.081100 1.719898 +v -8.052580 -10.508400 -1.479472 +v -7.239340 2.747559 4.839251 +v -8.667880 -12.423599 2.281268 +v -3.306620 6.002751 -6.126459 +v -0.491502 13.645000 6.272892 +v -4.837230 -11.740101 4.028678 +v 6.686840 12.466799 4.561502 +v 6.243450 12.960699 4.337562 +v -5.416890 -13.029799 -7.809682 +v -6.582220 -11.722399 -4.457832 +v 6.142580 -0.000002 6.392560 +v 0.152588 -0.000000 0.632552 +v -3.441410 -0.000002 6.392560 +v -3.441410 -0.000002 6.392560 +v 0.152588 -0.000000 0.632552 +v -3.441410 -0.000000 0.632552 +v 0.152588 0.000000 -0.632552 +v 6.142580 -0.000001 -0.632552 +v 6.142580 0.000000 -6.392560 +v -3.441410 0.000002 -6.392560 +v 0.152588 0.000000 -0.632552 +v 6.142580 0.000000 -6.392560 +v -3.441410 0.000000 -0.632552 +v 0.152588 0.000000 -0.632552 +v -3.441410 0.000002 -6.392560 +v 6.142580 -0.000002 6.392560 +v 6.142580 -0.000000 0.632552 +v 0.152588 -0.000000 0.632552 +v 0.000000 0.000000 -2.437500 +v 0.000000 -2.437500 -2.437500 +v 0.000000 -2.437500 -0.000000 +v 0.000000 0.000000 0.000000 +v 0.000000 -0.000000 2.437500 +v 0.000000 2.437500 2.437500 +v 0.000000 2.437500 0.000000 +v 0.000000 -2.437500 2.437500 +v 0.000000 2.437500 -2.437500 +v 5.023640 -14.331000 2.015378 +v 2.129690 -14.334901 4.965018 +v 1.346960 -15.620501 3.778707 +v -2.036100 -15.277001 4.750458 +v -1.823060 -13.933101 6.100398 +v -5.419280 -14.678201 3.909658 +v -5.774950 -13.233801 5.118478 +v -7.895250 -13.985100 1.480958 +v -8.667880 -12.423599 2.281268 +v -9.725810 -11.720300 -1.650782 +v -8.409160 3.524710 0.493714 +v -8.665979 -11.311999 -5.623382 +v -7.237750 3.976271 -3.897199 +v -5.772040 -11.308000 -8.573032 +v -4.039060 3.980391 -7.156929 +v -1.819760 -11.709798 -9.708892 +v 0.329396 3.536641 -8.412289 +v 4.697370 2.763201 -7.326550 +v 4.584950 4.903421 -6.279429 +v 7.472730 4.095080 -3.446989 +v 6.248820 5.824161 -2.345699 +v 7.079910 5.271570 0.742461 +v 5.726480 6.058030 0.853056 +v 6.247360 4.950699 3.862871 +v 5.086830 5.811530 3.251421 +v 3.974360 4.947859 6.179381 +v 3.340030 5.809309 5.031971 +v 0.869849 5.263069 7.071271 +v 0.953596 6.051929 5.717261 +v -1.432220 6.474359 5.124381 +v -0.866669 9.887980 5.460132 +v -2.552710 10.360199 3.806052 +v 1.439060 10.776200 -3.183468 +v 3.743130 10.368600 -2.610828 +v 0.955360 7.394170 -3.826339 +v -0.865206 11.010600 -2.521388 +v -1.430590 7.636721 -3.141049 +v -2.551880 11.008100 -0.802317 +v -3.177390 7.634500 -1.360499 +v -3.169620 10.770200 1.513852 +v -3.817590 7.387590 1.037801 +v -3.178520 6.963339 3.411791 +v -4.506210 6.448830 4.071581 +v -2.234250 5.812749 6.300101 +v -3.309570 4.080189 7.542330 +v 0.636049 3.381968 8.523281 +v 0.325672 1.078799 9.060550 +v 4.582010 2.980859 7.389350 +v 4.694110 0.634980 7.805670 +v 7.471500 2.984669 4.445021 +v 7.892880 0.639576 4.546010 +v 8.529260 3.392440 0.478715 +v 9.064219 1.090660 0.155025 +v 7.894460 1.868291 -4.190440 +v 5.025050 -13.219298 -5.889272 +v 2.132600 -12.409099 -8.726492 +v 3.825270 -14.665599 -5.512472 +v 1.349290 -13.972599 -7.940692 +v 4.731250 -15.267699 -2.146702 +v 6.083470 -13.922600 -1.957222 +v -4.042310 1.852179 7.975290 +v -6.197280 4.888999 4.709951 +v -5.337300 7.001420 0.983423 +v -4.504820 7.321810 -2.137059 +v -2.231750 7.325121 -4.453488 +v 0.872690 7.009441 -5.345449 +v 3.341170 6.971740 -3.233459 +v 5.429660 9.896350 -0.956743 +v 1.437340 9.479918 6.032712 +v 3.741670 9.246038 5.370701 +v 5.428290 9.248069 3.651072 +v 6.046580 9.486400 1.334972 +v 5.087480 6.482760 -1.520859 +v 3.976860 6.460231 -4.574219 +v 0.639393 5.602051 -7.259829 +v -3.306620 6.002751 -6.126459 +v -6.196120 5.998870 -3.181639 +v -7.253890 5.591100 0.784666 +v -7.239340 2.747559 4.839251 +v -2.033400 -13.373797 -8.781972 +v 1.560000 11.815701 -4.428398 +v 4.545790 11.287301 -3.686168 +v 4.673380 13.805500 -2.919508 +v 6.687660 13.241000 -0.943462 +v 6.244280 13.654300 -0.592354 +v 6.904480 13.215500 1.859892 +v 5.689190 13.384900 1.883372 +v 6.243450 12.960699 4.337562 +v 5.191300 13.192899 3.750692 +v 4.438440 12.958299 6.177102 +v 3.831170 13.191298 5.136542 +v 1.973220 13.208698 6.885602 +v 1.973580 13.379599 5.670282 +v 6.731350 10.674900 -1.542818 +v 7.425020 12.751300 1.794622 +v 6.686840 12.466799 4.561502 +v 4.671230 12.464000 6.615802 +v 1.918770 12.744099 7.406632 +v -1.242700 14.611700 0.160198 +v 0.117497 14.613700 -1.225588 +v -0.489839 14.846200 -2.266208 +v -2.294850 14.843800 -0.426671 +v -0.832102 14.572100 -2.813018 +v -2.847230 14.569300 -0.758717 +v -1.426350 12.119101 -3.570348 +v -3.612590 12.116099 -1.341918 +v -4.413320 11.807600 1.659542 +v 7.530880 10.143499 1.427842 +v 6.730160 9.834989 4.429301 +v 4.543500 9.832509 6.657802 +v 1.557630 10.135798 7.515851 +v 1.975020 14.424900 -1.759398 +v 1.975380 14.595901 -2.974708 +v 1.920910 14.292500 -3.603778 +v -1.740580 14.419600 2.027512 +v -2.955880 14.589100 2.050992 +v -3.585340 14.285299 2.008232 +v 0.116040 13.708698 5.208852 +v -0.491502 13.645000 6.272892 +v -1.243120 14.089499 3.875352 +v -2.295680 14.150299 4.503242 +v -0.833705 13.231000 6.722363 +v -2.848530 13.795098 4.746253 +v 4.440100 14.159499 -2.362008 +v 3.832560 14.095900 -1.297968 +v -1.428640 10.664399 6.773622 +v -3.613780 11.276198 4.630202 +v 5.191790 13.715600 0.035606 +v -5.416890 -13.029799 -7.809682 +v -2.034990 -14.325399 -2.015762 +v -7.894080 -13.032899 -5.285192 +v -8.801180 -13.382600 -1.884262 +v 3.824160 -15.617300 1.253737 +v 2.372230 17.230099 -1.429927 +v 4.261500 16.895700 -0.960316 +v 1.309240 9.714520 -2.256978 +v 3.085640 9.400090 -1.815418 +v 5.644350 16.508499 0.395974 +v 4.385860 9.036019 -0.540164 +v 6.150230 16.172199 2.275523 +v 4.861520 8.719840 1.227091 +v 1.307840 8.715059 4.848981 +v 2.370730 16.167097 6.127563 +v 0.481462 16.501499 5.657943 +v -0.468558 9.029479 4.407432 +v -0.901380 16.888700 4.301653 +v -1.768780 9.393559 3.132171 +v -1.407260 17.225000 2.422103 +v -2.244440 9.709730 1.364912 +v -0.900631 17.420200 0.522915 +v -1.768080 9.893280 -0.420806 +v 0.482758 17.422100 -0.887028 +v -0.467339 9.895040 -1.746508 +v 5.643600 15.977000 4.174712 +v 4.385160 8.536289 3.012821 +v 4.260210 15.975099 5.584652 +v 3.084420 8.534539 4.338521 +v 2.371480 16.698599 2.348813 +v 1.308540 9.214789 1.296002 +vt 0.893730 0.446382 +vt 0.893669 0.414999 +vt 0.915785 0.446720 +vt 0.937840 0.447059 +vt 0.937901 0.478441 +vt 0.915723 0.415338 +vt 0.893791 0.477764 +vt 0.915846 0.478103 +vt 0.937778 0.415676 +vt 0.911444 0.652997 +vt 0.922614 0.641819 +vt 0.923952 0.674643 +vt 0.939208 0.670543 +vt 0.927792 0.636451 +vt 0.946323 0.668529 +vt 0.964658 0.336681 +vt 0.964360 0.304588 +vt 0.997813 0.300300 +vt 0.998138 0.335113 +vt 0.920420 0.192861 +vt 0.900307 0.227637 +vt 0.902862 0.188435 +vt 0.902890 0.157420 +vt 0.543787 0.944138 +vt 0.543790 0.913117 +vt 0.588537 0.912569 +vt 0.588533 0.944688 +vt 0.641640 0.632126 +vt 0.641631 0.600011 +vt 0.659513 0.595050 +vt 0.659520 0.636835 +vt 0.261881 0.537576 +vt 0.220090 0.537569 +vt 0.214428 0.515628 +vt 0.267544 0.515638 +vt 0.211589 0.486774 +vt 0.270397 0.486786 +vt 0.214415 0.288307 +vt 0.267620 0.288311 +vt 0.263789 0.268804 +vt 0.303235 0.269184 +vt 0.270347 0.758774 +vt 0.293068 0.798250 +vt 0.208130 0.820885 +vt 0.230959 0.735946 +vt 0.185447 0.735873 +vt 0.374913 0.288334 +vt 0.378732 0.268823 +vt 0.424280 0.268793 +vt 0.428123 0.288297 +vt 0.372253 0.486810 +vt 0.431062 0.486764 +vt 0.375117 0.515655 +vt 0.428238 0.515618 +vt 0.380798 0.537592 +vt 0.422588 0.537565 +vt 0.597782 0.676028 +vt 0.602457 0.693945 +vt 0.560676 0.693967 +vt 0.565670 0.676048 +vt 0.920735 0.213773 +vt 0.965478 0.213190 +vt 0.965498 0.245309 +vt 0.920752 0.244790 +vt 0.825464 0.097618 +vt 0.860588 0.114995 +vt 0.829596 0.114942 +vt 0.790664 0.117657 +vt 0.087511 0.899772 +vt 0.120986 0.901318 +vt 0.120681 0.936129 +vt 0.087223 0.931860 +vt 0.860728 0.749094 +vt 0.858684 0.756241 +vt 0.826599 0.737734 +vt 0.831989 0.732521 +vt 0.864814 0.733831 +vt 0.843160 0.721343 +vt 0.723960 0.907491 +vt 0.723746 0.928869 +vt 0.680433 0.906268 +vt 0.311148 0.938308 +vt 0.310950 0.916931 +vt 0.354478 0.915739 +vt 0.354682 0.937876 +vt 0.311147 0.962992 +vt 0.354680 0.963440 +vt 0.310941 0.984375 +vt 0.354468 0.985575 +vt 0.830184 0.928404 +vt 0.786430 0.907496 +vt 0.829957 0.906268 +vt 0.784777 0.361010 +vt 0.797575 0.383139 +vt 0.770530 0.364713 +vt 0.770514 0.331464 +vt 0.723245 0.247368 +vt 0.689988 0.247392 +vt 0.727737 0.227852 +vt 0.764351 0.228177 +vt 0.770513 0.202530 +vt 0.722983 0.737337 +vt 0.686372 0.736898 +vt 0.680198 0.711480 +vt 0.720730 0.711961 +vt 0.765262 0.737349 +vt 0.767528 0.711980 +vt 0.801871 0.736940 +vt 0.808060 0.711524 +vt 0.361851 0.732232 +vt 0.327652 0.758450 +vt 0.321326 0.732841 +vt 0.362612 0.555600 +vt 0.405914 0.555359 +vt 0.402695 0.537592 +vt 0.434797 0.537712 +vt 0.430612 0.897260 +vt 0.398520 0.915739 +vt 0.380064 0.846560 +vt 0.449158 0.865197 +vt 0.449186 0.828139 +vt 0.684958 0.286584 +vt 0.688079 0.268793 +vt 0.725143 0.268799 +vt 0.728256 0.286586 +vt 0.729986 0.463208 +vt 0.770514 0.463593 +vt 0.764327 0.489236 +vt 0.648856 0.228256 +vt 0.642652 0.202616 +vt 0.683183 0.202205 +vt 0.685467 0.227886 +vt 0.729985 0.202172 +vt 0.481990 0.906890 +vt 0.543527 0.884753 +vt 0.543266 0.906408 +vt 0.481987 0.930885 +vt 0.543262 0.931412 +vt 0.482220 0.951665 +vt 0.543504 0.953068 +vt 0.832316 0.432253 +vt 0.832135 0.411475 +vt 0.893475 0.410126 +vt 0.893669 0.431781 +vt 0.832308 0.456248 +vt 0.893657 0.456785 +vt 0.832095 0.477029 +vt 0.893434 0.478441 +vt 0.921100 0.074867 +vt 0.921300 0.095650 +vt 0.859960 0.097021 +vt 0.859753 0.075365 +vt 0.921108 0.050877 +vt 0.859754 0.050361 +vt 0.921308 0.030092 +vt 0.859969 0.028705 +vt 0.831884 0.456241 +vt 0.832095 0.477019 +vt 0.770756 0.478441 +vt 0.770534 0.456786 +vt 0.831865 0.432246 +vt 0.770514 0.431782 +vt 0.832045 0.411461 +vt 0.770705 0.410126 +vt 0.482242 0.886112 +vt 0.923954 0.699644 +vt 0.939214 0.703725 +vt 0.946327 0.705579 +vt 0.964658 0.373735 +vt 0.998138 0.375311 +vt 0.920457 0.152669 +vt 0.887420 0.130541 +vt 0.543527 0.970996 +vt 0.588265 0.972509 +vt 0.625588 0.659953 +vt 0.638637 0.673033 +vt 0.680198 0.642149 +vt 0.653652 0.688166 +vt 0.313552 0.516077 +vt 0.321326 0.487274 +vt 0.313702 0.288757 +vt 0.328838 0.288805 +vt 0.339294 0.269226 +vt 0.786649 0.928872 +vt 0.830200 0.953964 +vt 0.784765 0.335456 +vt 0.787123 0.302664 +vt 0.752048 0.247621 +vt 0.815911 0.286027 +vt 0.775096 0.289944 +vt 0.811691 0.268801 +vt 0.760743 0.756241 +vt 0.727485 0.756230 +vt 0.877977 0.302644 +vt 0.849164 0.286022 +vt 0.853966 0.268793 +vt 0.890582 0.289920 +vt 0.911739 0.326518 +vt 0.364261 0.757894 +vt 0.408652 0.731965 +vt 0.443413 0.555506 +vt 0.647461 0.286932 +vt 0.655983 0.269091 +vt 0.218250 0.268794 +vt 0.168334 0.288735 +vt 0.160661 0.487255 +vt 0.168428 0.516062 +vt 0.653620 0.543059 +vt 0.680187 0.589039 +vt 0.638610 0.558877 +vt 0.625567 0.572208 +vt 0.588274 0.884753 +vt 0.543541 0.886255 +vt 0.887340 0.215270 +vt 0.860485 0.230736 +vt 0.865502 0.247680 +vt 0.829498 0.230687 +vt 0.825335 0.247616 +vt 0.790567 0.227466 +vt 0.786669 0.953560 +vt 0.830005 0.976108 +vt 0.797533 0.313314 +vt 0.819660 0.300534 +vt 0.845221 0.300525 +vt 0.867361 0.313300 +vt 0.894616 0.331434 +vt 0.406531 0.757662 +vt 0.368875 0.777382 +vt 0.449186 0.732123 +vt 0.683180 0.463200 +vt 0.642652 0.463578 +vt 0.786479 0.974935 +vt 0.786427 0.953540 +vt 0.786168 0.974916 +vt 0.742689 0.976103 +vt 0.742956 0.953967 +vt 0.786430 0.928856 +vt 0.742960 0.928403 +vt 0.786191 0.907477 +vt 0.742712 0.906268 +vt 0.680198 0.953971 +vt 0.723921 0.974934 +vt 0.680395 0.976108 +vt 0.880158 0.335429 +vt 0.894637 0.364688 +vt 0.402136 0.777196 +vt 0.443146 0.757803 +vt 0.685438 0.488879 +vt 0.648827 0.489225 +vt 0.727718 0.488886 +vt 0.893876 0.625246 +vt 0.895703 0.617939 +vt 0.860697 0.625263 +vt 0.858656 0.617964 +vt 0.831970 0.641867 +vt 0.826576 0.636507 +vt 0.808060 0.668602 +vt 0.965925 0.220189 +vt 0.998829 0.189679 +vt 0.999185 0.221767 +vt 0.965913 0.260383 +vt 0.787196 0.188253 +vt 0.770513 0.192626 +vt 0.770546 0.152437 +vt 0.787219 0.157242 +vt 0.607254 0.944694 +vt 0.651929 0.913143 +vt 0.651918 0.944159 +vt 0.606921 0.972509 +vt 0.524488 0.673093 +vt 0.521791 0.632195 +vt 0.537856 0.659999 +vt 0.293026 0.843782 +vt 0.270243 0.883184 +vt 0.178806 0.269164 +vt 0.267707 0.019535 +vt 0.303329 0.000416 +vt 0.313785 0.019994 +vt 0.270397 0.218006 +vt 0.211589 0.217976 +vt 0.214415 0.246826 +vt 0.168415 0.247238 +vt 0.508529 0.543138 +vt 0.554513 0.516553 +vt 0.524461 0.558937 +vt 0.481987 0.589151 +vt 0.503578 0.595135 +vt 0.481998 0.642261 +vt 0.503586 0.636921 +vt 0.508560 0.688245 +vt 0.889790 0.640509 +vt 0.864792 0.640518 +vt 0.843144 0.653036 +vt 0.815389 0.670614 +vt 0.808069 0.705656 +vt 0.999173 0.258826 +vt 0.965498 0.295200 +vt 0.802741 0.130408 +vt 0.651595 0.971021 +vt 0.965252 0.273127 +vt 0.920519 0.271653 +vt 0.053761 0.516760 +vt 0.007757 0.516215 +vt 0.000000 0.487689 +vt 0.050924 0.488299 +vt 0.007716 0.288913 +vt 0.053788 0.289459 +vt 0.057630 0.269430 +vt 0.103174 0.269442 +vt 0.123192 0.843520 +vt 0.123229 0.797983 +vt 0.145908 0.882991 +vt 0.185301 0.905824 +vt 0.168421 0.019918 +vt 0.178896 0.000352 +vt 0.218340 0.000000 +vt 0.214497 0.019505 +vt 0.160661 0.218429 +vt 0.430701 0.796018 +vt 0.757240 0.269104 +vt 0.765758 0.286950 +vt 0.647314 0.025970 +vt 0.684810 0.025584 +vt 0.728112 0.025553 +vt 0.765610 0.025883 +vt 0.685035 0.534669 +vt 0.723730 0.953558 +vt 0.680210 0.928403 +vt 0.880171 0.360992 +vt 0.878027 0.393488 +vt 0.430940 0.777303 +vt 0.689948 0.508387 +vt 0.661143 0.508658 +vt 0.723205 0.508392 +vt 0.752008 0.508668 +vt 0.867402 0.383125 +vt 0.845275 0.395905 +vt 0.849235 0.410120 +vt 0.819714 0.395913 +vt 0.815981 0.410126 +vt 0.787173 0.393508 +vt 0.911460 0.721304 +vt 0.922634 0.732472 +vt 0.927815 0.737678 +vt 0.964347 0.405827 +vt 0.997802 0.410126 +vt 0.900403 0.117828 +vt 0.865635 0.097679 +vt 0.661183 0.247680 +vt 0.921602 0.009269 +vt 0.966334 0.010799 +vt 0.966067 0.037662 +vt 0.921323 0.037082 +vt 0.966048 0.068673 +vt 0.921308 0.069200 +vt 0.966291 0.095536 +vt 0.921551 0.097021 +vt 0.606946 0.884753 +vt 0.651626 0.886280 +vt 0.607265 0.912575 +vt 0.537834 0.572253 +vt 0.521782 0.600081 +vt 0.953508 0.854778 +vt 0.986959 0.859090 +vt 0.986634 0.891182 +vt 0.953158 0.889592 +vt 0.986614 0.928237 +vt 0.953136 0.929791 +vt 0.986906 0.960329 +vt 0.953448 0.964603 +vt 0.965533 0.185375 +vt 0.554559 0.714774 +vt 0.481987 0.487212 +vt 0.474242 0.516026 +vt 0.474202 0.288704 +vt 0.463718 0.269137 +vt 0.146021 0.758581 +vt 0.655819 0.008119 +vt 0.687920 0.007792 +vt 0.398641 0.777435 +vt 0.361607 0.777382 +vt 0.329519 0.795856 +vt 0.724983 0.007764 +vt 0.757081 0.008052 +vt 0.597756 0.556163 +vt 0.602422 0.538004 +vt 0.565645 0.556183 +vt 0.560641 0.538025 +vt 0.310974 0.827919 +vt 0.310941 0.864982 +vt 0.329431 0.897107 +vt 0.765834 0.535130 +vt 0.762724 0.516916 +vt 0.794825 0.516559 +vt 0.803332 0.534713 +vt 0.325118 0.556170 +vt 0.106877 0.516780 +vt 0.109732 0.488320 +vt 0.106998 0.289479 +vt 0.153076 0.288960 +vt 0.142615 0.269005 +vt 0.607626 0.516525 +vt 0.267540 0.246855 +vt 0.261861 0.268794 +vt 0.220070 0.268768 +vt 0.830651 0.699697 +vt 0.815396 0.703796 +vt 0.998795 0.290917 +vt 0.722536 0.535118 +vt 0.087484 0.862712 +vt 0.120964 0.861115 +vt 0.087156 0.830621 +vt 0.120609 0.826303 +vt 0.893906 0.749077 +vt 0.895735 0.756221 +vt 0.889812 0.733821 +vt 0.693559 0.516525 +vt 0.725656 0.516904 +vt 0.263883 0.000022 +vt 0.230808 0.905892 +vt 0.152880 0.516261 +vt 0.160661 0.487744 +vt 0.830650 0.674696 +vt 0.361490 0.915681 +vt 0.333537 0.538281 +vt 0.365636 0.537798 +vt 0.321326 0.218519 +vt 0.313538 0.247322 +vt 0.607668 0.714750 +vt 0.329118 0.516125 +vt 0.321326 0.487326 +vt 0.802670 0.215137 +vt 0.018187 0.268961 +vt 0.920457 0.186907 +vt 0.965194 0.185375 +vt 0.066676 0.716478 +vt 0.087156 0.819755 +vt 0.000000 0.819601 +vt 0.156959 0.993048 +vt 0.156846 0.905892 +vt 0.195593 0.930777 +vt 0.964306 0.410126 +vt 0.911740 0.354203 +vt 0.964347 0.303185 +vt 0.085940 0.716294 +vt 0.000000 0.716478 +vt 0.021546 0.611731 +vt 0.195593 0.929920 +vt 0.234878 0.905892 +vt 0.234799 0.991832 +vt 0.899752 0.854778 +vt 0.953136 0.904982 +vt 0.899690 0.960065 +vt 0.107043 0.020404 +vt 0.053834 0.020375 +vt 0.057674 0.000400 +vt 0.018237 0.000000 +vt 0.007756 0.019913 +vt 0.585123 0.000383 +vt 0.624567 0.000014 +vt 0.635028 0.019934 +vt 0.588956 0.020364 +vt 0.539580 0.000375 +vt 0.535746 0.020360 +vt 0.489669 0.019914 +vt 0.481991 0.218681 +vt 0.588787 0.289172 +vt 0.634862 0.288702 +vt 0.642652 0.487464 +vt 0.591725 0.487987 +vt 0.535577 0.289210 +vt 0.532917 0.488026 +vt 0.489498 0.288801 +vt 0.481987 0.487578 +vt 0.431063 0.217892 +vt 0.474410 0.020019 +vt 0.481991 0.218501 +vt 0.428211 0.246780 +vt 0.375095 0.246766 +vt 0.380748 0.268781 +vt 0.280207 0.579363 +vt 0.321326 0.610326 +vt 0.301055 0.615582 +vt 0.267299 0.592417 +vt 0.244061 0.558416 +vt 0.239519 0.576314 +vt 0.202304 0.558352 +vt 0.207426 0.576262 +vt 0.166122 0.579189 +vt 0.179616 0.592283 +vt 0.163543 0.620070 +vt 0.991001 0.728426 +vt 0.991264 0.756241 +vt 0.946327 0.727870 +vt 0.946330 0.696854 +vt 0.965536 0.099141 +vt 0.965219 0.126003 +vt 0.920801 0.097618 +vt 0.946273 0.558587 +vt 0.946513 0.531724 +vt 0.991195 0.530187 +vt 0.990949 0.558001 +vt 0.946297 0.589599 +vt 0.990969 0.590119 +vt 0.946569 0.616461 +vt 0.991259 0.617939 +vt 0.991005 0.696307 +vt 0.946590 0.669991 +vt 0.991279 0.668485 +vt 0.163513 0.652184 +vt 0.179538 0.680026 +vt 0.145173 0.657124 +vt 0.145208 0.615339 +vt 0.123237 0.610015 +vt 0.149814 0.564059 +vt 0.634882 0.247252 +vt 0.588877 0.247680 +vt 0.642652 0.218700 +vt 0.053753 0.247690 +vt 0.007750 0.247231 +vt 0.000000 0.218674 +vt 0.050924 0.219187 +vt 0.106874 0.247720 +vt 0.109733 0.219223 +vt 0.152874 0.247308 +vt 0.160661 0.218764 +vt 0.372255 0.217877 +vt 0.329087 0.247279 +vt 0.321326 0.218446 +vt 0.375125 0.019453 +vt 0.428330 0.019474 +vt 0.378964 0.000000 +vt 0.424503 0.000012 +vt 0.339519 0.000444 +vt 0.329042 0.019973 +vt 0.153120 0.019992 +vt 0.591728 0.219181 +vt 0.535761 0.247676 +vt 0.123192 0.663124 +vt 0.166021 0.693342 +vt 0.202167 0.714289 +vt 0.207322 0.696124 +vt 0.243925 0.714353 +vt 0.239416 0.696176 +vt 0.280106 0.693516 +vt 0.267221 0.680160 +vt 0.283294 0.652373 +vt 0.920468 0.125434 +vt 0.965208 0.157024 +vt 0.946582 0.754733 +vt 0.991229 0.501844 +vt 0.990956 0.528707 +vt 0.946273 0.530187 +vt 0.946552 0.502370 +vt 0.991242 0.470828 +vt 0.946567 0.470251 +vt 0.991005 0.443961 +vt 0.946317 0.442435 +vt 0.920457 0.157553 +vt 0.965510 0.183882 +vt 0.920769 0.185375 +vt 0.283324 0.620259 +vt 0.301020 0.657366 +vt 0.422538 0.268793 +vt 0.294699 0.709386 +vt 0.321280 0.663434 +vt 0.474211 0.247332 +vt 0.535778 0.516525 +vt 0.489779 0.516124 +vt 0.588903 0.516488 +vt 0.634902 0.516018 +vt 0.532920 0.219175 +vt 0.489758 0.247231 +vt 0.195805 0.537576 +vt 0.101197 0.268961 +vt 0.059406 0.268941 +vt 0.248884 0.537654 +vt 0.294824 0.564284 +vt 0.463947 0.000481 +vt 0.248713 0.735873 +vt 0.195629 0.735791 +vt 0.149689 0.709161 +vt 0.812824 0.815545 +vt 0.797311 0.788694 +vt 0.810087 0.776320 +vt 0.830189 0.811117 +vt 0.087175 0.751290 +vt 0.087588 0.716478 +vt 0.120673 0.752874 +vt 0.120655 0.789928 +vt 0.946273 0.530353 +vt 0.946245 0.567402 +vt 0.939257 0.532190 +vt 0.922704 0.503428 +vt 0.911529 0.514584 +vt 0.894003 0.486795 +vt 0.889902 0.502046 +vt 0.860843 0.486744 +vt 0.864917 0.502011 +vt 0.832110 0.503288 +vt 0.843268 0.514477 +vt 0.812832 0.846561 +vt 0.830200 0.851311 +vt 0.087156 0.791489 +vt 0.121018 0.822021 +vt 0.927793 0.498236 +vt 0.895742 0.479662 +vt 0.858712 0.479604 +vt 0.826634 0.498078 +vt 0.864835 0.595321 +vt 0.889819 0.595356 +vt 0.893893 0.610622 +vt 0.860733 0.610572 +vt 0.895621 0.617939 +vt 0.858595 0.617877 +vt 0.966360 0.082734 +vt 0.966334 0.045679 +vt 0.999617 0.044084 +vt 0.999645 0.084282 +vt 0.735086 0.756266 +vt 0.775276 0.756241 +vt 0.739446 0.773219 +vt 0.700286 0.776381 +vt 0.712593 0.788742 +vt 0.697093 0.815611 +vt 0.797336 0.873426 +vt 0.810112 0.886132 +vt 0.087547 0.826303 +vt 0.123559 0.940705 +vt 0.123247 0.905892 +vt 0.156560 0.910205 +vt 0.156846 0.942297 +vt 0.123542 0.980908 +vt 0.156824 0.979356 +vt 0.123192 1.015718 +vt 0.156507 1.011444 +vt 0.911469 0.582889 +vt 0.922626 0.594079 +vt 0.927704 0.599460 +vt 0.966615 0.013586 +vt 0.999923 0.009269 +vt 0.770451 0.773201 +vt 0.843207 0.582782 +vt 0.832032 0.593939 +vt 0.826545 0.599302 +vt 0.966682 0.114825 +vt 1.000000 0.119094 +vt 0.700311 0.886194 +vt 0.712609 0.873474 +vt 0.739470 0.888967 +vt 0.735118 0.906268 +vt 0.770479 0.888944 +vt 0.775312 0.906247 +vt 0.830752 0.536110 +vt 0.815508 0.531995 +vt 0.830734 0.561110 +vt 0.815480 0.565176 +vt 0.808093 0.530137 +vt 0.808060 0.567190 +vt 0.121052 0.720782 +vt 0.939229 0.565371 +vt 0.923984 0.561257 +vt 0.697096 0.846623 +vt 0.680205 0.851392 +vt 0.292725 0.980901 +vt 0.293052 1.015718 +vt 0.259442 0.979328 +vt 0.259448 0.942269 +vt 0.680198 0.811202 +vt 0.292732 0.940707 +vt 0.259752 0.910181 +vt 0.924002 0.536256 +vt 0.589705 0.714774 +vt 0.629147 0.737522 +vt 0.566958 0.799761 +vt 0.544171 0.714797 +vt 0.504741 0.737591 +vt 0.142661 0.000070 +vt 0.103222 0.000423 +vt 0.293068 0.905892 +vt 0.651917 0.776949 +vt 0.651929 0.822482 +vt 0.629170 0.861936 +vt 0.589745 0.884726 +vt 0.544207 0.884753 +vt 0.504774 0.862005 +vt 0.481995 0.822578 +vt 0.481987 0.777041 +vt 0.499951 0.268876 +vt 0.539397 0.269226 +vt 0.584941 0.269197 +vt 0.624384 0.268793 +vt 0.259739 1.011420 +vt 0.500138 0.000000 +vt 0.969180 0.854709 +vt 0.947153 0.854447 +vt 0.967137 0.756496 +vt 0.946426 0.756249 +vt 0.921718 0.854439 +vt 0.922510 0.756241 +vt 0.899690 0.854686 +vt 0.901799 0.756474 +vt 0.897627 0.854786 +vt 0.899690 0.953081 +vt 0.877663 0.953287 +vt 0.876916 0.854980 +vt 0.852228 0.953284 +vt 0.853000 0.854977 +vt 0.830200 0.953072 +vt 0.832289 0.854778 +vt 0.897546 0.756241 +vt 0.899690 0.854535 +vt 0.877663 0.854759 +vt 0.876835 0.756453 +vt 0.852228 0.854778 +vt 0.852920 0.756469 +vt 0.830200 0.854583 +vt 0.832208 0.756287 +vt 0.085133 0.819790 +vt 0.087156 0.918086 +vt 0.065128 0.918284 +vt 0.064422 0.819976 +vt 0.039693 0.918269 +vt 0.040506 0.819963 +vt 0.017665 0.918048 +vt 0.019795 0.819755 +vt 0.000022 0.551466 +vt 0.012749 0.529461 +vt 0.047437 0.564255 +vt 0.000000 0.576897 +vt 0.012688 0.598941 +vt 0.034687 0.611691 +vt 0.060102 0.611731 +vt 0.082124 0.599049 +vt 0.094851 0.577045 +vt 0.094873 0.551614 +vt 0.082185 0.529570 +vt 0.060186 0.516820 +vt 0.034771 0.516780 +vt 0.815133 0.052392 +vt 0.782479 0.085076 +vt 0.770519 0.064374 +vt 0.770513 0.040461 +vt 0.782464 0.019745 +vt 0.803168 0.007778 +vt 0.827078 0.007764 +vt 0.847787 0.019709 +vt 0.859747 0.040411 +vt 0.859753 0.064324 +vt 0.847802 0.085040 +vt 0.827098 0.097007 +vt 0.803188 0.097021 +usemtl BottleUra_BottleUra.png +s off +f 249/1 250/2 252/3 +f 253/4 254/5 252/3 +f 252/3 251/6 253/4 +f 257/7 249/1 255/8 +f 250/2 251/6 252/3 +f 254/5 255/8 252/3 +f 251/6 256/9 253/4 +f 249/1 252/3 255/8 +s 1 +f 1/10 2/11 3/12 +f 4/13 3/12 2/11 +f 4/13 2/11 5/14 +f 6/15 4/13 5/14 +f 6/16 5/17 7/18 +f 8/19 6/16 7/18 +f 8/20 7/21 9/22 +f 10/23 8/20 9/22 +f 10/24 9/25 11/26 +f 12/27 10/24 11/26 +f 12/28 11/29 13/30 +f 14/31 12/28 13/30 +f 14/32 13/33 15/34 +f 16/35 14/32 15/34 +f 16/35 15/34 17/36 +f 18/37 16/35 17/36 +f 18/37 17/36 19/38 +f 20/39 18/37 19/38 +f 20/39 19/38 21/40 +f 22/41 20/39 21/40 +f 22/42 21/43 23/44 +f 24/45 22/42 23/44 +f 24/45 23/44 25/46 +f 26/47 24/48 25/49 +f 26/47 25/49 27/50 +f 28/51 26/47 27/50 +f 28/51 27/50 29/52 +f 30/53 28/51 29/52 +f 30/53 29/52 31/54 +f 32/55 30/53 31/54 +f 32/55 31/54 33/56 +f 34/57 32/58 33/59 +f 34/57 33/59 35/60 +f 36/61 34/62 35/63 +f 36/61 35/63 37/64 +f 38/65 36/66 37/67 +f 38/65 37/67 39/68 +f 40/69 38/70 39/71 +f 40/69 39/71 41/72 +f 42/73 40/74 41/75 +f 42/73 41/75 43/76 +f 44/77 42/73 43/76 +f 44/77 43/76 45/78 +f 46/79 47/80 48/81 +f 49/82 46/83 48/84 +f 49/82 48/84 50/85 +f 51/86 49/82 50/85 +f 51/86 50/85 52/87 +f 53/88 51/86 52/87 +f 53/88 52/87 54/89 +f 55/90 53/91 54/92 +f 55/93 54/94 56/95 +f 57/96 55/93 56/95 +f 57/97 56/98 58/99 +f 59/100 57/97 58/99 +f 59/100 58/99 60/101 +f 61/102 59/103 60/104 +f 61/102 60/104 62/105 +f 63/106 61/102 62/105 +f 63/106 62/105 64/107 +f 65/108 63/106 64/107 +f 65/108 64/107 66/109 +f 67/110 65/111 66/112 +f 67/110 66/112 68/113 +f 69/114 67/110 68/113 +f 69/114 68/113 70/115 +f 71/116 69/114 70/115 +f 71/117 70/118 72/119 +f 73/120 71/117 72/119 +f 73/120 72/119 74/121 +f 75/122 73/123 74/124 +f 75/122 74/124 76/125 +f 77/126 75/122 76/125 +f 77/126 76/125 78/127 +f 79/128 77/126 78/127 +f 79/129 78/130 80/131 +f 81/132 79/129 80/131 +f 81/132 80/131 82/133 +f 58/99 81/132 82/133 +f 58/99 82/133 60/101 +f 83/134 1/135 3/136 +f 84/137 83/134 3/136 +f 84/137 3/136 85/138 +f 86/139 84/137 85/138 +f 86/139 85/138 87/140 +f 88/141 86/142 87/143 +f 88/141 87/143 89/144 +f 90/145 88/141 89/144 +f 90/145 89/144 44/146 +f 91/147 90/145 44/146 +f 91/147 44/146 45/148 +f 92/149 91/150 45/151 +f 92/149 45/151 93/152 +f 94/153 92/149 93/152 +f 94/153 93/152 95/154 +f 96/155 94/153 95/154 +f 96/155 95/154 97/156 +f 98/157 96/158 97/159 +f 98/157 97/159 99/160 +f 100/161 98/157 99/160 +f 100/161 99/160 101/162 +f 102/163 100/161 101/162 +f 101/162 1/164 102/163 +f 102/165 1/135 83/134 +f 3/12 4/13 85/166 +f 85/166 4/13 103/167 +f 103/167 4/13 6/15 +f 104/168 103/167 6/15 +f 104/169 6/16 8/19 +f 105/170 104/169 8/19 +f 105/171 8/20 10/23 +f 106/172 105/171 10/23 +f 106/173 10/24 12/27 +f 107/174 106/173 12/27 +f 107/175 12/28 14/31 +f 108/176 107/175 14/31 +f 108/176 14/31 16/177 +f 109/178 108/176 16/177 +f 109/179 16/35 18/37 +f 110/180 109/179 18/37 +f 110/180 18/37 20/39 +f 111/181 110/180 20/39 +f 111/181 20/39 22/41 +f 26/47 111/182 22/183 +f 26/47 22/183 24/48 +f 112/184 53/91 55/90 +f 113/185 112/184 55/90 +f 113/186 55/93 57/96 +f 114/187 113/186 57/96 +f 114/188 57/97 59/100 +f 115/189 114/187 59/190 +f 115/189 59/190 61/191 +f 116/192 115/193 61/102 +f 116/192 61/102 63/106 +f 117/194 116/195 63/196 +f 117/194 63/196 65/197 +f 118/198 117/194 65/197 +f 118/199 65/111 67/110 +f 119/200 118/199 67/110 +f 119/200 67/110 69/114 +f 120/201 119/200 69/114 +f 120/201 69/114 71/116 +f 73/123 120/202 71/203 +f 121/204 21/40 19/38 +f 122/205 121/204 19/38 +f 122/205 19/38 17/36 +f 123/206 122/205 17/36 +f 123/206 17/36 15/34 +f 124/207 123/206 15/34 +f 124/208 15/209 13/30 +f 125/210 124/208 13/30 +f 125/210 13/30 11/29 +f 126/211 125/210 11/29 +f 126/212 11/26 9/25 +f 127/213 126/212 9/25 +f 127/214 9/22 7/21 +f 128/215 127/214 7/21 +f 128/215 7/21 129/216 +f 130/217 128/215 129/216 +f 130/217 129/216 131/218 +f 132/219 130/217 131/218 +f 133/220 112/184 113/185 +f 134/221 133/220 113/185 +f 134/222 113/186 114/187 +f 135/223 134/222 114/187 +f 135/223 114/187 115/189 +f 136/224 135/223 115/189 +f 136/224 115/189 116/195 +f 137/225 136/224 116/195 +f 137/225 116/195 117/194 +f 138/226 137/225 117/194 +f 138/226 117/194 118/198 +f 139/227 138/228 118/199 +f 139/227 118/199 119/200 +f 140/229 139/227 119/200 +f 140/229 119/200 120/201 +f 141/230 140/231 120/202 +f 142/232 133/220 134/221 +f 143/233 142/234 134/235 +f 143/233 134/235 135/236 +f 144/237 143/233 135/236 +f 144/237 135/236 136/238 +f 145/239 144/237 136/238 +f 145/239 136/238 137/240 +f 146/241 145/242 137/243 +f 146/244 137/225 138/226 +f 147/245 146/244 138/226 +f 147/246 138/228 139/227 +f 148/247 147/246 139/227 +f 148/247 139/227 140/229 +f 149/248 148/249 140/231 +f 149/248 140/231 141/230 +f 150/250 149/248 141/230 +f 5/14 2/11 151/251 +f 152/252 5/14 151/251 +f 152/252 151/251 153/253 +f 154/254 152/252 153/253 +f 154/254 153/253 155/255 +f 156/256 154/254 155/255 +f 156/256 155/255 157/257 +f 158/258 156/259 157/260 +f 158/258 157/260 159/261 +f 160/262 158/263 159/264 +f 160/262 159/264 161/265 +f 162/266 160/267 161/268 +f 162/266 161/268 163/269 +f 164/270 162/271 163/272 +f 164/270 163/272 35/60 +f 33/59 164/270 35/60 +f 23/44 21/43 121/273 +f 165/274 23/44 121/273 +f 165/275 121/204 122/205 +f 166/276 165/277 122/278 +f 166/276 122/278 167/279 +f 168/280 166/276 167/279 +f 168/280 167/279 169/281 +f 170/282 168/280 169/281 +f 170/283 169/284 171/285 +f 172/286 170/283 171/285 +f 172/286 171/285 173/287 +f 174/288 172/286 173/287 +f 174/288 173/287 175/289 +f 176/290 174/288 175/289 +f 176/290 175/289 164/270 +f 33/59 176/290 164/270 +f 2/11 1/10 101/291 +f 151/251 2/11 101/291 +f 151/251 101/291 99/292 +f 153/253 151/251 99/292 +f 153/253 99/292 97/293 +f 155/255 153/253 97/293 +f 155/255 97/293 177/294 +f 157/257 155/255 177/294 +f 157/257 177/294 178/295 +f 159/261 157/260 178/296 +f 159/261 178/296 39/297 +f 161/265 159/264 39/68 +f 161/265 39/68 179/298 +f 163/269 161/268 179/299 +f 163/300 179/301 37/64 +f 35/63 163/300 37/64 +f 174/302 176/303 180/304 +f 181/305 174/302 180/304 +f 181/305 180/304 182/306 +f 183/307 181/305 182/306 +f 183/307 182/306 184/308 +f 185/309 183/307 184/308 +f 185/310 184/311 23/44 +f 186/312 185/310 23/44 +f 186/312 23/44 187/313 +f 188/314 186/315 187/316 +f 188/314 187/316 189/317 +f 190/318 188/314 189/317 +f 190/318 189/317 168/280 +f 170/282 190/318 168/280 +f 74/121 72/119 191/319 +f 76/125 74/124 191/320 +f 76/125 191/320 192/321 +f 78/127 76/125 192/321 +f 78/130 192/322 193/323 +f 80/131 78/130 193/323 +f 80/131 193/323 194/324 +f 82/133 80/131 194/324 +f 82/133 194/324 195/325 +f 60/101 82/133 195/325 +f 60/104 195/326 62/105 +f 196/327 145/242 146/241 +f 197/328 196/327 146/241 +f 197/329 146/244 147/245 +f 198/330 197/329 147/245 +f 198/331 147/246 148/247 +f 199/332 198/333 148/249 +f 199/332 148/249 149/248 +f 200/334 199/332 149/248 +f 200/334 149/248 150/250 +f 201/335 200/334 150/250 +f 47/80 196/327 197/328 +f 48/81 47/80 197/328 +f 48/336 197/329 198/330 +f 50/337 48/336 198/330 +f 50/337 198/330 199/338 +f 52/339 50/337 199/338 +f 52/339 199/338 200/340 +f 54/94 52/339 200/340 +f 54/94 200/340 201/341 +f 56/95 54/94 201/341 +f 87/342 85/166 103/167 +f 202/343 87/342 103/167 +f 202/343 103/167 104/168 +f 203/344 202/343 104/168 +f 203/345 104/169 105/170 +f 204/346 203/345 105/170 +f 204/347 105/171 106/172 +f 205/348 204/347 106/172 +f 205/348 106/172 36/66 +f 38/65 205/348 36/66 +f 120/202 73/123 75/122 +f 141/230 120/202 75/122 +f 141/230 75/122 77/126 +f 150/250 141/230 77/126 +f 150/250 77/126 79/128 +f 201/335 150/250 79/128 +f 201/349 79/129 81/132 +f 56/98 201/349 81/132 +f 56/98 81/132 58/99 +f 126/350 127/351 128/352 +f 206/353 126/350 128/352 +f 206/353 128/352 130/354 +f 207/355 206/353 130/354 +f 207/355 130/354 208/356 +f 209/357 207/355 208/356 +f 209/358 208/359 210/360 +f 173/287 209/361 210/362 +f 173/287 210/362 175/289 +f 7/363 5/364 152/365 +f 129/366 7/363 152/365 +f 129/366 152/365 154/367 +f 131/368 129/366 154/367 +f 131/368 154/367 156/369 +f 132/370 131/368 156/369 +f 132/371 156/259 158/258 +f 160/262 132/219 158/263 +f 176/290 33/59 31/372 +f 180/373 176/374 31/54 +f 180/373 31/54 29/52 +f 182/375 180/373 29/52 +f 182/375 29/52 27/50 +f 211/376 182/375 27/50 +f 211/376 27/50 25/49 +f 23/44 211/377 25/46 +f 193/323 192/322 191/378 +f 212/379 193/323 191/378 +f 212/380 191/319 72/119 +f 213/381 212/380 72/119 +f 213/381 72/119 214/382 +f 194/324 213/383 214/384 +f 194/324 214/384 195/325 +f 125/210 126/211 206/385 +f 215/386 125/210 206/385 +f 215/386 206/385 207/387 +f 216/388 215/386 207/387 +f 216/388 207/387 209/361 +f 171/285 216/388 209/361 +f 171/285 209/361 173/287 +f 217/389 214/382 72/119 +f 218/390 217/389 72/119 +f 218/390 72/119 219/391 +f 220/392 218/393 219/394 +f 220/392 219/394 221/395 +f 66/109 220/392 221/395 +f 66/112 221/396 68/113 +f 172/397 174/302 181/305 +f 222/398 172/397 181/305 +f 222/398 181/305 183/307 +f 223/399 222/398 183/307 +f 223/399 183/307 185/309 +f 188/400 223/399 185/309 +f 188/400 185/309 186/401 +f 124/208 125/210 215/386 +f 224/402 124/208 215/386 +f 224/403 215/404 216/405 +f 169/281 224/403 216/405 +f 169/284 216/388 171/285 +f 93/406 45/78 43/76 +f 225/407 93/406 43/76 +f 225/407 43/76 41/75 +f 178/295 225/407 41/75 +f 178/296 41/408 39/297 +f 220/392 66/109 64/107 +f 226/409 220/392 64/107 +f 226/409 64/107 62/105 +f 195/326 226/409 62/105 +f 38/70 40/69 227/410 +f 205/411 38/70 227/410 +f 205/411 227/410 203/412 +f 204/413 205/411 203/412 +f 40/74 42/73 228/414 +f 227/415 40/74 228/414 +f 227/415 228/414 202/343 +f 203/344 227/415 202/343 +f 42/73 44/77 89/416 +f 228/414 42/73 89/416 +f 228/414 89/416 87/342 +f 202/343 228/414 87/342 +f 195/326 214/417 217/418 +f 226/409 195/326 217/418 +f 226/409 217/418 218/393 +f 220/392 226/409 218/393 +f 166/276 168/280 189/317 +f 229/419 166/276 189/317 +f 229/419 189/317 187/316 +f 23/44 229/420 187/313 +f 170/421 172/397 222/398 +f 190/422 170/421 222/398 +f 190/422 222/398 223/399 +f 188/400 190/422 223/399 +f 95/423 93/406 225/407 +f 177/294 95/423 225/407 +f 177/294 225/407 178/295 +f 72/119 70/118 230/424 +f 219/391 72/119 230/424 +f 219/425 230/426 221/396 +f 123/427 124/428 224/403 +f 167/279 123/427 224/403 +f 167/279 224/403 169/281 +f 193/323 212/379 213/383 +f 194/324 193/323 213/383 +f 32/58 34/57 107/175 +f 108/176 32/58 107/175 +f 30/429 32/58 108/176 +f 109/178 30/429 108/176 +f 28/51 30/53 109/430 +f 110/431 28/51 109/430 +f 110/431 111/182 26/47 +f 28/51 110/431 26/47 +f 230/426 70/115 68/113 +f 221/396 230/426 68/113 +f 208/432 130/217 132/219 +f 160/262 208/432 132/219 +f 210/360 208/359 160/267 +f 162/266 210/360 160/267 +f 162/271 164/270 175/289 +f 210/362 162/271 175/289 +f 211/377 23/44 184/311 +f 182/306 211/433 184/308 +f 229/420 23/44 165/274 +f 166/276 229/419 165/277 +f 34/62 36/61 106/434 +f 107/435 34/62 106/434 +f 179/298 39/68 37/67 +f 95/423 177/294 97/293 +f 123/427 167/279 122/278 +usemtl BottoleCork_BottoleCork.png +s off +f 231/436 232/437 233/438 +f 234/439 235/440 236/441 +f 237/442 238/443 239/444 +f 240/445 241/446 242/447 +f 243/448 244/449 245/450 +f 246/451 247/452 248/453 +s 1 +f 258/454 259/455 260/456 +f 260/456 259/455 261/457 +f 261/457 259/455 262/458 +f 263/459 261/460 262/461 +f 263/459 262/461 264/462 +f 265/463 263/459 264/462 +f 265/463 264/462 266/464 +f 267/465 265/463 266/464 +f 267/465 266/464 268/466 +f 269/467 267/468 268/469 +f 269/467 268/469 270/470 +f 271/471 269/467 270/470 +f 271/471 270/470 272/472 +f 273/473 271/471 272/472 +f 273/473 272/472 274/474 +f 275/475 273/476 274/477 +f 275/475 274/477 276/478 +f 277/479 275/475 276/478 +f 277/479 276/478 278/480 +f 279/481 277/482 278/483 +f 279/481 278/483 280/484 +f 281/485 279/481 280/484 +f 281/485 280/484 282/486 +f 283/487 281/485 282/486 +f 283/487 282/486 284/488 +f 285/489 283/487 284/488 +f 285/489 284/488 286/490 +f 287/491 285/489 286/490 +f 287/492 286/493 288/494 +f 289/495 287/492 288/494 +f 290/496 291/497 292/498 +f 293/499 290/500 292/501 +f 293/499 292/501 294/502 +f 295/503 293/499 294/502 +f 295/503 294/502 296/504 +f 297/505 295/503 296/504 +f 297/505 296/504 298/506 +f 299/507 297/508 298/509 +f 299/510 298/511 300/512 +f 301/513 299/510 300/512 +f 301/513 300/512 302/514 +f 303/515 301/513 302/514 +f 303/516 302/517 304/518 +f 305/519 303/520 304/521 +f 305/519 304/521 306/522 +f 307/523 305/519 306/522 +f 307/523 306/522 308/524 +f 309/525 307/523 308/524 +f 309/525 308/524 310/526 +f 311/527 309/528 310/529 +f 311/527 310/529 312/530 +f 313/531 311/527 312/530 +f 313/531 312/530 314/532 +f 315/533 313/531 314/532 +f 316/534 314/532 312/530 +f 317/535 316/534 312/530 +f 317/535 312/530 310/529 +f 258/454 317/536 310/526 +f 258/454 310/526 308/524 +f 259/455 258/454 308/524 +f 259/455 308/524 306/522 +f 262/458 259/455 306/522 +f 262/458 306/522 304/521 +f 318/537 262/461 304/518 +f 318/537 304/518 302/517 +f 319/538 318/537 302/517 +f 319/539 302/514 300/512 +f 320/540 319/539 300/512 +f 320/540 300/512 298/511 +f 321/541 320/540 298/511 +f 321/541 298/511 296/542 +f 322/543 321/541 296/542 +f 322/543 296/542 294/544 +f 323/545 322/543 294/544 +f 323/545 294/544 292/546 +f 324/547 323/545 292/546 +f 324/548 292/498 291/497 +f 325/549 324/548 291/497 +f 326/550 288/494 286/493 +f 327/551 326/552 286/553 +f 327/551 286/553 284/554 +f 328/555 327/551 284/554 +f 328/555 284/554 282/556 +f 329/557 328/555 282/556 +f 329/557 282/556 280/558 +f 330/559 329/560 280/561 +f 330/562 280/484 278/483 +f 331/563 330/562 278/483 +f 331/564 278/480 276/478 +f 332/565 331/563 276/566 +f 332/567 276/478 274/477 +f 333/568 332/569 274/474 +f 333/568 274/474 272/472 +f 334/570 333/568 272/472 +f 334/570 272/472 270/470 +f 335/571 334/570 270/470 +f 335/571 270/470 268/469 +f 336/572 335/573 268/466 +f 336/572 268/466 266/464 +f 264/462 336/572 266/464 +f 289/495 297/508 299/507 +f 287/492 289/495 299/507 +f 287/491 299/510 301/513 +f 285/489 287/491 301/513 +f 285/489 301/513 303/515 +f 283/487 285/489 303/515 +f 283/487 303/515 305/574 +f 281/575 283/576 305/519 +f 281/575 305/519 307/523 +f 279/481 281/485 307/577 +f 279/481 307/577 309/578 +f 277/482 279/481 309/578 +f 277/479 309/528 311/527 +f 275/475 277/479 311/527 +f 275/475 311/527 313/531 +f 273/476 275/475 313/531 +f 273/476 313/531 315/533 +f 337/579 273/476 315/533 +f 325/549 329/560 330/559 +f 324/548 325/549 330/559 +f 324/547 330/562 331/563 +f 323/545 324/547 331/563 +f 323/545 331/563 332/565 +f 322/543 323/545 332/565 +f 322/543 332/565 333/580 +f 321/541 322/543 333/580 +f 321/541 333/580 334/581 +f 320/540 321/541 334/581 +f 320/540 334/581 335/582 +f 319/539 320/540 335/582 +f 319/538 335/573 336/572 +f 318/537 319/538 336/572 +f 318/537 336/572 264/462 +f 262/461 318/537 264/462 +f 291/583 290/584 338/585 +f 339/586 291/583 338/585 +f 339/587 338/588 340/589 +f 341/590 339/587 340/589 +f 341/591 340/592 342/593 +f 343/594 341/591 342/593 +f 343/594 342/593 344/595 +f 345/596 343/594 344/595 +f 345/596 344/595 346/597 +f 347/598 345/596 346/597 +f 347/598 346/597 348/599 +f 349/600 347/598 348/599 +f 349/600 348/599 350/601 +f 325/602 291/583 339/586 +f 351/603 325/602 339/586 +f 351/604 339/587 341/590 +f 352/605 351/604 341/590 +f 352/606 341/591 343/594 +f 353/607 352/606 343/594 +f 353/607 343/594 345/596 +f 354/608 353/607 345/596 +f 354/608 345/596 347/598 +f 355/609 354/608 347/598 +f 355/609 347/598 349/600 +f 356/610 357/611 358/612 +f 359/613 356/610 358/612 +f 359/613 358/612 360/614 +f 361/615 359/613 360/614 +f 361/616 360/617 362/618 +f 363/619 361/616 362/618 +f 363/620 362/621 295/622 +f 364/623 363/620 295/622 +f 364/623 295/622 297/624 +f 289/625 364/623 297/624 +f 329/626 325/602 351/603 +f 365/627 329/626 351/603 +f 365/628 351/604 352/605 +f 366/629 365/630 352/631 +f 366/629 352/631 353/632 +f 367/633 366/629 353/632 +f 367/633 353/632 354/634 +f 368/635 367/633 354/634 +f 368/635 354/634 355/636 +f 357/611 369/637 370/638 +f 358/612 357/611 370/638 +f 358/612 370/638 371/639 +f 360/614 358/612 371/639 +f 360/617 371/640 338/641 +f 362/618 360/617 338/641 +f 362/621 338/585 293/642 +f 295/622 362/621 293/642 +f 372/643 356/610 359/613 +f 373/644 372/643 359/613 +f 373/644 359/613 361/615 +f 374/645 373/644 361/615 +f 374/646 361/616 363/619 +f 364/647 374/646 363/619 +f 368/648 326/649 327/650 +f 367/651 368/648 327/650 +f 367/651 327/650 328/652 +f 366/653 367/651 328/652 +f 366/653 328/652 329/626 +f 365/627 366/653 329/626 +f 349/600 350/601 375/654 +f 376/655 349/600 375/654 +f 376/655 375/654 377/656 +f 378/657 376/655 377/656 +f 378/657 377/656 372/643 +f 373/644 378/657 372/643 +f 355/609 349/600 376/655 +f 379/658 355/609 376/655 +f 379/658 376/655 378/657 +f 380/659 379/658 378/657 +f 380/659 378/657 373/644 +f 374/645 380/659 373/644 +f 340/589 338/588 371/660 +f 381/661 340/592 371/639 +f 381/661 371/639 370/638 +f 382/662 381/661 370/638 +f 382/662 370/638 369/637 +f 288/663 326/649 368/648 +f 383/664 288/663 368/648 +f 383/665 368/666 379/667 +f 380/668 383/665 379/667 +f 289/625 288/663 383/664 +f 384/669 289/625 383/664 +f 384/670 383/665 380/668 +f 374/671 384/670 380/668 +f 381/661 382/662 385/672 +f 342/593 381/661 385/672 +f 342/593 385/672 344/595 +f 386/673 337/674 387/675 +f 388/676 386/673 387/675 +f 388/676 387/675 389/677 +f 316/678 317/536 258/454 +f 390/679 316/678 258/454 +f 390/679 258/454 260/456 +f 364/623 289/625 384/669 +f 374/671 364/680 384/670 +f 387/675 337/674 315/681 +f 314/682 387/675 315/681 +f 387/675 314/682 316/683 +f 390/684 387/675 316/683 +f 387/675 390/684 260/685 +f 261/686 387/675 260/685 +f 387/675 261/686 263/687 +f 265/688 387/675 263/687 +f 271/471 273/473 337/689 +f 386/690 271/471 337/689 +f 269/467 271/471 386/690 +f 388/691 269/467 386/690 +f 267/468 269/467 388/691 +f 389/692 267/468 388/691 +f 290/584 293/642 338/585 +f 355/693 379/667 368/666 +f 381/661 342/593 340/592 +f 389/677 387/675 265/688 +f 265/463 267/465 389/694 +f 391/695 392/696 393/697 +f 394/698 393/697 392/696 +f 394/698 392/696 395/699 +f 396/700 394/698 395/699 +f 396/700 395/699 397/701 +f 398/702 396/700 397/701 +f 399/703 400/704 401/705 +f 402/706 399/703 401/705 +f 402/706 401/705 403/707 +f 404/708 402/706 403/707 +f 404/708 403/707 405/709 +f 406/710 404/708 405/709 +f 406/711 405/712 407/713 +f 408/714 406/711 407/713 +f 408/714 407/713 409/715 +f 410/716 408/714 409/715 +f 410/716 409/715 391/717 +f 393/718 410/716 391/717 +f 398/719 397/720 411/721 +f 412/722 398/719 411/721 +f 412/722 411/721 413/723 +f 414/724 412/722 413/723 +f 414/724 413/723 400/725 +f 399/726 414/724 400/725 +f 401/727 400/728 415/729 +f 403/730 401/727 415/729 +f 403/730 415/729 405/731 +f 407/732 405/731 415/729 +f 409/733 407/732 415/729 +f 409/733 415/729 391/734 +f 392/735 391/734 415/729 +f 395/736 392/735 415/729 +f 395/736 415/729 397/737 +f 411/738 397/737 415/729 +f 413/739 411/738 415/729 +f 413/739 415/729 400/728 +f 416/740 399/741 402/742 +f 404/743 416/740 402/742 +f 416/740 406/744 408/745 +f 410/746 416/740 408/745 +f 393/747 394/748 416/740 +f 416/740 394/748 396/749 +f 416/740 398/750 412/751 +f 414/752 416/740 412/751 +f 406/744 416/740 404/743 +f 393/747 416/740 410/746 +f 398/750 416/740 396/749 +f 399/741 416/740 414/752 diff --git a/src/main/resources/assets/dartcraft/models/liquid.obj b/src/main/resources/assets/dartcraft/models/liquid.obj new file mode 100644 index 0000000..b27a449 --- /dev/null +++ b/src/main/resources/assets/dartcraft/models/liquid.obj @@ -0,0 +1,330 @@ +# Blender v2.66 (sub 1) OBJ File: 'liquid.blend' +# www.blender.org +mtllib liquid.mtl +o Cylinder +v 0.000000 -1.000000 -1.000000 +v 0.000000 1.000000 -1.000000 +v 0.195090 -1.000000 -0.980785 +v 0.195090 1.000000 -0.980785 +v 0.382683 -1.000000 -0.923880 +v 0.382683 1.000000 -0.923880 +v 0.555570 -1.000000 -0.831470 +v 0.555570 1.000000 -0.831470 +v 0.707107 -1.000000 -0.707107 +v 0.707107 1.000000 -0.707107 +v 0.831470 -1.000000 -0.555570 +v 0.831470 1.000000 -0.555570 +v 0.923880 -1.000000 -0.382683 +v 0.923880 1.000000 -0.382683 +v 0.980785 -1.000000 -0.195090 +v 0.980785 1.000000 -0.195090 +v 1.000000 -1.000000 -0.000000 +v 1.000000 1.000000 -0.000000 +v 0.980785 -1.000000 0.195090 +v 0.980785 1.000000 0.195090 +v 0.923880 -1.000000 0.382683 +v 0.923880 1.000000 0.382683 +v 0.831470 -1.000000 0.555570 +v 0.831470 1.000000 0.555570 +v 0.707107 -1.000000 0.707107 +v 0.707107 1.000000 0.707107 +v 0.555570 -1.000000 0.831470 +v 0.555570 1.000000 0.831470 +v 0.382683 -1.000000 0.923880 +v 0.382683 1.000000 0.923880 +v 0.195090 -1.000000 0.980785 +v 0.195090 1.000000 0.980785 +v -0.000000 -1.000000 1.000000 +v -0.000000 1.000000 1.000000 +v -0.195091 -1.000000 0.980785 +v -0.195091 1.000000 0.980785 +v -0.382684 -1.000000 0.923879 +v -0.382684 1.000000 0.923879 +v -0.555571 -1.000000 0.831469 +v -0.555571 1.000000 0.831469 +v -0.707107 -1.000000 0.707106 +v -0.707107 1.000000 0.707106 +v -0.831470 -1.000000 0.555570 +v -0.831470 1.000000 0.555570 +v -0.923880 -1.000000 0.382683 +v -0.923880 1.000000 0.382683 +v -0.980785 -1.000000 0.195089 +v -0.980785 1.000000 0.195089 +v -1.000000 -1.000000 -0.000001 +v -1.000000 1.000000 -0.000001 +v -0.980785 -1.000000 -0.195091 +v -0.980785 1.000000 -0.195091 +v -0.923879 -1.000000 -0.382684 +v -0.923879 1.000000 -0.382684 +v -0.831469 -1.000000 -0.555571 +v -0.831469 1.000000 -0.555571 +v -0.707106 -1.000000 -0.707108 +v -0.707106 1.000000 -0.707108 +v -0.555569 -1.000000 -0.831470 +v -0.555569 1.000000 -0.831470 +v -0.382682 -1.000000 -0.923880 +v -0.382682 1.000000 -0.923880 +v -0.195089 -1.000000 -0.980786 +v -0.195089 1.000000 -0.980786 +vt 0.445414 0.665488 +vt 0.444393 0.332433 +vt 0.477038 0.332333 +vt 0.478059 0.665388 +vt 0.509055 0.332234 +vt 0.510077 0.665289 +vt 0.539216 0.332142 +vt 0.540237 0.665197 +vt 0.566359 0.332059 +vt 0.567381 0.665114 +vt 0.589443 0.331988 +vt 0.307526 0.666119 +vt 0.308547 0.999174 +vt 0.281404 0.999257 +vt 0.280382 0.666202 +vt 0.251244 0.999349 +vt 0.250222 0.666294 +vt 0.219226 0.999448 +vt 0.218204 0.666393 +vt 0.186581 0.999548 +vt 0.185559 0.666493 +vt 0.154563 0.999646 +vt 0.153541 0.666591 +vt 0.124403 0.999738 +vt 0.123381 0.666683 +vt 0.097260 0.999822 +vt 0.097260 0.665762 +vt 0.096238 0.332707 +vt 0.123381 0.332624 +vt 0.124403 0.665679 +vt 0.153541 0.332531 +vt 0.154563 0.665586 +vt 0.185559 0.332433 +vt 0.186581 0.665488 +vt 0.218204 0.332333 +vt 0.219226 0.665388 +vt 0.251244 0.665289 +vt 0.250222 0.332234 +vt 0.281404 0.665197 +vt 0.280382 0.332142 +vt 0.308548 0.665114 +vt 0.307526 0.332059 +vt 0.331631 0.665043 +vt 0.825193 0.331988 +vt 0.826214 0.665043 +vt 0.798049 0.332071 +vt 0.799071 0.665126 +vt 0.767889 0.332164 +vt 0.768911 0.665219 +vt 0.735871 0.332262 +vt 0.736893 0.665317 +vt 0.703226 0.332362 +vt 0.704248 0.665417 +vt 0.671208 0.332460 +vt 0.672230 0.665515 +vt 0.641048 0.332553 +vt 0.642070 0.665608 +vt 0.613905 0.332636 +vt 0.614926 0.665691 +vt 0.590821 0.332707 +vt 0.333010 0.665833 +vt 0.331988 0.332778 +vt 0.356093 0.665762 +vt 0.355071 0.332707 +vt 0.383237 0.665679 +vt 0.060260 0.037177 +vt 0.087404 0.019040 +vt 0.037177 0.060260 +vt 0.413397 0.665586 +vt 0.412375 0.332531 +vt 0.382215 0.332624 +vt 0.338357 0.214245 +vt 0.331988 0.182227 +vt 0.350849 0.244405 +vt 0.590464 0.665043 +vt 0.096238 0.666767 +vt 0.330609 0.331988 +vt 0.591843 0.665762 +vt 0.117564 0.006547 +vt 0.149582 0.000178 +vt 0.182227 0.000178 +vt 0.214245 0.006547 +vt 0.244405 0.019040 +vt 0.271549 0.037177 +vt 0.294633 0.060260 +vt 0.312770 0.087404 +vt 0.325262 0.117564 +vt 0.331631 0.149582 +vt 0.331631 0.182227 +vt 0.325262 0.214245 +vt 0.312770 0.244406 +vt 0.294633 0.271549 +vt 0.271549 0.294633 +vt 0.244406 0.312770 +vt 0.214245 0.325262 +vt 0.182227 0.331631 +vt 0.149582 0.331631 +vt 0.117564 0.325262 +vt 0.087404 0.312770 +vt 0.060260 0.294633 +vt 0.037177 0.271549 +vt 0.019040 0.244406 +vt 0.006547 0.214245 +vt 0.000178 0.182227 +vt 0.000178 0.149582 +vt 0.006547 0.117564 +vt 0.019040 0.087404 +vt 0.331988 0.149582 +vt 0.338357 0.117564 +vt 0.350849 0.087404 +vt 0.368986 0.060260 +vt 0.392070 0.037177 +vt 0.419213 0.019040 +vt 0.449374 0.006547 +vt 0.481392 0.000178 +vt 0.514037 0.000178 +vt 0.546055 0.006547 +vt 0.576215 0.019040 +vt 0.603359 0.037177 +vt 0.626442 0.060260 +vt 0.644579 0.087404 +vt 0.657072 0.117564 +vt 0.663441 0.149582 +vt 0.663441 0.182227 +vt 0.657072 0.214245 +vt 0.644579 0.244406 +vt 0.626442 0.271549 +vt 0.603359 0.294633 +vt 0.576215 0.312770 +vt 0.546055 0.325262 +vt 0.514037 0.331631 +vt 0.481391 0.331631 +vt 0.449373 0.325262 +vt 0.419213 0.312769 +vt 0.392070 0.294633 +vt 0.368986 0.271549 +usemtl None +s off +f 1/1 2/2 4/3 +f 3/4 4/3 6/5 +f 5/6 6/5 8/7 +f 7/8 8/7 10/9 +f 9/10 10/9 12/11 +f 11/12 12/13 14/14 +f 13/15 14/14 16/16 +f 15/17 16/16 18/18 +f 17/19 18/18 20/20 +f 19/21 20/20 22/22 +f 21/23 22/22 24/24 +f 23/25 24/24 26/26 +f 25/27 26/28 28/29 +f 27/30 28/29 30/31 +f 29/32 30/31 32/33 +f 31/34 32/33 34/35 +f 33/36 34/35 35/37 +f 35/37 36/38 37/39 +f 37/39 38/40 39/41 +f 39/41 40/42 41/43 +f 41/44 42/45 43/46 +f 43/46 44/47 45/48 +f 45/48 46/49 47/50 +f 47/50 48/51 49/52 +f 49/52 50/53 51/54 +f 51/54 52/55 53/56 +f 53/56 54/57 55/58 +f 55/58 56/59 57/60 +f 57/61 58/62 59/63 +f 59/63 60/64 61/65 +f 4/66 2/67 6/68 +f 63/69 64/70 1/1 +f 61/65 62/71 63/69 +f 1/72 3/73 63/74 +f 3/4 1/1 4/3 +f 5/6 3/4 6/5 +f 7/8 5/6 8/7 +f 9/10 7/8 10/9 +f 11/75 9/10 12/11 +f 13/15 11/12 14/14 +f 15/17 13/15 16/16 +f 17/19 15/17 18/18 +f 19/21 17/19 20/20 +f 21/23 19/21 22/22 +f 23/25 21/23 24/24 +f 25/76 23/25 26/26 +f 27/30 25/27 28/29 +f 29/32 27/30 30/31 +f 31/34 29/32 32/33 +f 33/36 31/34 34/35 +f 34/35 36/38 35/37 +f 36/38 38/40 37/39 +f 38/40 40/42 39/41 +f 40/42 42/77 41/43 +f 42/45 44/47 43/46 +f 44/47 46/49 45/48 +f 46/49 48/51 47/50 +f 48/51 50/53 49/52 +f 50/53 52/55 51/54 +f 52/55 54/57 53/56 +f 54/57 56/59 55/58 +f 56/59 58/78 57/60 +f 58/62 60/64 59/63 +f 60/64 62/71 61/65 +f 2/67 64/79 6/68 +f 64/79 62/80 6/68 +f 62/80 60/81 6/68 +f 60/81 58/82 6/68 +f 58/82 56/83 6/68 +f 56/83 54/84 6/68 +f 54/84 52/85 6/68 +f 52/85 50/86 6/68 +f 50/86 48/87 6/68 +f 48/87 46/88 6/68 +f 46/88 44/89 6/68 +f 44/89 42/90 6/68 +f 42/90 40/91 6/68 +f 40/91 38/92 6/68 +f 38/92 36/93 6/68 +f 36/93 34/94 6/68 +f 34/94 32/95 6/68 +f 32/95 30/96 6/68 +f 30/96 28/97 6/68 +f 28/97 26/98 6/68 +f 26/98 24/99 6/68 +f 24/99 22/100 6/68 +f 22/100 20/101 6/68 +f 20/101 18/102 6/68 +f 18/102 16/103 6/68 +f 16/103 14/104 6/68 +f 14/104 12/105 6/68 +f 12/105 10/106 8/107 +f 6/68 12/105 8/107 +f 64/70 2/2 1/1 +f 62/71 64/70 63/69 +f 3/73 5/108 63/74 +f 5/108 7/109 63/74 +f 7/109 9/110 63/74 +f 9/110 11/111 63/74 +f 11/111 13/112 63/74 +f 13/112 15/113 63/74 +f 15/113 17/114 63/74 +f 17/114 19/115 63/74 +f 19/115 21/116 63/74 +f 21/116 23/117 63/74 +f 23/117 25/118 63/74 +f 25/118 27/119 63/74 +f 27/119 29/120 63/74 +f 29/120 31/121 63/74 +f 31/121 33/122 63/74 +f 33/122 35/123 63/74 +f 35/123 37/124 63/74 +f 37/124 39/125 63/74 +f 39/125 41/126 63/74 +f 41/126 43/127 63/74 +f 43/127 45/128 63/74 +f 45/128 47/129 63/74 +f 47/129 49/130 63/74 +f 49/130 51/131 63/74 +f 51/131 53/132 63/74 +f 53/132 55/133 63/74 +f 55/133 57/134 63/74 +f 57/134 59/135 61/136 +f 63/74 57/134 61/136 diff --git a/src/main/resources/assets/dartcraft/sounds.json b/src/main/resources/assets/dartcraft/sounds.json new file mode 100644 index 0000000..76367c8 --- /dev/null +++ b/src/main/resources/assets/dartcraft/sounds.json @@ -0,0 +1,5 @@ +{ + "bottle": {"category": "master","sounds": [{"name": "bottle","stream": false}]}, + "swipe": {"category": "master","sounds": [{"name": "swipe","stream": false}]}, + "nope": {"category": "master","sounds": [{"name": "nope","stream": false}]} +} diff --git a/src/main/resources/assets/dartcraft/sounds/bottle.ogg b/src/main/resources/assets/dartcraft/sounds/bottle.ogg new file mode 100644 index 0000000..c71a3fb Binary files /dev/null and b/src/main/resources/assets/dartcraft/sounds/bottle.ogg differ diff --git a/src/main/resources/assets/dartcraft/sounds/nope.ogg b/src/main/resources/assets/dartcraft/sounds/nope.ogg new file mode 100644 index 0000000..d75581d Binary files /dev/null and b/src/main/resources/assets/dartcraft/sounds/nope.ogg differ diff --git a/src/main/resources/assets/dartcraft/sounds/swipe.ogg b/src/main/resources/assets/dartcraft/sounds/swipe.ogg new file mode 100644 index 0000000..d1d04c5 Binary files /dev/null and b/src/main/resources/assets/dartcraft/sounds/swipe.ogg differ