diff --git a/src/main/java/api/hbm/energy/PowerNet.java b/src/main/java/api/hbm/energy/PowerNet.java index 74ed23b88..62adacbba 100644 --- a/src/main/java/api/hbm/energy/PowerNet.java +++ b/src/main/java/api/hbm/energy/PowerNet.java @@ -121,7 +121,7 @@ public class PowerNet implements IPowerNet { long req = weight.get(i); double fraction = (double)req / (double)totalReq; - long given = (int) Math.floor(fraction * power); + long given = (long) Math.floor(fraction * power); totalGiven += (given - con.transferPower(given)); } diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 594eea918..409fed4a8 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -831,9 +831,7 @@ public class ModBlocks { public static Block machine_converter_he_rf; public static final int guiID_converter_he_rf = 28; - public static Block machine_converter_rf_he; - public static final int guiID_converter_rf_he = 29; public static Block machine_schrabidium_transmutator; public static final int guiID_schrabidium_transmutator = 30; diff --git a/src/main/java/com/hbm/blocks/machine/BlockConverterRfHe.java b/src/main/java/com/hbm/blocks/machine/BlockConverterRfHe.java index ad3bfa72f..34b3cfadf 100644 --- a/src/main/java/com/hbm/blocks/machine/BlockConverterRfHe.java +++ b/src/main/java/com/hbm/blocks/machine/BlockConverterRfHe.java @@ -19,26 +19,4 @@ public class BlockConverterRfHe extends BlockContainer { public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { return new TileEntityConverterRfHe(); } - - @Override - public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { - if(world.isRemote) - { - return true; - } else if(!player.isSneaking()) - { - TileEntityConverterRfHe entity = (TileEntityConverterRfHe) world.getTileEntity(x, y, z); - if(entity != null) - { - player.addChatComponentMessage(new ChatComponentText("Note: Buffer may not accuratly represent current conversion rate, keep tact rates in mind.")); - player.addChatComponentMessage(new ChatComponentText("HE: " + (entity.buf / 4))); - player.addChatComponentMessage(new ChatComponentText("RF: " + entity.buf)); - //FMLNetworkHandler.openGui(player, MainRegistry.instance, ModBlocks.guiID_converter_rf_he, world, x, y, z); - } - return true; - } else { - return false; - } - } - } diff --git a/src/main/java/com/hbm/entity/mob/EntityBurrowingBase.java b/src/main/java/com/hbm/entity/mob/EntityBurrowingBase.java index 7595edf29..152a69bd7 100644 --- a/src/main/java/com/hbm/entity/mob/EntityBurrowingBase.java +++ b/src/main/java/com/hbm/entity/mob/EntityBurrowingBase.java @@ -34,6 +34,12 @@ public abstract class EntityBurrowingBase extends EntityCreature { @Override protected void updateFallState(double distFallen, boolean onGround) { } + /** + * ...and we turn off the default AI routines. We don't care about path-finding anyway. + */ + @Override + protected void updateEntityActionState() { } + /** * Calls moveFlying to add motion depending on our entity's rotation, then moves. Drag is applied depending on whether it is underground or airborne. * Called in onLivingUpdate TODO: figure out if strafe and forward are set by one of the superclasses or if this part is pointless @@ -72,6 +78,14 @@ public abstract class EntityBurrowingBase extends EntityCreature { return false; } + /** + * Contrary to its name, all I could find about it was that it controlled some rotation behavior. BoT seems to work fine with it, so we'll use it here too. + */ + @Override + protected boolean isAIEnabled() { + return true; + } + /** * Whether the entity can freely dig up and down or if gravity should be applied instead. * Some entities might not be able to course-correct when airborne, such as small non-worm entities. diff --git a/src/main/java/com/hbm/entity/mob/EntityBurrowingSwingingBase.java b/src/main/java/com/hbm/entity/mob/EntityBurrowingSwingingBase.java new file mode 100644 index 000000000..3705ddb3c --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/EntityBurrowingSwingingBase.java @@ -0,0 +1,64 @@ +package com.hbm.entity.mob; + +import net.minecraft.entity.Entity; +import net.minecraft.util.MathHelper; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +/** + * The name comes from the "swinging" movement patterns as part of its custom path-finding. Also handles rotation. + * The end result kind of looks like dolphins jumping out of the water just to dive back in. + * This class assumes that all implementations are indeed hostile mobs. + * @author hbm + * + */ +public abstract class EntityBurrowingSwingingBase extends EntityBurrowingBase { + + protected Entity target = null; + + public EntityBurrowingSwingingBase(World world) { + super(world); + } + + @Override + public void onUpdate() { + + super.onUpdate(); + + double dx = motionX; + double dy = motionY; + double dz = motionZ; + float f3 = MathHelper.sqrt_double(dx * dx + dz * dz); + this.prevRotationYaw = this.rotationYaw = (float) (Math.atan2(dx, dz) * 180.0D / Math.PI); + this.prevRotationPitch = this.rotationPitch = (float) (Math.atan2(dy, f3) * 180.0D / Math.PI); + } + + @Override + protected void updateAITasks() { + + this.updateEntityActionState(); + super.updateAITasks(); + + swingingMovement(); + } + + @Override + protected void updateEntityActionState() { + + if(!this.worldObj.isRemote && this.worldObj.difficultySetting == EnumDifficulty.PEACEFUL) { + setDead(); + } + if((this.target != null) && (this.target.isDead)) { + this.target = null; + } + if(this.posY < -10.0D) { + this.motionY = 1D; + } else if(this.posY < 3.0D) { + this.motionY = 0.3D; + } + } + + protected void swingingMovement() { + + } +} diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java index 537363990..1aaaeec1f 100644 --- a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeSkeleton.java @@ -9,11 +9,16 @@ import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IEntityLivingData; import net.minecraft.entity.IRangedAttackMob; import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.EntityAIArrowAttack; +import net.minecraft.entity.ai.EntityAIHurtByTarget; +import net.minecraft.entity.ai.EntityAILookIdle; +import net.minecraft.entity.ai.EntityAINearestAttackableTarget; +import net.minecraft.entity.ai.EntityAISwimming; +import net.minecraft.entity.ai.EntityAIWander; +import net.minecraft.entity.ai.EntityAIWatchClosest; import net.minecraft.entity.ai.attributes.AttributeModifier; import net.minecraft.entity.monster.EntityMob; -import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.DamageSource; @@ -25,6 +30,13 @@ public class EntitySiegeSkeleton extends EntityMob implements IRangedAttackMob, public EntitySiegeSkeleton(World world) { super(world); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, 1.0D, 20, 60, 15.0F)); + this.tasks.addTask(3, new EntityAIWander(this, 1.0D)); + this.tasks.addTask(5, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(5, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, false)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true)); } @Override @@ -66,7 +78,6 @@ public class EntitySiegeSkeleton extends EntityMob implements IRangedAttackMob, protected void entityInit() { super.entityInit(); this.getDataWatcher().addObject(12, (int) 0); - this.getDataWatcher().addObject(13, (byte) 0); } @Override @@ -118,20 +129,28 @@ public class EntitySiegeSkeleton extends EntityMob implements IRangedAttackMob, @Override public void attackEntityWithRangedAttack(EntityLivingBase target, float f) { - - Vec3 vec = Vec3.createVectorHelper(target.posX - posY, target.posY + target.height * 0.5 - (posY + this.getEyeHeight()), target.posZ -posZ).normalize(); + + double x = posX; + double y = posY + this.getEyeHeight(); + double z = posZ; + + Vec3 vec = Vec3.createVectorHelper(target.posX - x, target.posY + target.getYOffset() + target.height * 0.5 - y, target.posZ - z).normalize(); SiegeTier tier = this.getTier(); - EntitySiegeLaser laser = new EntitySiegeLaser(worldObj, this); - laser.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, 1F, 0.15F); - laser.setColor(0x808080); - laser.setDamage(tier.damageMod); - laser.setExplosive(tier.laserExplosive); - laser.setBreakChance(tier.laserBreak); - if(tier.laserIncendiary) laser.setIncendiary(); - worldObj.spawnEntityInWorld(laser); - this.playSound("hbm:weapon.ballsLaser", 2.0F, 1.0F); + for(int i = 0; i < 3; i++) { + EntitySiegeLaser laser = new EntitySiegeLaser(worldObj, this); + laser.setPosition(x, y, z); + laser.setThrowableHeading(vec.xCoord, vec.yCoord, vec.zCoord, 1F, i == 1 ? 0.15F : 5F); + laser.setColor(0x808000); + laser.setDamage(tier.damageMod); + laser.setExplosive(tier.laserExplosive); + laser.setBreakChance(tier.laserBreak); + if(tier.laserIncendiary) laser.setIncendiary(); + worldObj.spawnEntityInWorld(laser); + } + + this.playSound("hbm:weapon.ballsLaser", 2.0F, 0.9F + rand.nextFloat() * 0.2F); } @Override diff --git a/src/main/java/com/hbm/entity/mob/siege/EntitySiegeTunneler.java b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeTunneler.java new file mode 100644 index 000000000..af4a617ed --- /dev/null +++ b/src/main/java/com/hbm/entity/mob/siege/EntitySiegeTunneler.java @@ -0,0 +1,62 @@ +package com.hbm.entity.mob.siege; + +import com.hbm.entity.mob.EntityBurrowingBase; + +import net.minecraft.entity.IEntityLivingData; +import net.minecraft.entity.SharedMonsterAttributes; +import net.minecraft.entity.ai.attributes.AttributeModifier; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.EnumDifficulty; +import net.minecraft.world.World; + +public class EntitySiegeTunneler extends EntityBurrowingBase { + + public EntitySiegeTunneler(World world) { + super(world); + } + + @Override + protected void entityInit() { + super.entityInit(); + this.getDataWatcher().addObject(12, (int) 0); + } + + @Override + protected void applyEntityAttributes() { + super.applyEntityAttributes(); + this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(40.0D); + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(0.23D); + } + + public void setTier(SiegeTier tier) { + this.getDataWatcher().updateObject(12, tier.id); + + this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).applyModifier(new AttributeModifier("Tier Speed Mod", tier.speedMod, 1)); + this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(tier.health); + this.setHealth(this.getMaxHealth()); + } + + public SiegeTier getTier() { + SiegeTier tier = SiegeTier.tiers[this.getDataWatcher().getWatchableObjectInt(12)]; + return tier != null ? tier : SiegeTier.CLAY; + } + + @Override + public void writeEntityToNBT(NBTTagCompound nbt) { + super.writeEntityToNBT(nbt); + nbt.setInteger("siegeTier", this.getTier().id); + } + + @Override + public void readEntityFromNBT(NBTTagCompound nbt) { + super.readEntityFromNBT(nbt); + this.setTier(SiegeTier.tiers[nbt.getInteger("siegeTier")]); + } + + @Override + public IEntityLivingData onSpawnWithEgg(IEntityLivingData data) { + this.setTier(SiegeTier.tiers[rand.nextInt(SiegeTier.getLength())]); + this.addRandomArmor(); + return super.onSpawnWithEgg(data); + } +} diff --git a/src/main/java/com/hbm/entity/projectile/EntityRocketHoming.java b/src/main/java/com/hbm/entity/projectile/EntityRocketHoming.java index ad8e81171..b66d19177 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityRocketHoming.java +++ b/src/main/java/com/hbm/entity/projectile/EntityRocketHoming.java @@ -9,8 +9,11 @@ import java.util.Map; import com.hbm.entity.particle.EntityTSmokeFX; import com.hbm.explosion.ExplosionLarge; +import com.hbm.explosion.ExplosionNukeSmall; +import com.hbm.handler.radiation.ChunkRadiationManager; import com.hbm.items.ModItems; import com.hbm.lib.Library; +import com.hbm.main.ModEventHandler; import net.minecraft.block.Block; import net.minecraft.block.material.Material; @@ -19,6 +22,7 @@ import net.minecraft.entity.Entity; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.IProjectile; import net.minecraft.entity.monster.EntityEnderman; +import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; @@ -47,7 +51,17 @@ public class EntityRocketHoming extends Entity implements IProjectile private int ticksInAir; private double damage = 2.0D; private int knockbackStrength; + private float explosionStrength; private static final String __OBFID = "CL_00001715"; + + // specifies the type of stinger rocket that was fired + /* 0 = Normal + * 1 = HE + * 2 = Incendiary + * 4 = Nuclear + * 42 = bone-seeking + */ + public int type; public EntityRocketHoming(World p_i1753_1_) @@ -66,11 +80,12 @@ public class EntityRocketHoming extends Entity implements IProjectile this.yOffset = 0.0F; } - public EntityRocketHoming(World p_i1755_1_, EntityLivingBase p_i1755_2_, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_) + public EntityRocketHoming(World p_i1755_1_, EntityLivingBase p_i1755_2_, EntityLivingBase p_i1755_3_, float p_i1755_4_, float p_i1755_5_, int rocketType) { super(p_i1755_1_); this.renderDistanceWeight = 10.0D; this.shootingEntity = p_i1755_2_; + this.type = rocketType; if (p_i1755_2_ instanceof EntityPlayer) { @@ -96,11 +111,12 @@ public class EntityRocketHoming extends Entity implements IProjectile } } - public EntityRocketHoming(World p_i1756_1_, EntityLivingBase p_i1756_2_, float p_i1756_3_) + public EntityRocketHoming(World p_i1756_1_, EntityLivingBase p_i1756_2_, float p_i1756_3_, float strength, int type) { super(p_i1756_1_); this.renderDistanceWeight = 10.0D; this.shootingEntity = p_i1756_2_; + this.type = type; if (p_i1756_2_ instanceof EntityPlayer) { @@ -118,6 +134,7 @@ public class EntityRocketHoming extends Entity implements IProjectile this.motionZ = MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI); this.motionY = (-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI)); this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, p_i1756_3_ * 1.5F, 1.0F); + this.explosionStrength = strength; } public EntityRocketHoming(World world, int x, int y, int z, double mx, double my, double mz, double grav) { @@ -236,11 +253,9 @@ public class EntityRocketHoming extends Entity implements IProjectile if (this.inGround) { /*int j = this.worldObj.getBlockMetadata(this.field_145791_d, this.field_145792_e, this.field_145789_f); - if (block == this.field_145790_g && j == this.inData) { ++this.ticksInGround; - if (this.ticksInGround == 1200) { this.setDead(); @@ -260,7 +275,7 @@ public class EntityRocketHoming extends Entity implements IProjectile if (!this.worldObj.isRemote) { //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 2.5F, true); - ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, false, true); + Explode(this.type, this.explosionStrength); /*EntityNukeExplosionAdvanced explosion = new EntityNukeExplosionAdvanced(this.worldObj); explosion.speed = 25; explosion.coefficient = 5.0F; @@ -288,7 +303,8 @@ public class EntityRocketHoming extends Entity implements IProjectile Entity entity = null; List list = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); - double d0 = 0.0D; + System.out.println(list); + double d0 = 0.0D; int i; float f1; @@ -314,6 +330,7 @@ public class EntityRocketHoming extends Entity implements IProjectile } } } + if (entity != null) { @@ -394,7 +411,7 @@ public class EntityRocketHoming extends Entity implements IProjectile if (!this.worldObj.isRemote) { //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 2.5F, true); - ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, false, true); + Explode(this.type, this.explosionStrength); } this.setDead(); } @@ -404,7 +421,7 @@ public class EntityRocketHoming extends Entity implements IProjectile if (!this.worldObj.isRemote) { //this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 2.5F, true); - ExplosionLarge.explode(worldObj, posX, posY, posZ, 5, true, false, true); + Explode(this.type, this.explosionStrength); } this.setDead(); } @@ -459,12 +476,10 @@ public class EntityRocketHoming extends Entity implements IProjectile { this.prevRotationPitch += 360.0F; } - while (this.rotationYaw - this.prevRotationYaw < -180.0F) { this.prevRotationYaw -= 360.0F; } - while (this.rotationYaw - this.prevRotationYaw >= 180.0F) { this.prevRotationYaw += 360.0F; @@ -508,7 +523,13 @@ public class EntityRocketHoming extends Entity implements IProjectile boolean hasBeeped = false; private boolean steer() { - List all = worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(posX - homingRadius, posY - homingRadius, posZ - homingRadius, posX + homingRadius, posY + homingRadius, posZ + homingRadius)); + List all = null; + if(this.type == 42) { + all = worldObj.getEntitiesWithinAABB(EntitySkeleton.class, AxisAlignedBB.getBoundingBox(posX - homingRadius, posY - homingRadius, posZ - homingRadius, posX + homingRadius, posY + homingRadius, posZ + homingRadius)); + } else { + all = worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(posX - homingRadius, posY - homingRadius, posZ - homingRadius, posX + homingRadius, posY + homingRadius, posZ + homingRadius)); + } + HashMap targetable = new HashMap(); Vec3 path = Vec3.createVectorHelper(motionX, motionY, motionZ); double startSpeed = path.lengthVector(); @@ -598,6 +619,8 @@ public class EntityRocketHoming extends Entity implements IProjectile p_70014_1_.setByte("inGround", (byte)(this.inGround ? 1 : 0)); p_70014_1_.setByte("pickup", (byte)this.canBePickedUp); p_70014_1_.setDouble("damage", this.damage); + p_70014_1_.setFloat("strength", (byte)this.explosionStrength); + p_70014_1_.setByte("type", (byte)this.type); } /** @@ -614,6 +637,8 @@ public class EntityRocketHoming extends Entity implements IProjectile this.inData = p_70037_1_.getByte("inData") & 255; this.arrowShake = p_70037_1_.getByte("shake") & 255; this.inGround = p_70037_1_.getByte("inGround") == 1; + this.explosionStrength = p_70037_1_.getFloat("strength"); + this.type = p_70037_1_.getByte("type"); if (p_70037_1_.hasKey("damage", 99)) { @@ -640,7 +665,7 @@ public class EntityRocketHoming extends Entity implements IProjectile { boolean flag = this.canBePickedUp == 1 || this.canBePickedUp == 2 && p_70100_1_.capabilities.isCreativeMode; - if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.gun_stinger_ammo, 1))) + if (this.canBePickedUp == 1 && !p_70100_1_.inventory.addItemStackToInventory(new ItemStack(ModItems.ammo_stinger_rocket, 1))) { flag = false; } @@ -722,4 +747,18 @@ public class EntityRocketHoming extends Entity implements IProjectile byte b0 = this.dataWatcher.getWatchableObjectByte(16); return (b0 & 1) != 0; } + + public void Explode(int type, float strength) { + switch(type) { + case 42: ChunkRadiationManager.proxy.incrementRad(worldObj, (int)posX, (int)posY, (int)posZ, 2000); + case 0: ExplosionLarge.explode(worldObj, posX, posY, posZ, strength, true, false, true); break; + case 1: ExplosionLarge.explode(worldObj, posX, posY, posZ, strength * 2, true, false, true); break; + case 2: ExplosionLarge.explodeFire(worldObj, posX, posY, posZ, strength, true, false, false); break; + case 4: + ExplosionLarge.explode(worldObj, posX, posY, posZ, strength * 3, false, false, true); + ExplosionNukeSmall.explode(worldObj, posX, posY, posZ, (int)strength * 5); + break; + default: break; + } + } } \ No newline at end of file diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index 4eeb754f5..a4e6294a1 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -189,6 +189,12 @@ public class BulletConfigSyncingUtil { public static int ROCKET_CHAINSAW_LASER = i++; public static int ROCKET_TOXIC_LASER = i++; public static int ROCKET_PHOSPHORUS_LASER = i++; + + public static int ROCKET_STINGER = i++; + public static int ROCKET_STINGER_HE = i++; + public static int ROCKET_STINGER_INCENDIARY = i++; + public static int ROCKET_STINGER_NUCLEAR = i++; + public static int ROCKET_STINGER_BONES = i++; public static int SHELL_NORMAL = i++; public static int SHELL_EXPLOSIVE = i++; @@ -284,6 +290,12 @@ public class BulletConfigSyncingUtil { configSet.put(ROCKET_TOXIC, GunRocketFactory.getRocketChlorineConfig()); configSet.put(ROCKET_CANISTER, GunRocketFactory.getRocketCanisterConfig()); configSet.put(ROCKET_ERROR, GunRocketFactory.getRocketErrorConfig()); + + configSet.put(ROCKET_STINGER, GunRocketHomingFactory.getRocketStingerConfig()); + configSet.put(ROCKET_STINGER_HE, GunRocketHomingFactory.getRocketStingerHEConfig()); + configSet.put(ROCKET_STINGER_INCENDIARY, GunRocketHomingFactory.getRocketStingerIncendiaryConfig()); + configSet.put(ROCKET_STINGER_NUCLEAR, GunRocketHomingFactory.getRocketStingerNuclearConfig()); + configSet.put(ROCKET_STINGER_BONES, GunRocketHomingFactory.getRocketStingerBonesConfig()); configSet.put(GRENADE_NORMAL, GunGrenadeFactory.getGrenadeConfig()); configSet.put(GRENADE_HE, GunGrenadeFactory.getGrenadeHEConfig()); diff --git a/src/main/java/com/hbm/handler/GUIHandler.java b/src/main/java/com/hbm/handler/GUIHandler.java index 777539fab..ecd3b0313 100644 --- a/src/main/java/com/hbm/handler/GUIHandler.java +++ b/src/main/java/com/hbm/handler/GUIHandler.java @@ -217,13 +217,6 @@ public class GUIHandler implements IGuiHandler { return null; } - case ModBlocks.guiID_converter_rf_he: { - if(entity instanceof TileEntityConverterRfHe) { - return new ContainerConverterRfHe(player.inventory, (TileEntityConverterRfHe) entity); - } - return null; - } - case ModBlocks.guiID_schrabidium_transmutator: { if(entity instanceof TileEntityMachineSchrabidiumTransmutator) { return new ContainerMachineSchrabidiumTransmutator(player.inventory, (TileEntityMachineSchrabidiumTransmutator) entity); @@ -1066,13 +1059,6 @@ public class GUIHandler implements IGuiHandler { return null; } - case ModBlocks.guiID_converter_rf_he: { - if(entity instanceof TileEntityConverterRfHe) { - return new GUIConverterRfHe(player.inventory, (TileEntityConverterRfHe) entity); - } - return null; - } - case ModBlocks.guiID_schrabidium_transmutator: { if(entity instanceof TileEntityMachineSchrabidiumTransmutator) { return new GUIMachineSchrabidiumTransmutator(player.inventory, (TileEntityMachineSchrabidiumTransmutator) entity); diff --git a/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java b/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java new file mode 100644 index 000000000..4a4b1f43a --- /dev/null +++ b/src/main/java/com/hbm/handler/guncfg/GunRocketHomingFactory.java @@ -0,0 +1,272 @@ +package com.hbm.handler.guncfg; + +import java.util.ArrayList; + +import com.hbm.entity.projectile.EntityBulletBase; +import com.hbm.entity.projectile.EntityRocket; +import com.hbm.entity.projectile.EntityRocketHoming; +import com.hbm.handler.BulletConfigSyncingUtil; +import com.hbm.handler.BulletConfiguration; +import com.hbm.handler.GunConfiguration; +import com.hbm.interfaces.IBulletUpdateBehavior; +import com.hbm.items.ModItems; +import com.hbm.render.util.RenderScreenOverlay.Crosshair; + +import net.minecraft.entity.player.EntityPlayer; + +public class GunRocketHomingFactory { + + public static GunConfiguration getStingerConfig() { + + GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 20; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_MANUAL; + config.reloadDuration = 20; + config.firingDuration = 0; + config.ammoCap = 1; + config.reloadType = GunConfiguration.RELOAD_SINGLE; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_KRUCK; + config.firingSound = "hbm:weapon.rpgShoot"; + config.reloadSound = GunConfiguration.RSOUND_LAUNCHER; + config.reloadSoundEnd = false; + + config.name = "FIM-92 Stinger man-portable air-defense system"; + config.manufacturer = "Raytheon Missile Systems"; + config.comment.add("Woosh, beep-beep-beep!"); + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_HE); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_INCENDIARY); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_NUCLEAR); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_BONES); + config.durability = 250; + + return config; + } + + public static GunConfiguration getSkyStingerConfig() { +GunConfiguration config = new GunConfiguration(); + + config.rateOfFire = 20; + config.roundsPerCycle = 1; + config.gunMode = GunConfiguration.MODE_NORMAL; + config.firingMode = GunConfiguration.FIRE_MANUAL; + config.reloadDuration = 20; + config.firingDuration = 0; + config.ammoCap = 1; + config.reloadType = GunConfiguration.RELOAD_SINGLE; + config.allowsInfinity = true; + config.crosshair = Crosshair.L_KRUCK; + config.firingSound = "hbm:weapon.rpgShoot"; + config.reloadSound = GunConfiguration.RSOUND_LAUNCHER; + config.reloadSoundEnd = false; + + config.name = "The One Sky Stinger"; + config.manufacturer = "Equestria Missile Systems"; + config.comment.add("Oh, I get it, because of the...nyeees!"); + config.comment.add("It all makes sense now!"); + config.comment.add(""); + config.comment.add("Rockets travel faster, are Three times stronger"); + config.comment.add("and fires a second rocket for free"); + config.comment.add(""); + config.comment.add("[LEGENDARY WEAPON]"); + + config.config = new ArrayList(); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_HE); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_INCENDIARY); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_NUCLEAR); + config.config.add(BulletConfigSyncingUtil.ROCKET_STINGER_BONES); + config.durability = 1000; + + return config; + } + + public static BulletConfiguration getRocketStingerConfig() { + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_stinger_rocket; + bullet.dmgMin = 20; + bullet.dmgMax = 25; + bullet.explosive = 4F; + bullet.trail = 0; + + bullet.bUpdate = new IBulletUpdateBehavior() { + + @Override + public void behaveUpdate(EntityBulletBase bullet) { + + if(!bullet.worldObj.isRemote) { + + EntityPlayer player = bullet.worldObj.getClosestPlayerToEntity(bullet, -1.0D); + EntityRocketHoming rocket = new EntityRocketHoming(bullet.worldObj, player, 1.0F, 5.0F, 0); + if(player.getHeldItem().getItem() == ModItems.gun_skystinger && !player.isSneaking()) { + EntityRocketHoming rocket2 = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 0); + rocket = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 0); + rocket.setIsCritical(true); + rocket2.setIsCritical(true); + bullet.worldObj.spawnEntityInWorld(rocket2); + } + rocket.homingMod = 5; + rocket.homingRadius = 25; + bullet.worldObj.spawnEntityInWorld(rocket); + bullet.setDead(); + + } + } + }; + return bullet; + } + + public static BulletConfiguration getRocketStingerHEConfig() { + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_stinger_rocket_he; + bullet.dmgMin = 30; + bullet.dmgMax = 35; + bullet.explosive = 8F; + bullet.trail = 0; + bullet.wear = 15; + + bullet.bUpdate = new IBulletUpdateBehavior() { + + @Override + public void behaveUpdate(EntityBulletBase bullet) { + + if(!bullet.worldObj.isRemote) { + + EntityPlayer player = bullet.worldObj.getClosestPlayerToEntity(bullet, -1.0D); + EntityRocketHoming rocket = new EntityRocketHoming(bullet.worldObj, player, 1.0F, 5.0F, 1); + if(player.getHeldItem().getItem() == ModItems.gun_skystinger && !player.isSneaking()) { + EntityRocketHoming rocket2 = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 1); + rocket = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 1); + rocket.setIsCritical(true); + rocket2.setIsCritical(true); + bullet.worldObj.spawnEntityInWorld(rocket2); + } + rocket.homingMod = 5; + rocket.homingRadius = 25; + bullet.worldObj.spawnEntityInWorld(rocket); + bullet.setDead(); + + } + } + }; + return bullet; + } + + public static BulletConfiguration getRocketStingerIncendiaryConfig() { + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_stinger_rocket_incendiary; + bullet.dmgMin = 15; + bullet.dmgMax = 20; + bullet.explosive = 4F; + bullet.trail = 0; + bullet.wear = 12; + + bullet.bUpdate = new IBulletUpdateBehavior() { + + @Override + public void behaveUpdate(EntityBulletBase bullet) { + + if(!bullet.worldObj.isRemote) { + + EntityPlayer player = bullet.worldObj.getClosestPlayerToEntity(bullet, -1.0D); + EntityRocketHoming rocket = new EntityRocketHoming(bullet.worldObj, player, 1.0F, 5.0F, 2); + if(player.getHeldItem().getItem() == ModItems.gun_skystinger && !player.isSneaking()) { + EntityRocketHoming rocket2 = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 2); + rocket = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 2); + rocket.setIsCritical(true); + rocket2.setIsCritical(true); + bullet.worldObj.spawnEntityInWorld(rocket2); + } + rocket.homingMod = 5; + rocket.homingRadius = 25; + bullet.worldObj.spawnEntityInWorld(rocket); + bullet.setDead(); + + } + } + }; + return bullet; + } + + public static BulletConfiguration getRocketStingerNuclearConfig() { + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_stinger_rocket_nuclear; + bullet.dmgMin = 50; + bullet.dmgMax = 55; + bullet.explosive = 15F; + bullet.trail = 0; + bullet.wear = 30; + + bullet.bUpdate = new IBulletUpdateBehavior() { + + @Override + public void behaveUpdate(EntityBulletBase bullet) { + + if(!bullet.worldObj.isRemote) { + + EntityPlayer player = bullet.worldObj.getClosestPlayerToEntity(bullet, -1.0D); + EntityRocketHoming rocket = new EntityRocketHoming(bullet.worldObj, player, 1.0F, 5.0F, 4); + if(player.getHeldItem().getItem() == ModItems.gun_skystinger && !player.isSneaking()) { + EntityRocketHoming rocket2 = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 4); + rocket = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 4); + rocket.setIsCritical(true); + rocket2.setIsCritical(true); + bullet.worldObj.spawnEntityInWorld(rocket2); + } + rocket.homingMod = 5; + rocket.homingRadius = 25; + bullet.worldObj.spawnEntityInWorld(rocket); + bullet.setDead(); + + } + } + }; + return bullet; + } + + public static BulletConfiguration getRocketStingerBonesConfig() { + BulletConfiguration bullet = BulletConfigFactory.standardRocketConfig(); + + bullet.ammo = ModItems.ammo_stinger_rocket_bones; + bullet.dmgMin = 20; + bullet.dmgMax = 25; + bullet.explosive = 8F; + bullet.trail = 0; + + bullet.bUpdate = new IBulletUpdateBehavior() { + + @Override + public void behaveUpdate(EntityBulletBase bullet) { + + if(!bullet.worldObj.isRemote) { + + EntityPlayer player = bullet.worldObj.getClosestPlayerToEntity(bullet, -1.0D); + EntityRocketHoming rocket = new EntityRocketHoming(bullet.worldObj, player, 1.0F, 5.0F, 42); + if(player.getHeldItem().getItem() == ModItems.gun_skystinger && !player.isSneaking()) { + EntityRocketHoming rocket2 = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 42); + rocket = new EntityRocketHoming(bullet.worldObj, player, 1.5F, 15.0F, 42); + rocket.setIsCritical(true); + rocket2.setIsCritical(true); + bullet.worldObj.spawnEntityInWorld(rocket2); + } + rocket.homingMod = 5; + rocket.homingRadius = 25; + bullet.worldObj.spawnEntityInWorld(rocket); + bullet.setDead(); + + } + } + }; + return bullet; + } +} \ No newline at end of file diff --git a/src/main/java/com/hbm/inventory/container/ContainerConverterRfHe.java b/src/main/java/com/hbm/inventory/container/ContainerConverterRfHe.java deleted file mode 100644 index a6f7fb286..000000000 --- a/src/main/java/com/hbm/inventory/container/ContainerConverterRfHe.java +++ /dev/null @@ -1,69 +0,0 @@ -package com.hbm.inventory.container; - -import com.hbm.tileentity.machine.TileEntityConverterRfHe; - -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.inventory.Container; -import net.minecraft.inventory.ICrafting; -import net.minecraft.item.ItemStack; - -public class ContainerConverterRfHe extends Container { - - private TileEntityConverterRfHe diFurnace; - - private int water; - private int flux; - - public ContainerConverterRfHe(InventoryPlayer invPlayer, TileEntityConverterRfHe tedf) { - - diFurnace = tedf; - } - - @Override - public void addCraftingToCrafters(ICrafting crafting) { - super.addCraftingToCrafters(crafting); - crafting.sendProgressBarUpdate(this, 1, this.diFurnace.storage.getEnergyStored()); - } - - @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int p_82846_2_) - { - return null; - } - - @Override - public boolean canInteractWith(EntityPlayer player) { - return true; - } - - @Override - public void detectAndSendChanges() { - super.detectAndSendChanges(); - - for(int i = 0; i < this.crafters.size(); i++) - { - ICrafting par1 = (ICrafting)this.crafters.get(i); - - if(this.flux != this.diFurnace.storage.getEnergyStored()) - { - par1.sendProgressBarUpdate(this, 1, this.diFurnace.storage.getEnergyStored()); - } - } - - this.flux = this.diFurnace.storage.getEnergyStored(); - } - - @Override - public void updateProgressBar(int i, int j) { - if(i == 0) - { - diFurnace.power = j; - } - if(i == 1) - { - diFurnace.storage.setEnergyStored(j); - } - } - -} diff --git a/src/main/java/com/hbm/inventory/gui/GUIConverterRfHe.java b/src/main/java/com/hbm/inventory/gui/GUIConverterRfHe.java deleted file mode 100644 index 4e49bac3c..000000000 --- a/src/main/java/com/hbm/inventory/gui/GUIConverterRfHe.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.hbm.inventory.gui; - -import org.lwjgl.opengl.GL11; - -import com.hbm.inventory.container.ContainerConverterRfHe; -import com.hbm.lib.RefStrings; -import com.hbm.tileentity.machine.TileEntityConverterRfHe; - -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.inventory.GuiContainer; -import net.minecraft.entity.player.InventoryPlayer; -import net.minecraft.util.ResourceLocation; - -public class GUIConverterRfHe extends GuiContainer { - - private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/gui_rf_he_converter.png"); - private TileEntityConverterRfHe diFurnace; - - public GUIConverterRfHe(InventoryPlayer invPlayer, TileEntityConverterRfHe tedf) { - super(new ContainerConverterRfHe(invPlayer, tedf)); - diFurnace = tedf; - - this.xSize = 176; - this.ySize = 86; - } - - @Override - protected void drawGuiContainerForegroundLayer(int i, int j) { - } - - @Override - protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - Minecraft.getMinecraft().getTextureManager().bindTexture(texture); - drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - - if(diFurnace.power > 0) { - int i = (int)diFurnace.getPowerScaled(52); - drawTexturedModalRect(guiLeft + 136, guiTop + 69 - i, 188, 52 - i, 12, i); - } - - if(diFurnace.storage.getEnergyStored() > 0) { - int i = diFurnace.getFluxScaled(52); - drawTexturedModalRect(guiLeft + 28, guiTop + 69 - i, 176, 52 - i, 12, i); - } - } -} diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 77da9e1fc..89ae5bc93 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1550,6 +1550,11 @@ public class ModItems { public static Item ammo_dart; public static Item ammo_dart_nuclear; public static Item ammo_dart_nerf; + public static Item ammo_stinger_rocket; + public static Item ammo_stinger_rocket_he; + public static Item ammo_stinger_rocket_incendiary; + public static Item ammo_stinger_rocket_nuclear; + public static Item ammo_stinger_rocket_bones; public static Item gun_rpg; public static Item gun_rpg_ammo; @@ -4176,6 +4181,11 @@ public class ModItems { ammo_dart = new ItemAmmo().setUnlocalizedName("ammo_dart"); ammo_dart_nuclear = new ItemAmmo().setUnlocalizedName("ammo_dart_nuclear"); ammo_dart_nerf = new ItemAmmo().setUnlocalizedName("ammo_dart_nerf"); + ammo_stinger_rocket = new ItemAmmo().setUnlocalizedName("ammo_stinger_rocket"); + ammo_stinger_rocket_he = new ItemAmmo().setUnlocalizedName("ammo_stinger_rocket_he"); + ammo_stinger_rocket_incendiary = new ItemAmmo().setUnlocalizedName("ammo_stinger_rocket_incendiary"); + ammo_stinger_rocket_nuclear = new ItemAmmo().setUnlocalizedName("ammo_stinger_rocket_nuclear"); + ammo_stinger_rocket_bones = new ItemAmmo().setUnlocalizedName("ammo_stinger_rocket_bones"); gun_rpg = new ItemGunBase(GunRocketFactory.getGustavConfig()).setUnlocalizedName("gun_rpg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_rpg"); gun_karl = new ItemGunBase(GunRocketFactory.getKarlConfig()).setUnlocalizedName("gun_karl").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_karl"); @@ -4183,9 +4193,8 @@ public class ModItems { gun_quadro = new ItemGunBase(GunRocketFactory.getQuadroConfig()).setUnlocalizedName("gun_quadro").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_quadro"); gun_rpg_ammo = new Item().setUnlocalizedName("gun_rpg_ammo").setCreativeTab(null).setTextureName(RefStrings.MODID + ":gun_rpg_ammo_alt"); gun_hk69 = new ItemGunBase(GunGrenadeFactory.getHK69Config()).setUnlocalizedName("gun_hk69").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_hk69"); - gun_stinger = new GunStinger().setUnlocalizedName("gun_stinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_stinger"); - gun_skystinger = new GunStinger().setUnlocalizedName("gun_skystinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_skystinger"); - gun_stinger_ammo = new Item().setUnlocalizedName("gun_stinger_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_stinger_ammo"); + gun_stinger = new ItemGunBase(GunRocketHomingFactory.getStingerConfig()).setUnlocalizedName("gun_stinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_stinger"); + gun_skystinger = new ItemGunBase(GunRocketHomingFactory.getSkyStingerConfig()).setUnlocalizedName("gun_skystinger").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_skystinger"); gun_stinger_ammo = new Item().setUnlocalizedName("gun_stinger_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_stinger_ammo"); gun_revolver_ammo = new Item().setUnlocalizedName("gun_revolver_ammo").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_ammo"); gun_revolver = new ItemGunBase(Gun357MagnumFactory.getRevolverConfig()).setUnlocalizedName("gun_revolver").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver"); gun_revolver_saturnite = new ItemGunBase(Gun357MagnumFactory.getRevolverSaturniteConfig()).setUnlocalizedName("gun_revolver_saturnite").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_revolver_saturnite"); @@ -7112,6 +7121,11 @@ public class ModItems { GameRegistry.registerItem(ammo_rocket_nuclear, ammo_rocket_nuclear.getUnlocalizedName()); GameRegistry.registerItem(ammo_rocket_rpc, ammo_rocket_rpc.getUnlocalizedName()); GameRegistry.registerItem(ammo_rocket_digamma, ammo_rocket_digamma.getUnlocalizedName()); + GameRegistry.registerItem(ammo_stinger_rocket, ammo_stinger_rocket.getUnlocalizedName()); + GameRegistry.registerItem(ammo_stinger_rocket_he, ammo_stinger_rocket_he.getUnlocalizedName()); + GameRegistry.registerItem(ammo_stinger_rocket_incendiary, ammo_stinger_rocket_incendiary.getUnlocalizedName()); + GameRegistry.registerItem(ammo_stinger_rocket_nuclear, ammo_stinger_rocket_nuclear.getUnlocalizedName()); + GameRegistry.registerItem(ammo_stinger_rocket_bones, ammo_stinger_rocket_bones.getUnlocalizedName()); GameRegistry.registerItem(ammo_grenade, ammo_grenade.getUnlocalizedName()); GameRegistry.registerItem(ammo_grenade_he, ammo_grenade_he.getUnlocalizedName()); GameRegistry.registerItem(ammo_grenade_incendiary, ammo_grenade_incendiary.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/GunStinger.java b/src/main/java/com/hbm/items/weapon/GunStinger.java deleted file mode 100644 index 781a1ddda..000000000 --- a/src/main/java/com/hbm/items/weapon/GunStinger.java +++ /dev/null @@ -1,166 +0,0 @@ -package com.hbm.items.weapon; - -import java.util.List; - -import com.google.common.collect.Multimap; -import com.hbm.entity.projectile.EntityRocketHoming; -import com.hbm.items.ModItems; - -import net.minecraft.enchantment.Enchantment; -import net.minecraft.enchantment.EnchantmentHelper; -import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.entity.ai.attributes.AttributeModifier; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.EnumAction; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.world.World; -import net.minecraftforge.common.MinecraftForge; -import net.minecraftforge.event.entity.player.ArrowLooseEvent; -import net.minecraftforge.event.entity.player.ArrowNockEvent; - -public class GunStinger extends Item { - - public GunStinger() - { - this.maxStackSize = 1; - if(this == ModItems.gun_stinger) - this.setMaxDamage(500); - if(this == ModItems.gun_skystinger) - this.setMaxDamage(1000); - } - - @Override - public void onPlayerStoppedUsing(ItemStack p_77615_1_, World p_77615_2_, EntityPlayer p_77615_3_, int p_77615_4_) { - int j = this.getMaxItemUseDuration(p_77615_1_) - p_77615_4_; - - ArrowLooseEvent event = new ArrowLooseEvent(p_77615_3_, p_77615_1_, j); - MinecraftForge.EVENT_BUS.post(event); - if (event.isCanceled()) { - return; - } - j = event.charge; - - boolean flag = p_77615_3_.capabilities.isCreativeMode - || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, p_77615_1_) > 0; - - if (flag || p_77615_3_.inventory.hasItem(ModItems.gun_stinger_ammo)) { - float f = j / 20.0F; - f = (f * f + f * 2.0F) / 3.0F; - - if (j < 25.0D) { - return; - } - - if (j > 25.0F) { - f = 25.0F; - } - - p_77615_1_.damageItem(1, p_77615_3_); - - if(this == ModItems.gun_stinger) - p_77615_2_.playSoundAtEntity(p_77615_3_, "hbm:weapon.rpgShoot", 1.0F, 1.0F); - if(this == ModItems.gun_skystinger) - p_77615_2_.playSoundAtEntity(p_77615_3_, "hbm:weapon.rpgShoot", 1.0F, 0.5F); - - p_77615_3_.inventory.consumeInventoryItem(ModItems.gun_stinger_ammo); - - if (!p_77615_2_.isRemote) { - if(this == ModItems.gun_stinger) { - EntityRocketHoming entityarrow = new EntityRocketHoming(p_77615_2_, p_77615_3_, 1.0F); - if(p_77615_3_.isSneaking()) - entityarrow.homingRadius = 0; - p_77615_2_.spawnEntityInWorld(entityarrow); - } - - if(this == ModItems.gun_skystinger) { - - if(p_77615_3_.isSneaking()) { - EntityRocketHoming entityarrow = new EntityRocketHoming(p_77615_2_, p_77615_3_, 1.5F); - EntityRocketHoming entityarrow1 = new EntityRocketHoming(p_77615_2_, p_77615_3_, 1.5F); - entityarrow.homingMod = 12; - entityarrow1.homingMod = 12; - entityarrow.motionX += p_77615_2_.rand.nextGaussian() * 0.2; - entityarrow.motionY += p_77615_2_.rand.nextGaussian() * 0.2; - entityarrow.motionZ += p_77615_2_.rand.nextGaussian() * 0.2; - entityarrow1.motionX += p_77615_2_.rand.nextGaussian() * 0.2; - entityarrow1.motionY += p_77615_2_.rand.nextGaussian() * 0.2; - entityarrow1.motionZ += p_77615_2_.rand.nextGaussian() * 0.2; - entityarrow.setIsCritical(true); - entityarrow1.setIsCritical(true); - p_77615_2_.spawnEntityInWorld(entityarrow); - p_77615_2_.spawnEntityInWorld(entityarrow1); - } else { - EntityRocketHoming entityarrow = new EntityRocketHoming(p_77615_2_, p_77615_3_, 2.0F); - entityarrow.homingMod = 8; - entityarrow.homingRadius *= 50; - entityarrow.setIsCritical(true); - p_77615_2_.spawnEntityInWorld(entityarrow); - } - } - } - } - } - - @Override - public ItemStack onEaten(ItemStack p_77654_1_, World p_77654_2_, EntityPlayer p_77654_3_) { - return p_77654_1_; - } - - @Override - public int getMaxItemUseDuration(ItemStack p_77626_1_) { - return 72000; - } - - @Override - public EnumAction getItemUseAction(ItemStack p_77661_1_) { - return EnumAction.bow; - } - - @Override - public ItemStack onItemRightClick(ItemStack p_77659_1_, World p_77659_2_, EntityPlayer p_77659_3_) { - ArrowNockEvent event = new ArrowNockEvent(p_77659_3_, p_77659_1_); - MinecraftForge.EVENT_BUS.post(event); - - p_77659_3_.setItemInUse(p_77659_1_, this.getMaxItemUseDuration(p_77659_1_)); - - return p_77659_1_; - } - - @Override - public int getItemEnchantability() { - return 1; - } - - @Override - public void addInformation(ItemStack itemstack, EntityPlayer player, List list, boolean bool) { - - if(this == ModItems.gun_stinger) { - list.add("Woosh, beep-beep-beep!"); - list.add(""); - list.add("Ammo: Stinger Rockets"); - list.add("Projectiles target entities."); - list.add("Projectiles explode on impact."); - list.add("Alt-fire disables homing effect."); - } - if(this == ModItems.gun_skystinger) { - list.add("Oh, I get it, because of the...nyeees!"); - list.add("It all makes sense now!"); - list.add(""); - list.add("Ammo: Stinger Rockets"); - list.add("Projectiles target entities."); - list.add("Projectiles explode on impact."); - list.add("Alt-fire fires a second rocket for free."); - list.add(""); - list.add("[LEGENDARY WEAPON]"); - } - } - - @Override - public Multimap getItemAttributeModifiers() { - Multimap multimap = super.getItemAttributeModifiers(); - multimap.put(SharedMonsterAttributes.attackDamage.getAttributeUnlocalizedName(), - new AttributeModifier(field_111210_e, "Weapon modifier", 4, 0)); - return multimap; - } -} diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 964666e89..10618cde6 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -589,6 +589,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntitySiegeUFO.class, new RenderSiegeUFO()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeCraft.class, new RenderSiegeCraft()); RenderingRegistry.registerEntityRenderingHandler(EntitySiegeSkeleton.class, new RenderSiegeSkeleton()); + RenderingRegistry.registerEntityRenderingHandler(EntitySiegeTunneler.class, new RenderSiegeTunneler()); RenderingRegistry.registerEntityRenderingHandler(EntityGhost.class, new RenderGhost()); //"particles" RenderingRegistry.registerEntityRenderingHandler(EntitySmokeFX.class, new MultiCloudRenderer(new Item[] { ModItems.smoke1, ModItems.smoke2, ModItems.smoke3, ModItems.smoke4, ModItems.smoke5, ModItems.smoke6, ModItems.smoke7, ModItems.smoke8 })); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 15a003f98..f7831f75c 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -496,6 +496,7 @@ public class MainRegistry { EntityRegistry.registerGlobalEntityID(EntitySiegeSkeleton.class, "entity_meme_skeleton", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x000080); EntityRegistry.registerGlobalEntityID(EntitySiegeUFO.class, "entity_meme_ufo", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x800000); EntityRegistry.registerGlobalEntityID(EntitySiegeCraft.class, "entity_meme_craft", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x808000); + EntityRegistry.registerGlobalEntityID(EntitySiegeTunneler.class, "entity_meme_tunneler", EntityRegistry.findGlobalUniqueEntityId(), 0x303030, 0x008080); EntityRegistry.registerModEntity(EntitySPV.class, "entity_self_propelled_vehicle_mark_1", 160, this, 1000, 1, true); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 2e7c7e33b..13ed5a233 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -52,6 +52,7 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom.CustomNukeEntry; import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumEntryType; import com.hbm.tileentity.machine.TileEntityNukeFurnace; import com.hbm.util.I18nUtil; +import com.hbm.util.LoggingUtil; import com.hbm.util.ArmorRegistry; import com.hbm.util.ArmorUtil; import com.hbm.util.ArmorRegistry.HazardClass; @@ -647,13 +648,13 @@ public class ModEventHandlerClient { if(mc.gameSettings.renderDistanceChunks > 16 && GeneralConfig.enableRenderDistCheck && ! FMLClientHandler.instance().hasOptifine()) { mc.gameSettings.renderDistanceChunks = 16; - MainRegistry.logger.error("========================== WARNING =========================="); - MainRegistry.logger.error("Dangerous render distance detected: Values over 16 only work on 1.8+ or with Optifine installed!!"); - MainRegistry.logger.error("Set '1.25_enableRenderDistCheck' in hbm.cfg to 'false' to disable this check."); - MainRegistry.logger.error("========================== WARNING =========================="); - MainRegistry.logger.error("If you got this error after removing Optifine: Consider deleting your option files after removing mods."); - MainRegistry.logger.error("If you got this error after downgrading your Minecraft version: Consider using a launcher that doesn't reuse the same folders for every game instance. MultiMC for example, it's really good and it comes with a dedicated cat button. You like cats, right? Are you using the Microsoft launcher? The one launcher that turns every version switch into a tightrope act because all the old config and options files are still here because different instances all use the same folder structure instead of different folders like a competent launcher would, because some MO-RON thought that this was an acceptable way of doing things? Really? The launcher that circumcises every crashlog into indecipherable garbage, tricking oblivious people into posting that as a \"crash report\", effectively wasting everyone's time? The launcher made by the company that thought it would be HI-LA-RI-OUS to force everyone to use Microsoft accounts, effectively breaking every other launcher until they implement their terrible auth system?"); - MainRegistry.logger.error("========================== WARNING =========================="); + LoggingUtil.errorWithHighlight("========================== WARNING =========================="); + LoggingUtil.errorWithHighlight("Dangerous render distance detected: Values over 16 only work on 1.8+ or with Optifine installed!!"); + LoggingUtil.errorWithHighlight("Set '1.25_enableRenderDistCheck' in hbm.cfg to 'false' to disable this check."); + LoggingUtil.errorWithHighlight("========================== WARNING =========================="); + LoggingUtil.errorWithHighlight("If you got this error after removing Optifine: Consider deleting your option files after removing mods."); + LoggingUtil.errorWithHighlight("If you got this error after downgrading your Minecraft version: Consider using a launcher that doesn't reuse the same folders for every game instance. MultiMC for example, it's really good and it comes with a dedicated cat button. You like cats, right? Are you using the Microsoft launcher? The one launcher that turns every version switch into a tightrope act because all the old config and options files are still here because different instances all use the same folder structure instead of different folders like a competent launcher would, because some MO-RON thought that this was an acceptable way of doing things? Really? The launcher that circumcises every crashlog into indecipherable garbage, tricking oblivious people into posting that as a \"crash report\", effectively wasting everyone's time? The launcher made by the company that thought it would be HI-LA-RI-OUS to force everyone to use Microsoft accounts, effectively breaking every other launcher until they implement their terrible auth system?"); + LoggingUtil.errorWithHighlight("========================== WARNING =========================="); } if(mc.theWorld == null || mc.thePlayer == null) diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 7267f245c..61d2c1dcf 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -602,6 +602,7 @@ public class ResourceManager { public static final IModelCustom ff_nightmare = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/nightmare.obj")); public static final IModelCustom fireext = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/fireext.obj")); public static final IModelCustom ar15 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/ar15.obj")); + public static final IModelCustom stinger = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/stinger.obj")); public static final IModelCustom mg42 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/mg42.obj")); public static final IModelCustom rem700 = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/rem700.obj")); public static final IModelCustom cursed_revolver = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/weapons/cursed.obj")); @@ -668,6 +669,8 @@ public class ResourceManager { public static final ResourceLocation fireext_foam_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/fireext_foam.png"); public static final ResourceLocation fireext_sand_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/fireext_sand.png"); public static final ResourceLocation ar15_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/carbine.png"); + public static final ResourceLocation stinger_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/stinger.png"); + public static final ResourceLocation sky_stinger_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sky_stinger.png"); public static final ResourceLocation mg42_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/ff/mg42.png"); public static final ResourceLocation rem700_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/ff/rem700.png"); diff --git a/src/main/java/com/hbm/render/entity/mob/RenderSiegeTunneler.java b/src/main/java/com/hbm/render/entity/mob/RenderSiegeTunneler.java new file mode 100644 index 000000000..1a4eed429 --- /dev/null +++ b/src/main/java/com/hbm/render/entity/mob/RenderSiegeTunneler.java @@ -0,0 +1,45 @@ +package com.hbm.render.entity.mob; + +import org.lwjgl.opengl.GL11; + +import com.hbm.lib.RefStrings; +import com.hbm.render.loader.HFRWavefrontObject; + +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.entity.Entity; +import net.minecraft.util.ResourceLocation; +import net.minecraftforge.client.model.IModelCustom; + +public class RenderSiegeTunneler extends Render { + + public RenderSiegeTunneler() { + this.shadowOpaque = 0.0F; + } + + public static final IModelCustom body = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/mobs/tunneler.obj")); + public static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID, "textures/entity/siege_drill.png"); + + @Override + public void doRender(Entity entity, double x, double y, double z, float f0, float f1) { + + GL11.glPushMatrix(); + GL11.glTranslated(x, y, z); + + GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * f1 - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * f1 - 90, 0.0F, 0.0F, 1.0F); + + this.bindEntityTexture(entity); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_CULL_FACE); + body.renderAll(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + } + + @Override + protected ResourceLocation getEntityTexture(Entity p_110775_1_) { + return texture; + } +} diff --git a/src/main/java/com/hbm/render/item/weapon/ItemRenderStinger.java b/src/main/java/com/hbm/render/item/weapon/ItemRenderStinger.java index b458e447a..a2ac27531 100644 --- a/src/main/java/com/hbm/render/item/weapon/ItemRenderStinger.java +++ b/src/main/java/com/hbm/render/item/weapon/ItemRenderStinger.java @@ -4,6 +4,7 @@ import org.lwjgl.opengl.GL11; import com.hbm.items.ModItems; import com.hbm.lib.RefStrings; +import com.hbm.main.ResourceManager; import com.hbm.render.model.ModelStinger; import net.minecraft.client.Minecraft; @@ -13,12 +14,6 @@ import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.IItemRenderer; public class ItemRenderStinger implements IItemRenderer { - - protected ModelStinger stinger; - - public ItemRenderStinger() { - stinger = new ModelStinger(); - } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { @@ -38,39 +33,56 @@ public class ItemRenderStinger implements IItemRenderer { @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + + ResourceLocation stingerTex = item.getItem() == ModItems.gun_stinger ? ResourceManager.stinger_tex : ResourceManager.sky_stinger_tex; + Minecraft.getMinecraft().renderEngine.bindTexture(stingerTex); + GL11.glPushMatrix(); + switch(type) { + case EQUIPPED_FIRST_PERSON: - GL11.glPushMatrix(); - if(item.getItem() == ModItems.gun_stinger) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelStinger.png")); - if(item.getItem() == ModItems.gun_skystinger) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelSkyStinger.png")); - GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(-0.3F, 0.0F, -0.1F); - GL11.glScalef(2.0F, 2.0F, 2.0F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - stinger.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); + + double s0 = 0.25D; + GL11.glRotated(25, 0, 0, 1); + GL11.glTranslated(-0.5, -0.7, -0.5); + GL11.glRotated(-100, 0, 1, 0); + GL11.glScaled(s0, s0, s0); + break; + case EQUIPPED: + + double scale = 0.25D; + GL11.glScaled(scale, scale, scale); + GL11.glRotatef(20F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-170, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-15F, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(-2F, -3F, 4.0F); + + break; + case ENTITY: - GL11.glPushMatrix(); - if(item.getItem() == ModItems.gun_stinger) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelStinger.png")); - if(item.getItem() == ModItems.gun_skystinger) - Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelSkyStinger.png")); - GL11.glRotatef(-200.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(75.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); - GL11.glTranslatef(0.0F, -0.2F, -0.5F); - GL11.glRotatef(-5.0F, 0.0F, 0.0F, 1.0F); - GL11.glTranslatef(0.2F, -0.2F, 0.1F); - GL11.glScalef(1.5F, 1.5F, 1.5F); - GL11.glScalef(0.5F, 0.5F, 0.5F); - stinger.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); - GL11.glPopMatrix(); - default: break; + + double s1 = 0.2D; + GL11.glScaled(s1, s1, s1); + GL11.glTranslatef(0F, -2.5F, 0F); + break; + + case INVENTORY: + + GL11.glEnable(GL11.GL_LIGHTING); + + double s = 1.75D; + GL11.glTranslated(4, 11, 0); + GL11.glRotated(90, 0, 1, 0); + GL11.glRotated(135, 1, 0, 0); + GL11.glScaled(s, s, -s); + + break; + + default: break; } + ResourceManager.stinger.renderAll(); + GL11.glPopMatrix(); } -} +} \ No newline at end of file diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityConverterRfHe.java b/src/main/java/com/hbm/tileentity/machine/TileEntityConverterRfHe.java index db5563c81..113b0ffdb 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityConverterRfHe.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityConverterRfHe.java @@ -3,6 +3,7 @@ package com.hbm.tileentity.machine; import java.util.ArrayList; import java.util.List; +import com.hbm.interfaces.Untested; import com.hbm.lib.Library; import com.hbm.tileentity.TileEntityMachineBase; @@ -10,55 +11,24 @@ import api.hbm.energy.IEnergyGenerator; import cofh.api.energy.EnergyStorage; import cofh.api.energy.IEnergyHandler; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityConverterRfHe extends TileEntityMachineBase implements IEnergyGenerator, IEnergyHandler { - - public long power; - public long maxPower = 500000000; - public EnergyStorage storage = new EnergyStorage(2000000000, 2000000000, 2000000000); - - public int buf; - - public TileEntityConverterRfHe() { - super(0); +public class TileEntityConverterRfHe extends TileEntity implements IEnergyGenerator, IEnergyHandler { + + @Override + public void setPower(long power) { + subBuffer = power; } @Override - public String getName() { - return ""; + public long getPower() { + return subBuffer; } - + @Override - public void updateEntity() { - - if (!worldObj.isRemote) { - - power = storage.getEnergyStored() / 4; - maxPower = Math.max(1000000, power); - - buf = storage.getEnergyStored(); - - - for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) - this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); - - storage.setEnergyStored((int)power * 4); - - NBTTagCompound data = new NBTTagCompound(); - data.setInteger("rf", storage.getEnergyStored()); - data.setInteger("maxrf", storage.getEnergyStored()); - data.setLong("he", power); - data.setLong("maxhe", power); - this.networkPack(data, 25); - } - } - - public void networkUnpack(NBTTagCompound nbt) { - storage.setEnergyStored(nbt.getInteger("rf")); - storage.setCapacity(nbt.getInteger("maxrf")); - power = nbt.getLong("he"); - maxPower = nbt.getLong("maxhe"); + public long getMaxPower() { + return subBuffer; } @Override @@ -66,67 +36,37 @@ public class TileEntityConverterRfHe extends TileEntityMachineBase implements IE return true; } + private long subBuffer; + + @Untested @Override public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) { - storage.setCapacity(2000000000); - return storage.receiveEnergy(maxReceive, simulate); - } - - @Override - public int getEnergyStored(ForgeDirection from) { - return storage.getEnergyStored(); - } - - @Override - public int getMaxEnergyStored(ForgeDirection from) { - if(storage.getEnergyStored() < 4000000) - return 2000000000; + if(simulate) + return 0; - return storage.getMaxEnergyStored(); - } - - public long getPowerScaled(long i) { - return (power * i) / maxPower; - } - - public int getFluxScaled(int i) { - return (storage.getEnergyStored() * i) / storage.getMaxEnergyStored(); - } - - @Override - public long getPower() { - return power; - } - - @Override - public void setPower(long i) { - this.power = i; - } - - @Override - public long getMaxPower() { - return this.maxPower; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); + long capacity = maxReceive / 4L; + subBuffer = capacity; - this.power = nbt.getLong("power"); - storage.readFromNBT(nbt); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); + for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + this.sendPower(worldObj, xCoord + dir.offsetX, yCoord + dir.offsetY, zCoord + dir.offsetZ, dir); + } - nbt.setLong("power", power); - storage.writeToNBT(nbt); + return (int) ((capacity - subBuffer) * 4L); } @Override public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) { return 0; } + + @Override + public int getEnergyStored(ForgeDirection from) { + return 0; + } + + @Override + public int getMaxEnergyStored(ForgeDirection from) { + return 1000000; + } } diff --git a/src/main/java/com/hbm/util/LoggingUtil.java b/src/main/java/com/hbm/util/LoggingUtil.java new file mode 100644 index 000000000..a51c37b59 --- /dev/null +++ b/src/main/java/com/hbm/util/LoggingUtil.java @@ -0,0 +1,23 @@ +package com.hbm.util; + +import com.hbm.main.MainRegistry; + +public class LoggingUtil { + + /* + * Only works with ANSI-compatible outputs. http://www.mihai-nita.net/eclipse works really well for dev envs. + */ + public static final String ANSI_RESET = "\u001B[0m"; + public static final String ANSI_BLACK = "\u001B[30m"; + public static final String ANSI_RED = "\u001B[31m"; + public static final String ANSI_GREEN = "\u001B[32m"; + public static final String ANSI_YELLOW = "\u001B[33m"; + public static final String ANSI_BLUE = "\u001B[34m"; + public static final String ANSI_PURPLE = "\u001B[35m"; + public static final String ANSI_CYAN = "\u001B[36m"; + public static final String ANSI_WHITE = "\u001B[37m"; + + public static void errorWithHighlight(String error) { + MainRegistry.logger.error(ANSI_RED + error + ANSI_RESET); + } +} diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 81feac309..ff1f78604 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1130,7 +1130,9 @@ item.coin_radiation.name=Strahlungs-Münze item.coin_siege.name=Belagerungsmünze item.coin_ufo.name=UFO-Münze item.coin_worm.name=Balls-O-Tron-Münze -item.coke.name=Koks +item.coke.coal.name=Kohlekoks +item.coke.lignite.name=Braunkohlekoks +item.coke.petroleum.name=Petroleumkoks item.coltan_tool.name=Koltass item.combine_scrap.name=CMB Schrott item.component_emitter.name=Emitterkomponente @@ -1982,6 +1984,8 @@ item.oil_detector.bullseye=Ölvorkommen direkt untertage! item.oil_detector.detected=Ölvorkommen in der Nähe! item.oil_detector.noOil=Kein Öl gefunden. item.oil_tar.name=Ölteer +item.oil_tar.crude.name=Erdölteer +item.oil_tar.crack.name=Crackölteer item.overfuse.name=Singularitätsschraubenzieher item.oxy_mask.name=Sauerstoffmaske item.paa_boots.name=PaA-"olle Latschen" diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index d74ef1e73..92f78590f 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1285,7 +1285,9 @@ item.coin_radiation.name=Radiation Coin item.coin_siege.name=Siege Coin item.coin_ufo.name=UFO Coin item.coin_worm.name=Balls-O-Tron Coin -item.coke.name=Coke +item.coke.coal.name=Coal Coke +item.coke.lignite.name=Lignite Coke +item.coke.petroleum.name=Petroleum Coke item.coltan_tool.name=Coltass item.combine_scrap.name=CMB Scrap Metal item.component_emitter.name=Emitter Component @@ -2194,7 +2196,8 @@ item.oil_detector.desc2=Detector will only find larger deposits. item.oil_detector.bullseye=Oil deposit directly below! item.oil_detector.detected=Oil detected nearby. item.oil_detector.noOil=No oil detected. -item.oil_tar.name=Oil Tar +item.oil_tar.crude.name=Oil Tar +item.oil_tar.crack.name=Crack Oil Tar item.overfuse.name=Singularity Screwdriver item.overfuse.desc=Say what? item.oxy_mask.name=Oxygen Mask diff --git a/src/main/resources/assets/hbm/models/mobs/tunneler.obj b/src/main/resources/assets/hbm/models/mobs/tunneler.obj new file mode 100644 index 000000000..c438bc16c --- /dev/null +++ b/src/main/resources/assets/hbm/models/mobs/tunneler.obj @@ -0,0 +1,783 @@ +# Blender v2.79 (sub 0) OBJ File: 'tunneler.blend' +# www.blender.org +o Drill +v 0.000000 0.812500 -0.500000 +v -0.143506 0.812500 -0.346455 +v -0.353553 0.812500 -0.353553 +v -0.346455 0.812500 -0.143506 +v -0.500000 0.812500 0.000000 +v -0.346455 0.812500 0.143506 +v -0.353553 0.812500 0.353553 +v -0.143506 0.812500 0.346455 +v -0.000000 0.812500 0.500000 +v 0.143506 0.812500 0.346455 +v 0.353553 0.812500 0.353554 +v 0.346455 0.812500 0.143506 +v 0.500000 0.812500 0.000000 +v 0.346455 0.812500 -0.143506 +v 0.353553 0.812500 -0.353554 +v 0.143506 0.812500 -0.346455 +v 0.000000 1.812500 0.000000 +vt 0.312500 0.106061 +vt 0.312500 0.060606 +vt 0.562500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.312500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.312500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.312500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.312500 0.060606 +vt 0.312500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.312500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.060606 +vt 0.312500 0.015152 +vt 0.312500 0.106061 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.281250 0.060606 +vt 0.250000 0.015152 +vt 0.750000 0.181818 +vt 0.687500 0.181818 +vt 0.750000 -0.000000 +vt 0.625000 0.121212 +vt 0.625000 0.060606 +vt 0.687500 -0.000000 +vt 0.812500 0.060606 +vt 0.812500 0.121212 +vn 0.6914 0.3231 -0.6462 +vn -0.6914 0.3231 -0.6462 +vn 0.0320 0.3231 -0.9458 +vn -0.9458 0.3231 0.0320 +vn -0.6462 0.3231 -0.6914 +vn -0.6462 0.3231 0.6914 +vn -0.9458 0.3231 -0.0320 +vn 0.0320 0.3231 0.9458 +vn -0.6914 0.3231 0.6462 +vn -0.0320 0.3231 -0.9458 +vn 0.9458 0.3231 0.0320 +vn 0.6914 0.3231 0.6462 +vn -0.0320 0.3231 0.9458 +vn 0.9458 0.3231 -0.0320 +vn 0.6462 0.3231 -0.6914 +vn 0.6462 0.3231 0.6914 +vn 0.0000 -1.0000 -0.0000 +s off +f 16/1/1 1/2/1 17/3/1 +f 1/2/2 2/4/2 17/3/2 +f 2/5/3 3/6/3 17/3/3 +f 3/6/4 4/7/4 17/3/4 +f 4/8/5 5/9/5 17/3/5 +f 5/9/6 6/10/6 17/3/6 +f 6/11/7 7/12/7 17/3/7 +f 7/12/8 8/13/8 17/3/8 +f 8/14/9 9/15/9 17/3/9 +f 15/16/10 16/17/10 17/3/10 +f 14/18/11 15/16/11 17/3/11 +f 9/15/12 10/19/12 17/3/12 +f 10/20/13 11/21/13 17/3/13 +f 11/21/14 12/22/14 17/3/14 +f 13/23/15 14/24/15 17/3/15 +f 12/25/16 13/23/16 17/3/16 +f 13/26/17 12/27/17 14/24/17 +f 15/28/17 14/29/17 16/17/17 +f 1/30/17 16/31/17 2/4/17 +f 3/32/17 2/33/17 4/7/17 +f 5/34/17 4/35/17 6/10/17 +f 7/36/17 6/37/17 8/13/17 +f 9/38/17 8/39/17 10/19/17 +f 11/40/17 10/41/17 12/22/17 +f 16/42/17 14/43/17 6/44/17 +f 14/43/17 12/45/17 10/46/17 +f 10/46/17 8/47/17 14/43/17 +f 8/47/17 6/44/17 14/43/17 +f 6/44/17 4/48/17 2/49/17 +f 2/49/17 16/42/17 6/44/17 +o Body +v -0.250000 -0.750000 0.500000 +v -0.500000 -0.750000 0.250000 +v -0.500000 0.750000 0.250000 +v -0.250000 0.750000 0.500000 +v -0.500000 -0.750000 -0.250000 +v -0.250000 -0.750000 -0.500000 +v -0.250000 0.750000 -0.500000 +v -0.500000 0.750000 -0.250000 +v 0.500000 -0.750000 0.250000 +v 0.250000 -0.750000 0.500000 +v 0.250000 0.750000 0.500000 +v 0.500000 0.750000 0.250000 +v 0.250000 -0.750000 -0.500000 +v 0.500000 -0.750000 -0.250000 +v 0.500000 0.750000 -0.250000 +v 0.250000 0.750000 -0.500000 +v -0.375000 -0.750000 0.375000 +v -0.375000 -0.750000 -0.375000 +v 0.375000 -0.750000 -0.375000 +v 0.375000 -0.750000 0.375000 +v -0.375000 -0.875000 0.375000 +v -0.375000 -0.875000 -0.375000 +v 0.375000 -0.875000 -0.375000 +v 0.375000 -0.875000 0.375000 +v -0.500000 -0.875000 0.500000 +v -0.500000 -0.875000 -0.500000 +v 0.500000 -0.875000 -0.500000 +v 0.500000 -0.875000 0.500000 +v -0.500000 -1.125000 0.500000 +v -0.500000 -1.125000 -0.500000 +v 0.500000 -1.125000 -0.500000 +v 0.500000 -1.125000 0.500000 +v 0.000000 0.750000 -0.250000 +v -0.176777 0.750000 -0.176777 +v -0.250000 0.750000 0.000000 +v -0.176777 0.750000 0.176777 +v 0.000000 0.750000 0.250000 +v 0.176777 0.750000 0.176777 +v 0.250000 0.750000 -0.000000 +v 0.176777 0.750000 -0.176777 +v 0.000000 0.812500 -0.250000 +v -0.176777 0.812500 -0.176777 +v -0.250000 0.812500 0.000000 +v -0.176777 0.812500 0.176777 +v 0.000000 0.812500 0.250000 +v 0.176777 0.812500 0.176777 +v 0.250000 0.812500 -0.000000 +v 0.176777 0.812500 -0.176777 +v -0.062500 0.062500 0.500000 +v -0.062500 -0.025888 0.411612 +v 0.062500 0.062500 0.500000 +v 0.062500 -0.025888 0.411612 +v 0.062500 -0.202665 0.765165 +v -0.062500 -0.202665 0.765165 +v -0.062500 -0.291053 0.676777 +v 0.062500 -0.291053 0.676777 +v 0.125000 -0.158471 0.809359 +v -0.125000 -0.158471 0.809359 +v -0.125000 -0.335248 0.632583 +v 0.125000 -0.335248 0.632583 +v 0.125000 -0.335248 0.986136 +v -0.125000 -0.335248 0.986136 +v -0.125000 -0.512024 0.809359 +v 0.125000 -0.512024 0.809359 +v 0.406250 0.500000 -0.343750 +v 0.343750 0.500000 -0.406250 +v 0.406250 -0.500000 -0.343750 +v 0.343750 -0.500000 -0.406250 +v 0.520527 0.000000 -0.583027 +v 0.583027 0.000000 -0.520527 +v 0.520527 -0.500000 -0.583027 +v 0.583027 -0.500000 -0.520527 +v -0.406250 0.500000 0.343750 +v -0.343750 0.500000 0.406250 +v -0.406250 -0.500000 0.343750 +v -0.343750 -0.500000 0.406250 +v -0.520527 0.000000 0.583027 +v -0.583027 0.000000 0.520527 +v -0.520527 -0.500000 0.583027 +v -0.583027 -0.500000 0.520527 +v -0.343750 0.500000 -0.406250 +v -0.406250 0.500000 -0.343750 +v -0.343750 -0.500000 -0.406250 +v -0.406250 -0.500000 -0.343750 +v -0.583027 0.000000 -0.520527 +v -0.520527 0.000000 -0.583027 +v -0.583027 -0.500000 -0.520527 +v -0.520527 -0.500000 -0.583027 +v 0.343750 0.500000 0.406250 +v 0.406250 0.500000 0.343750 +v 0.343750 -0.500000 0.406250 +v 0.406250 -0.500000 0.343750 +v 0.583027 0.000000 0.520527 +v 0.520527 0.000000 0.583027 +v 0.583027 -0.500000 0.520527 +v 0.520527 -0.500000 0.583027 +v 0.375000 -1.125000 0.375000 +v 0.375000 -1.125000 -0.375000 +v -0.375000 -1.125000 0.375000 +v -0.375000 -1.125000 -0.375000 +v 0.250000 -1.062500 0.250000 +v 0.250000 -1.062500 -0.250000 +v -0.250000 -1.062500 0.250000 +v -0.250000 -1.062500 -0.250000 +v 0.062500 0.062500 -0.500000 +v 0.062500 -0.025888 -0.411612 +v -0.062500 0.062500 -0.500000 +v -0.062500 -0.025888 -0.411612 +v -0.062500 -0.202665 -0.765165 +v 0.062500 -0.202665 -0.765165 +v 0.062500 -0.291053 -0.676777 +v -0.062500 -0.291053 -0.676777 +v -0.125000 -0.158471 -0.809359 +v 0.125000 -0.158471 -0.809359 +v 0.125000 -0.335248 -0.632583 +v -0.125000 -0.335248 -0.632583 +v -0.125000 -0.335248 -0.986136 +v 0.125000 -0.335248 -0.986136 +v 0.125000 -0.512024 -0.809359 +v -0.125000 -0.512024 -0.809359 +v 0.500000 0.062500 0.062500 +v 0.411612 -0.025888 0.062500 +v 0.500000 0.062500 -0.062500 +v 0.411612 -0.025888 -0.062500 +v 0.765165 -0.202665 -0.062500 +v 0.765165 -0.202665 0.062500 +v 0.676777 -0.291053 0.062500 +v 0.676777 -0.291053 -0.062500 +v 0.809359 -0.158471 -0.125000 +v 0.809359 -0.158471 0.125000 +v 0.632583 -0.335248 0.125000 +v 0.632583 -0.335248 -0.125000 +v 0.986136 -0.335248 -0.125000 +v 0.986136 -0.335248 0.125000 +v 0.809359 -0.512024 0.125000 +v 0.809359 -0.512024 -0.125000 +v -0.500000 0.062500 -0.062500 +v -0.411612 -0.025888 -0.062500 +v -0.500000 0.062500 0.062500 +v -0.411612 -0.025888 0.062500 +v -0.765165 -0.202665 0.062500 +v -0.765165 -0.202665 -0.062500 +v -0.676777 -0.291053 -0.062500 +v -0.676777 -0.291053 0.062500 +v -0.809359 -0.158471 0.125000 +v -0.809359 -0.158471 -0.125000 +v -0.632583 -0.335248 -0.125000 +v -0.632583 -0.335248 0.125000 +v -0.986136 -0.335248 0.125000 +v -0.986136 -0.335248 -0.125000 +v -0.809359 -0.512024 -0.125000 +v -0.809359 -0.512024 0.125000 +vt 0.750000 0.757576 +vt 0.625000 0.393939 +vt 0.750000 0.393939 +vt 0.187500 0.757576 +vt 0.062500 0.393939 +vt 0.187500 0.393939 +vt 0.375000 0.757576 +vt 0.250000 0.393939 +vt 0.375000 0.393939 +vt 0.562500 0.757576 +vt 0.562500 0.393939 +vt 0.593750 0.393939 +vt 0.406250 0.393939 +vt 0.437500 0.393939 +vt 0.437500 0.757576 +vt 0.218750 0.393939 +vt 0.250000 0.757576 +vt 0.031250 0.393939 +vt 0.062500 0.757576 +vt 0.218750 0.363636 +vt 0.031250 0.363636 +vt 0.781250 0.363636 +vt 0.593750 0.363636 +vt 0.406250 0.363636 +vt 0.593750 0.333333 +vt 0.218750 0.333333 +vt 0.406250 0.333333 +vt 0.781250 0.333333 +vt 0.281250 0.333333 +vt 0.500000 0.303030 +vt 0.468750 0.333333 +vt 0.781250 0.333333 +vt 1.000000 0.303030 +vt 0.968750 0.333333 +vt 0.531250 0.333333 +vt 0.750000 0.303030 +vt 0.718750 0.333333 +vt 0.031250 0.333333 +vt 0.250000 0.303030 +vt 1.000000 0.242424 +vt 0.750000 0.242424 +vt 0.000000 0.303030 +vt 0.250000 0.242424 +vt 0.500000 0.242424 +vt 0.218750 0.030303 +vt 0.250000 0.000000 +vt 0.250000 0.939394 +vt 0.062500 1.000000 +vt 0.484375 0.015152 +vt 0.531250 -0.000000 +vt 0.531250 0.015152 +vt 0.578125 0.015152 +vt 0.625000 -0.000000 +vt 0.625000 0.015152 +vt 0.296875 0.015152 +vt 0.343750 -0.000000 +vt 0.343750 0.015152 +vt 0.390625 0.015152 +vt 0.437500 -0.000000 +vt 0.437500 0.015152 +vt 0.484375 -0.000000 +vt 0.578125 -0.000000 +vt 0.250000 0.015152 +vt 0.296875 -0.000000 +vt 0.390625 -0.000000 +vt 0.296875 0.848485 +vt 0.250000 0.863636 +vt 0.265625 0.848485 +vt 0.484375 0.757576 +vt 0.453125 0.848485 +vt 0.453125 0.757576 +vt 0.296875 0.757576 +vt 0.265625 0.757576 +vt 0.390625 0.757576 +vt 0.421875 0.848485 +vt 0.390625 0.848485 +vt 0.359375 0.757576 +vt 0.328125 0.848485 +vt 0.328125 0.757576 +vt 0.437500 0.863636 +vt 0.375000 0.924242 +vt 0.375000 0.863636 +vt 0.312500 0.863636 +vt 0.484375 0.848485 +vt 0.250000 0.924242 +vt 0.312500 0.984848 +vt 0.250000 0.984848 +vt 0.312500 0.924242 +vt 0.500000 0.863636 +vt 0.437500 0.924242 +vt 0.812500 0.393939 +vt 0.828125 0.515152 +vt 0.812500 0.515152 +vt 0.750000 0.393939 +vt 0.750000 0.636364 +vt 0.812500 0.636364 +vt 0.828125 0.636364 +vt 0.890625 0.393939 +vt 0.828125 0.393939 +vt 0.828125 0.333333 +vt 0.812500 0.333333 +vt 0.812500 0.393939 +vt 0.828125 0.515152 +vt 0.812500 0.515152 +vt 0.750000 0.393939 +vt 0.750000 0.636364 +vt 0.812500 0.636364 +vt 0.828125 0.636364 +vt 0.890625 0.393939 +vt 0.828125 0.393939 +vt 0.828125 0.333333 +vt 0.812500 0.333333 +vt 0.812500 0.393939 +vt 0.828125 0.515152 +vt 0.812500 0.515152 +vt 0.750000 0.393939 +vt 0.750000 0.636364 +vt 0.812500 0.636364 +vt 0.828125 0.636364 +vt 0.890625 0.393939 +vt 0.828125 0.393939 +vt 0.812500 0.333333 +vt 0.812500 0.393939 +vt 0.828125 0.515152 +vt 0.812500 0.515152 +vt 0.750000 0.393939 +vt 0.750000 0.636364 +vt 0.812500 0.636364 +vt 0.828125 0.636364 +vt 0.890625 0.393939 +vt 0.828125 0.393939 +vt 0.828125 0.333333 +vt 0.812500 0.333333 +vt 0.062500 0.060606 +vt 0.031250 0.030303 +vt 0.000000 0.000000 +vt 0.031250 0.212121 +vt 0.000000 0.242424 +vt 0.218750 0.212121 +vt 0.187500 0.181818 +vt 0.062500 0.181818 +vt 0.187500 0.060606 +vt 0.296875 0.848485 +vt 0.250000 0.863636 +vt 0.265625 0.848485 +vt 0.484375 0.757576 +vt 0.453125 0.848485 +vt 0.453125 0.757576 +vt 0.296875 0.757576 +vt 0.265625 0.757576 +vt 0.421875 0.757576 +vt 0.390625 0.848485 +vt 0.390625 0.757576 +vt 0.359375 0.757576 +vt 0.328125 0.848485 +vt 0.328125 0.757576 +vt 0.375000 0.863636 +vt 0.437500 0.924242 +vt 0.375000 0.924242 +vt 0.421875 0.848485 +vt 0.312500 0.863636 +vt 0.484375 0.848485 +vt 0.437500 0.863636 +vt 0.250000 0.984848 +vt 0.312500 0.924242 +vt 0.312500 0.984848 +vt 0.500000 0.863636 +vt 0.250000 0.924242 +vt 0.265625 0.848485 +vt 0.312500 0.863636 +vt 0.250000 0.863636 +vt 0.453125 0.757576 +vt 0.484375 0.848485 +vt 0.453125 0.848485 +vt 0.296875 0.757576 +vt 0.265625 0.757576 +vt 0.390625 0.757576 +vt 0.421875 0.848485 +vt 0.390625 0.848485 +vt 0.359375 0.757576 +vt 0.328125 0.848485 +vt 0.328125 0.757576 +vt 0.375000 0.863636 +vt 0.437500 0.924242 +vt 0.375000 0.924242 +vt 0.500000 0.863636 +vt 0.437500 0.863636 +vt 0.250000 0.984848 +vt 0.312500 0.924242 +vt 0.312500 0.984848 +vt 0.250000 0.924242 +vt 0.296875 0.848485 +vt 0.250000 0.863636 +vt 0.265625 0.848485 +vt 0.484375 0.757576 +vt 0.453125 0.848485 +vt 0.453125 0.757576 +vt 0.296875 0.757576 +vt 0.265625 0.757576 +vt 0.390625 0.757576 +vt 0.421875 0.848485 +vt 0.390625 0.848485 +vt 0.359375 0.757576 +vt 0.328125 0.848485 +vt 0.328125 0.757576 +vt 0.375000 0.863636 +vt 0.437500 0.924242 +vt 0.375000 0.924242 +vt 0.437500 0.863636 +vt 0.359375 0.848485 +vt 0.312500 0.863636 +vt 0.484375 0.848485 +vt 0.250000 0.984848 +vt 0.312500 0.924242 +vt 0.312500 0.984848 +vt 0.500000 0.924242 +vt 0.250000 0.924242 +vt 0.625000 0.757576 +vt -0.000000 0.757576 +vt 0.000000 0.393939 +vt -0.000000 0.939394 +vt 0.000000 0.818182 +vt 0.250000 0.818182 +vt 0.187500 1.000000 +vt 0.250000 -0.000000 +vt 0.421875 0.757576 +vt 0.359375 0.848485 +vt 0.500000 0.924242 +vt 0.890625 0.636364 +vt 0.890625 0.636364 +vt 0.890625 0.636364 +vt 0.828125 0.333333 +vt 0.890625 0.636364 +vt 0.359375 0.848485 +vt 0.500000 0.924242 +vt 0.296875 0.848485 +vt 0.484375 0.757576 +vt 0.421875 0.757576 +vt 0.359375 0.848485 +vt 0.500000 0.924242 +vt 0.421875 0.757576 +vt 0.500000 0.863636 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.9239 0.0000 -0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.3827 0.0000 -0.9239 +vn 0.3827 0.0000 -0.9239 +vn 0.9239 0.0000 0.3827 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 -0.3827 +vn 0.0000 0.7071 -0.7071 +vn 0.0000 -0.7071 -0.7071 +vn 0.0000 0.7071 0.7071 +vn 0.0000 -0.7071 0.7071 +vn 0.6325 0.4472 -0.6325 +vn -0.6325 0.4472 0.6325 +vn -0.6325 0.4472 -0.6325 +vn 0.6325 0.4472 0.6325 +vn 0.4472 -0.8944 0.0000 +vn -0.4472 -0.8944 0.0000 +vn 0.0000 -0.8944 0.4472 +vn 0.0000 -0.8944 -0.4472 +vn -0.7071 0.7071 0.0000 +vn -0.7071 -0.7071 0.0000 +vn 0.7071 0.7071 0.0000 +vn 0.7071 -0.7071 0.0000 +s off +f 28/50/18 18/51/18 27/52/18 +f 32/53/19 26/54/19 31/55/19 +f 24/56/20 30/57/20 23/58/20 +f 20/59/21 19/60/21 34/61/21 +f 35/62/22 22/63/22 25/64/22 +f 36/65/23 30/57/23 33/66/23 +f 37/67/24 26/54/24 29/68/24 +f 20/59/25 22/63/25 19/60/25 +f 36/69/26 26/54/26 37/70/26 +f 37/71/26 18/51/26 34/72/26 +f 34/72/26 22/63/26 35/73/26 +f 35/73/26 30/57/26 36/69/26 +f 35/73/25 38/74/25 34/72/25 +f 37/70/19 40/75/19 36/69/19 +f 36/69/20 39/76/20 35/73/20 +f 34/72/18 41/77/18 37/71/18 +f 40/78/27 43/79/27 39/80/27 +f 38/81/27 45/82/27 41/83/27 +f 39/84/27 42/85/27 38/86/27 +f 41/87/27 44/88/27 40/75/27 +f 42/85/18 49/89/18 45/82/18 +f 43/79/25 46/90/25 42/85/25 +f 45/91/19 48/92/19 44/88/19 +f 44/88/20 47/93/20 43/79/20 +f 48/92/26 117/94/26 47/95/26 +f 32/53/27 24/96/27 20/97/27 +f 57/98/28 64/99/28 56/100/28 +f 55/101/29 62/102/29 54/103/29 +f 53/104/30 60/105/30 52/106/30 +f 51/107/31 58/108/31 50/109/31 +f 50/109/32 65/110/32 57/98/32 +f 56/100/33 63/111/33 55/101/33 +f 54/112/34 61/113/34 53/104/34 +f 52/106/35 59/114/35 51/107/35 +f 73/115/36 76/116/36 72/117/36 +f 67/118/25 71/119/25 66/120/25 +f 69/121/37 72/117/37 67/122/37 +f 68/123/38 71/124/38 70/125/38 +f 68/126/19 73/127/19 69/128/19 +f 75/129/38 78/130/38 74/131/38 +f 71/124/36 74/131/36 70/125/36 +f 73/127/36 74/131/36 77/132/36 +f 72/133/36 75/129/36 71/119/36 +f 80/134/39 78/135/39 79/136/39 +f 77/132/19 78/130/19 81/137/19 +f 76/138/25 79/139/25 75/129/25 +f 77/132/37 80/134/37 76/116/37 +f 89/140/23 86/141/23 87/142/23 +f 84/143/24 87/142/24 82/144/24 +f 82/145/40 86/141/40 83/146/40 +f 85/147/22 86/141/22 88/148/22 +f 85/149/26 89/140/26 84/150/26 +f 97/151/21 94/152/21 95/153/21 +f 92/154/22 95/153/22 90/155/22 +f 90/156/41 94/152/41 91/157/41 +f 93/158/24 94/152/24 96/159/24 +f 93/160/26 97/151/26 92/161/26 +f 105/162/22 102/163/22 103/164/22 +f 100/165/23 103/164/23 98/166/23 +f 98/167/42 102/163/42 99/168/42 +f 101/169/21 102/163/21 104/170/21 +f 100/171/26 104/170/26 105/162/26 +f 113/172/24 110/173/24 111/174/24 +f 108/175/21 111/174/21 106/176/21 +f 106/177/43 110/173/43 107/178/43 +f 109/179/23 110/173/23 112/180/23 +f 109/181/26 113/172/26 108/182/26 +f 117/94/44 120/183/44 116/184/44 +f 46/185/26 114/186/26 49/187/26 +f 47/95/26 116/184/26 46/185/26 +f 49/187/26 115/188/26 48/92/26 +f 120/183/26 119/189/26 118/190/26 +f 114/186/45 119/189/45 115/188/45 +f 115/188/46 121/191/46 117/94/46 +f 116/184/47 118/190/47 114/186/47 +f 129/192/38 132/193/38 128/194/38 +f 123/195/19 127/196/19 122/197/19 +f 125/198/39 128/194/39 123/199/39 +f 122/200/36 126/201/36 124/202/36 +f 124/203/25 129/204/25 125/205/25 +f 130/206/36 135/207/36 134/208/36 +f 127/209/38 130/206/38 126/201/38 +f 129/204/38 130/206/38 133/210/38 +f 128/211/38 131/212/38 127/196/38 +f 135/213/37 137/214/37 134/215/37 +f 133/210/25 134/208/25 137/214/25 +f 132/216/19 135/207/19 131/212/19 +f 133/210/39 136/217/39 132/193/39 +f 144/218/48 149/219/48 148/220/48 +f 138/221/18 144/222/18 143/223/18 +f 141/224/49 144/218/49 139/225/49 +f 140/226/50 143/227/50 142/228/50 +f 140/229/20 145/230/20 141/231/20 +f 146/232/50 151/233/50 150/234/50 +f 143/227/48 146/232/48 142/228/48 +f 145/230/48 146/232/48 149/219/48 +f 143/223/48 148/235/48 147/236/48 +f 151/237/51 153/238/51 150/239/51 +f 149/219/20 150/234/20 153/238/20 +f 148/235/18 151/233/18 147/236/18 +f 149/219/49 152/240/49 148/220/49 +f 161/241/50 164/242/50 160/243/50 +f 155/244/20 159/245/20 154/246/20 +f 157/247/51 160/243/51 155/248/51 +f 156/249/48 159/250/48 158/251/48 +f 156/252/18 161/253/18 157/254/18 +f 162/255/48 167/256/48 166/257/48 +f 158/251/50 163/258/50 162/255/50 +f 158/259/50 165/260/50 161/253/50 +f 160/261/50 163/258/50 159/245/50 +f 167/262/49 169/263/49 166/264/49 +f 162/255/18 169/263/18 165/260/18 +f 163/258/20 168/265/20 167/256/20 +f 165/260/51 168/266/51 164/242/51 +f 28/50/18 21/267/18 18/51/18 +f 32/53/19 29/68/19 26/54/19 +f 24/56/20 33/66/20 30/57/20 +f 34/61/21 18/51/21 21/267/21 +f 21/267/21 20/59/21 34/61/21 +f 25/64/22 24/56/22 35/62/22 +f 24/56/22 23/58/22 35/62/22 +f 33/66/23 32/53/23 36/65/23 +f 32/53/23 31/55/23 36/65/23 +f 29/68/24 28/268/24 37/67/24 +f 28/268/24 27/269/24 37/67/24 +f 20/59/25 25/64/25 22/63/25 +f 36/69/26 31/55/26 26/54/26 +f 37/71/26 27/52/26 18/51/26 +f 34/72/26 19/60/26 22/63/26 +f 35/73/26 23/58/26 30/57/26 +f 35/73/25 39/76/25 38/74/25 +f 37/70/19 41/87/19 40/75/19 +f 36/69/20 40/75/20 39/76/20 +f 34/72/18 38/74/18 41/77/18 +f 40/78/27 44/88/27 43/79/27 +f 38/81/27 42/85/27 45/82/27 +f 39/84/27 43/79/27 42/85/27 +f 41/87/27 45/91/27 44/88/27 +f 42/85/18 46/90/18 49/89/18 +f 43/79/25 47/93/25 46/90/25 +f 45/91/19 49/187/19 48/92/19 +f 44/88/20 48/92/20 47/93/20 +f 48/92/26 115/188/26 117/94/26 +f 20/97/27 21/270/27 28/271/27 +f 28/271/27 29/68/27 32/53/27 +f 32/53/27 33/272/27 24/96/27 +f 24/96/27 25/273/27 20/97/27 +f 20/97/27 28/271/27 32/53/27 +f 57/98/28 65/110/28 64/99/28 +f 55/101/29 63/111/29 62/102/29 +f 53/104/30 61/113/30 60/105/30 +f 51/107/31 59/114/31 58/108/31 +f 50/109/32 58/108/32 65/110/32 +f 56/100/33 64/99/33 63/111/33 +f 54/112/34 62/274/34 61/113/34 +f 52/106/35 60/105/35 59/114/35 +f 73/115/36 77/132/36 76/116/36 +f 67/118/25 72/133/25 71/119/25 +f 69/121/37 73/115/37 72/117/37 +f 68/123/38 66/275/38 71/124/38 +f 68/126/19 70/276/19 73/127/19 +f 75/129/38 79/139/38 78/130/38 +f 71/124/36 75/129/36 74/131/36 +f 73/127/36 70/276/36 74/131/36 +f 72/133/36 76/138/36 75/129/36 +f 80/134/39 81/137/39 78/135/39 +f 77/132/19 74/131/19 78/130/19 +f 76/138/25 80/277/25 79/139/25 +f 77/132/37 81/137/37 80/134/37 +f 89/140/23 88/148/23 86/141/23 +f 84/143/24 89/140/24 87/142/24 +f 82/145/40 87/142/40 86/141/40 +f 85/147/22 83/278/22 86/141/22 +f 85/149/26 88/148/26 89/140/26 +f 97/151/21 96/159/21 94/152/21 +f 92/154/22 97/151/22 95/153/22 +f 90/156/41 95/153/41 94/152/41 +f 93/158/24 91/279/24 94/152/24 +f 93/160/26 96/159/26 97/151/26 +f 105/162/22 104/170/22 102/163/22 +f 100/165/23 105/162/23 103/164/23 +f 98/167/42 103/164/42 102/163/42 +f 101/169/21 99/280/21 102/163/21 +f 100/171/26 101/281/26 104/170/26 +f 113/172/24 112/180/24 110/173/24 +f 108/175/21 113/172/21 111/174/21 +f 106/177/43 111/174/43 110/173/43 +f 109/179/23 107/282/23 110/173/23 +f 109/181/26 112/180/26 113/172/26 +f 117/94/44 121/191/44 120/183/44 +f 46/185/26 116/184/26 114/186/26 +f 47/95/26 117/94/26 116/184/26 +f 49/187/26 114/186/26 115/188/26 +f 120/183/26 121/191/26 119/189/26 +f 114/186/45 118/190/45 119/189/45 +f 115/188/46 119/189/46 121/191/46 +f 116/184/47 120/183/47 118/190/47 +f 129/192/38 133/210/38 132/193/38 +f 123/195/19 128/211/19 127/196/19 +f 125/198/39 129/192/39 128/194/39 +f 122/200/36 127/209/36 126/201/36 +f 124/203/25 126/283/25 129/204/25 +f 130/206/36 131/212/36 135/207/36 +f 127/209/38 131/212/38 130/206/38 +f 129/204/38 126/283/38 130/206/38 +f 128/211/38 132/216/38 131/212/38 +f 135/213/37 136/217/37 137/214/37 +f 133/210/25 130/206/25 134/208/25 +f 132/216/19 136/284/19 135/207/19 +f 133/210/39 137/214/39 136/217/39 +f 144/218/48 145/285/48 149/219/48 +f 138/221/18 139/286/18 144/222/18 +f 141/224/49 145/285/49 144/218/49 +f 140/226/50 138/287/50 143/227/50 +f 140/229/20 142/288/20 145/230/20 +f 146/232/50 147/236/50 151/233/50 +f 143/227/48 147/236/48 146/232/48 +f 145/230/48 142/288/48 146/232/48 +f 143/223/48 144/222/48 148/235/48 +f 151/237/51 152/240/51 153/238/51 +f 149/219/20 146/232/20 150/234/20 +f 148/235/18 152/289/18 151/233/18 +f 149/219/49 153/238/49 152/240/49 +f 161/241/50 165/260/50 164/242/50 +f 155/244/20 160/261/20 159/245/20 +f 157/247/51 161/241/51 160/243/51 +f 156/249/48 154/290/48 159/250/48 +f 156/252/18 158/259/18 161/253/18 +f 162/255/48 163/258/48 167/256/48 +f 158/251/50 159/250/50 163/258/50 +f 158/259/50 162/255/50 165/260/50 +f 160/261/50 164/291/50 163/258/50 +f 167/262/49 168/266/49 169/263/49 +f 162/255/18 166/257/18 169/263/18 +f 163/258/20 164/291/20 168/265/20 +f 165/260/51 169/263/51 168/266/51 diff --git a/src/main/resources/assets/hbm/models/weapons/stinger.obj b/src/main/resources/assets/hbm/models/weapons/stinger.obj new file mode 100644 index 000000000..06422b0b2 --- /dev/null +++ b/src/main/resources/assets/hbm/models/weapons/stinger.obj @@ -0,0 +1,882 @@ +# Blender v2.79 (sub 0) OBJ File: '' +# www.blender.org +mtllib stinger.(1obj.mtl +o Cube.001_Cube.002 +v 0.393889 3.128783 -9.337228 +v 0.393890 1.846543 -5.892444 +v 0.393889 1.846542 -9.337228 +v -0.393894 3.128783 -5.892444 +v -0.393895 1.846542 -9.337228 +v -0.393894 1.846543 -5.892444 +v -0.393895 3.128783 -9.337228 +v -0.000002 3.303435 -5.049528 +v -0.382998 1.728983 -5.208168 +v -0.000002 1.728983 -5.049528 +v -0.382998 3.303435 -5.208168 +v -0.541638 1.728983 -5.591164 +v -0.541638 3.303435 -5.591164 +v -0.382998 1.728983 -5.974160 +v -0.382998 3.303435 -5.974160 +v -0.000002 1.728983 -6.132800 +v -0.000002 3.303435 -6.132800 +v 0.382994 1.728983 -5.974160 +v 0.382994 3.303435 -5.974160 +v 0.541634 1.728983 -5.591164 +v 0.541634 3.303435 -5.591164 +v 0.382994 1.728983 -5.208168 +v 0.382994 3.303435 -5.208168 +v -1.403786 4.699999 -5.797567 +v -1.686627 4.582843 -7.948311 +v -1.686626 4.582843 -5.797567 +v -1.803787 4.299999 -7.948311 +v -1.803786 4.299999 -5.797567 +v -1.686626 4.017155 -5.797567 +v -1.686627 4.017155 -7.948311 +v -1.403786 3.899999 -5.797567 +v -1.403787 3.899999 -7.948311 +v -1.120942 4.017155 -5.797567 +v -1.003787 4.299999 -7.948312 +v -1.003786 4.299999 -5.797568 +v -1.883787 4.299999 -7.982080 +v -1.743199 3.960587 -7.982080 +v -1.120943 4.582843 -7.948312 +v -1.120942 4.582843 -5.797568 +v -0.923786 4.299999 -5.755472 +v -0.923787 4.299999 -7.982080 +v -1.064375 4.639411 -8.277956 +v -1.064375 4.639411 -7.982080 +v -1.120943 4.017155 -7.948311 +v -1.403787 3.819999 -7.982080 +v -1.064375 3.960587 -7.982080 +v -1.403787 4.699999 -7.948311 +v -1.403787 4.779999 -7.982080 +v -1.743199 4.639411 -7.982080 +v -0.923787 4.299999 -8.277956 +v -1.743199 3.960587 -8.277955 +v -1.883787 4.299999 -8.277955 +v -1.403787 3.819999 -8.277956 +v -1.064375 3.960587 -8.277956 +v -1.743199 4.639411 -8.277956 +v -1.403787 4.779999 -8.277956 +v -1.403786 4.779999 -5.755472 +v -1.064374 4.639411 -5.489088 +v -1.064374 4.639411 -5.755472 +v -1.883786 4.299999 -5.755472 +v -1.743198 4.639411 -5.755472 +v -1.064374 3.960587 -5.755472 +v -1.403786 3.819999 -5.755472 +v -1.743198 3.960587 -5.755472 +v -1.743198 3.960587 -5.489088 +v -0.923786 4.299999 -5.489088 +v -1.883786 4.299999 -5.489088 +v -1.064374 3.960587 -5.489088 +v -1.743198 4.639411 -5.489088 +v -1.403786 3.819999 -5.489088 +v -1.403786 4.779999 -5.489088 +v -1.473919 4.208779 -7.811895 +v -0.447114 3.729971 -5.941060 +v -0.447115 3.729971 -7.811896 +v 0.128767 2.756387 -3.983544 +v 0.128767 1.614719 -3.555136 +v 0.128767 1.614719 -3.983544 +v 0.128767 2.756387 -3.555136 +v -0.128769 1.614719 -3.555136 +v -0.128769 2.756387 -3.555136 +v -0.128769 1.614719 -3.983544 +v -0.128769 2.756387 -3.983544 +v 0.190951 3.077327 -3.167776 +v -0.208109 2.727468 -3.531600 +v 0.197875 2.727295 -3.523528 +v -0.198185 2.731559 -4.030576 +v 0.207799 2.731387 -4.022504 +v -0.191081 3.087375 -4.380480 +v 0.214907 3.087207 -4.372408 +v -0.207801 3.932427 -3.521620 +v -0.190953 3.586487 -4.376348 +v -0.214909 3.576612 -3.171716 +v 0.215035 3.586319 -4.368276 +v 0.198183 3.932260 -3.513548 +v 0.191079 3.576439 -3.163644 +v 0.771273 5.530663 -9.417193 +v 0.771274 4.098263 -6.669316 +v 0.771273 4.098262 -9.417192 +v 0.771274 5.530663 -6.669316 +v -0.771278 4.098263 -6.669316 +v -0.771278 5.530663 -6.669316 +v -0.771279 4.098262 -9.417192 +v -0.000003 4.089742 -9.779048 +v -0.346641 3.977118 9.779048 +v 0.000003 4.089750 9.779048 +v -0.346647 3.977114 -9.779048 +v -0.560881 3.682245 9.779048 +v -0.560887 3.682238 -9.779048 +v -0.560881 3.317762 9.779048 +v -0.560887 3.317755 -9.779048 +v -0.346641 3.022886 9.779048 +v -0.346647 3.022882 -9.779048 +v 0.000003 2.910254 9.779048 +v -0.000003 2.910250 -9.779048 +v 0.346647 3.022886 9.779048 +v 0.346641 3.022882 -9.779048 +v 0.560887 3.317762 9.779048 +v 0.560881 3.317755 -9.779048 +v 0.560887 3.682245 9.779048 +v -0.381311 4.024827 -9.822908 +v 0.560881 3.682238 -9.779048 +v 0.346647 3.977118 9.779048 +v 0.346641 3.977114 -9.779048 +v 0.519971 4.215673 9.897908 +v -0.841321 3.226638 9.897908 +v 0.841327 3.773365 9.897908 +v -0.841321 3.773365 9.897908 +v 0.841327 3.226638 9.897908 +v 0.519971 2.784330 9.897908 +v 0.000003 2.615382 9.897908 +v -0.519965 2.784330 9.897908 +v -0.519965 4.215673 9.897908 +v 0.000003 4.384622 9.897908 +v -0.616975 3.299531 -9.822908 +v -0.616975 3.700462 -10.379472 +v -0.616975 3.299530 -10.379472 +v -0.616975 3.700462 -9.822908 +v 0.381305 4.024827 -9.822908 +v -0.000003 4.148718 -9.822908 +v 0.616969 3.700462 -9.822908 +v 0.616969 3.299531 -9.822908 +v 0.381305 2.975170 -9.822908 +v -0.381311 2.975170 -9.822908 +v -0.000003 2.851278 -9.822908 +v 0.616969 3.700462 -10.379472 +v -0.000003 4.148718 -10.379472 +v 0.381305 2.975170 -10.379472 +v 0.616969 3.299530 -10.379472 +v -0.381311 2.975170 -10.379472 +v -0.381311 4.024827 -10.379472 +v -0.000003 2.851278 -10.379472 +v 0.381305 4.024827 -10.379472 +v 0.393890 3.128783 -5.892444 +v -1.473918 4.208779 -5.941060 +v -0.215037 3.077499 -3.175848 +v -0.197877 3.936519 -4.020596 +v 0.208107 3.936351 -4.012524 +v -0.771279 5.530663 -9.417192 +vt 0.527579 0.843077 +vt 0.818514 0.903517 +vt 0.527579 0.904025 +vt 0.818514 0.999529 +vt 0.527579 0.938195 +vt 0.818514 0.938957 +vt 0.451532 0.938195 +vt 0.601607 0.751835 +vt 0.564045 0.842170 +vt 0.601607 0.842170 +vt 0.564045 0.751835 +vt 0.526858 0.842170 +vt 0.526858 0.751835 +vt 0.490047 0.842170 +vt 0.490047 0.751835 +vt 0.452109 0.842170 +vt 0.751857 0.751835 +vt 0.714295 0.842170 +vt 0.751857 0.842170 +vt 0.714295 0.751835 +vt 0.676356 0.842170 +vt 0.676356 0.751835 +vt 0.639545 0.842170 +vt 0.639545 0.751835 +vt 0.525741 0.869077 +vt 0.515026 0.885956 +vt 0.463759 0.885334 +vt 0.601692 0.396030 +vt 0.639188 0.583813 +vt 0.639188 0.396030 +vt 0.676683 0.583813 +vt 0.676683 0.396030 +vt 0.714179 0.396030 +vt 0.714179 0.583813 +vt 0.751674 0.396030 +vt 0.451711 0.583813 +vt 0.489206 0.396030 +vt 0.451711 0.396030 +vt 0.526701 0.583813 +vt 0.526701 0.396030 +vt 0.676683 0.593980 +vt 0.714179 0.593980 +vt 0.564197 0.583813 +vt 0.564197 0.396030 +vt 0.526701 0.385823 +vt 0.526701 0.593980 +vt 0.564197 0.619244 +vt 0.564197 0.593980 +vt 0.489206 0.583813 +vt 0.751674 0.583813 +vt 0.751674 0.593980 +vt 0.489206 0.593980 +vt 0.601692 0.583813 +vt 0.601692 0.593980 +vt 0.639188 0.593980 +vt 0.451827 0.314796 +vt 0.579610 0.279064 +vt 0.601536 0.314798 +vt 0.451711 0.619244 +vt 0.489206 0.619244 +vt 0.714179 0.619244 +vt 0.639188 0.619244 +vt 0.601692 0.619244 +vt 0.526701 0.619244 +vt 0.751674 0.619244 +vt 0.676683 0.619244 +vt 0.601692 0.385823 +vt 0.564197 0.365688 +vt 0.564197 0.385823 +vt 0.676683 0.385823 +vt 0.639188 0.385823 +vt 0.489206 0.385823 +vt 0.451711 0.385823 +vt 0.714179 0.385823 +vt 0.624771 0.279664 +vt 0.751320 0.315075 +vt 0.603068 0.315060 +vt 0.526701 0.365688 +vt 0.489206 0.365688 +vt 0.751674 0.385823 +vt 0.714179 0.365688 +vt 0.639188 0.365688 +vt 0.451711 0.365688 +vt 0.676683 0.365688 +vt 0.601692 0.365688 +vt 0.751346 0.193282 +vt 0.452761 0.263765 +vt 0.751346 0.263765 +vt 0.647089 0.751158 +vt 0.571440 0.645292 +vt 0.647089 0.645292 +vt 0.571440 0.751158 +vt 0.526386 0.644688 +vt 0.526386 0.751158 +vt 0.451379 0.644688 +vt 0.691237 0.751158 +vt 0.691237 0.645292 +vt 0.451379 0.619409 +vt 0.526386 0.619409 +vt 0.820207 0.914045 +vt 0.865118 0.939246 +vt 0.865118 0.914045 +vt 0.954494 0.939246 +vt 0.954494 0.914045 +vt 1.000067 0.939246 +vt 1.000067 0.914045 +vt 0.948519 0.999611 +vt 0.821154 0.982062 +vt 0.999562 0.982062 +vt 0.997335 0.982124 +vt 0.872418 0.999486 +vt 0.821195 0.982124 +vt 0.998746 0.842514 +vt 0.916847 0.720802 +vt 0.916847 0.842514 +vt 0.916847 0.665046 +vt 0.834948 0.720802 +vt 0.753049 0.720802 +vt 0.834948 0.842514 +vt 0.225330 0.955040 +vt 0.262812 0.116603 +vt 0.225330 0.116603 +vt 0.262812 0.955040 +vt 0.300293 0.116603 +vt 0.300293 0.955040 +vt 0.337775 0.116603 +vt 0.337775 0.955040 +vt 0.375256 0.116603 +vt 0.375256 0.955040 +vt 0.412738 0.116603 +vt 0.037923 0.955040 +vt 0.075404 0.116603 +vt 0.037923 0.116603 +vt 0.075404 0.955040 +vt 0.112886 0.116603 +vt 0.112886 0.955040 +vt 0.150367 0.116603 +vt 0.262812 0.959827 +vt 0.150367 0.955040 +vt 0.187849 0.116603 +vt 0.187849 0.955040 +vt 0.187849 0.101602 +vt 0.144918 0.065072 +vt 0.006436 0.036153 +vt 0.145032 0.034460 +vt 0.150367 0.101602 +vt 0.112886 0.101602 +vt 0.075404 0.101602 +vt 0.037923 0.101602 +vt 0.375256 0.101602 +vt 0.337775 0.101602 +vt 0.262812 0.101602 +vt 0.225330 0.101602 +vt 0.300293 0.101602 +vt 0.337775 0.959827 +vt 0.300293 0.999948 +vt 0.337775 0.999948 +vt 0.300293 0.959827 +vt 0.187849 0.959827 +vt 0.225330 0.959827 +vt 0.150367 0.959827 +vt 0.112886 0.959827 +vt 0.075404 0.959827 +vt 0.412738 0.955040 +vt 0.375256 0.959827 +vt 0.412738 0.959827 +vt 0.153921 0.065967 +vt 0.296232 0.034750 +vt 0.295940 0.065362 +vt 0.225330 0.999948 +vt 0.075404 0.999948 +vt 0.112886 0.999948 +vt 0.375256 0.999948 +vt 0.262812 0.999948 +vt 0.150367 0.999948 +vt 0.412738 0.999948 +vt 0.187849 0.999948 +vt 0.037923 0.999948 +vt 0.818514 0.843077 +vt 0.527579 0.999529 +vt 0.451532 0.904025 +vt 0.452109 0.751835 +vt 0.453239 0.868198 +vt 0.463954 0.851318 +vt 0.489628 0.844584 +vt 0.515221 0.851940 +vt 0.489352 0.892690 +vt 0.451711 0.593980 +vt 0.579613 0.350531 +vt 0.473752 0.350529 +vt 0.526683 0.365331 +vt 0.473750 0.279063 +vt 0.526680 0.264262 +vt 0.729617 0.350470 +vt 0.677205 0.365127 +vt 0.624787 0.350459 +vt 0.677183 0.265008 +vt 0.729601 0.279675 +vt 0.751674 0.365688 +vt 0.452761 0.193282 +vt 0.451379 0.751158 +vt 0.820207 0.939246 +vt 0.872853 0.939693 +vt 0.947243 0.939693 +vt 0.999034 0.957243 +vt 0.820625 0.957243 +vt 0.874129 0.999611 +vt 0.821713 0.957571 +vt 0.997853 0.957571 +vt 0.873670 0.940209 +vt 0.946630 0.940209 +vt 0.945378 0.999486 +vt 0.998746 0.720802 +vt 0.834948 0.665046 +vt 0.753049 0.842514 +vt 0.032998 0.011064 +vt 0.075862 0.001081 +vt 0.118655 0.010018 +vt 0.118356 0.090161 +vt 0.032699 0.091207 +vt 0.075492 0.100143 +vt 0.006322 0.066764 +vt 0.412738 0.101602 +vt 0.037923 0.959827 +vt 0.268581 0.090244 +vt 0.224605 0.099890 +vt 0.180808 0.090618 +vt 0.154212 0.035355 +vt 0.181571 0.010473 +vt 0.225547 0.000826 +vt 0.269344 0.010099 +vn 1.0000 0.0000 -0.0000 +vn -1.0000 -0.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 -1.0000 0.0000 +vn -0.3827 0.0000 0.9239 +vn -0.9239 0.0000 0.3827 +vn -0.9239 -0.0000 -0.3827 +vn -0.3827 -0.0000 -0.9239 +vn 0.3827 -0.0000 -0.9239 +vn 0.9239 0.0000 -0.3827 +vn 0.9239 0.0000 0.3827 +vn 0.3827 0.0000 0.9239 +vn -0.3827 0.9239 0.0000 +vn -0.9239 0.3827 0.0000 +vn -0.9239 -0.3827 0.0000 +vn -0.3827 -0.9239 0.0000 +vn 0.3827 -0.9239 0.0000 +vn 0.9239 -0.3827 -0.0000 +vn -0.3839 -0.1590 0.9096 +vn 0.9239 0.3827 -0.0000 +vn 0.3827 0.9239 -0.0000 +vn 0.4572 0.1894 -0.8689 +vn 0.3839 -0.1590 0.9096 +vn -0.1590 -0.3839 0.9096 +vn 0.3839 0.1590 0.9096 +vn -0.3839 0.1590 0.9096 +vn 0.1590 -0.3839 0.9096 +vn 0.1590 0.3839 0.9096 +vn -0.1590 0.3839 0.9096 +vn -0.4572 0.1894 -0.8689 +vn 0.1894 -0.4572 -0.8689 +vn 0.1894 0.4572 -0.8689 +vn -0.1894 0.4572 -0.8689 +vn -0.4572 -0.1894 -0.8690 +vn -0.4572 -0.1894 -0.8689 +vn 0.4572 -0.1894 -0.8689 +vn -0.1894 -0.4572 -0.8689 +vn 0.0000 0.0000 1.0000 +vn 0.4226 0.9063 -0.0000 +vn -0.0142 -0.7129 0.7011 +vn -0.0003 -1.0000 -0.0082 +vn 0.0139 -0.7012 -0.7128 +vn -0.9998 0.0004 -0.0199 +vn 0.9998 -0.0004 0.0199 +vn -0.3090 0.9511 -0.0000 +vn -0.8090 0.5878 0.0000 +vn -0.8090 -0.5878 0.0000 +vn -0.3090 -0.9511 0.0000 +vn 0.3090 -0.9511 0.0000 +vn 0.8090 -0.5878 -0.0000 +vn -0.1904 0.5858 0.7877 +vn -0.1903 0.5859 0.7877 +vn 0.8090 0.5878 -0.0000 +vn 0.3090 0.9511 -0.0000 +vn 0.1206 0.3711 -0.9207 +vn 0.3157 0.2294 -0.9207 +vn 0.3902 0.0000 -0.9207 +vn 0.3157 -0.2294 -0.9207 +vn 0.1206 -0.3711 -0.9207 +vn -0.1206 -0.3711 -0.9207 +vn -0.3157 -0.2294 -0.9207 +vn -0.1206 0.3711 -0.9207 +vn -0.3902 0.0000 -0.9207 +vn -0.3157 0.2294 -0.9207 +vn -0.6160 0.0000 0.7877 +vn -0.4984 0.3621 0.7877 +vn -0.4983 0.3621 0.7877 +vn -0.4983 0.3621 0.7878 +vn 0.1904 0.5858 0.7877 +vn 0.1903 0.5859 0.7877 +vn 0.4984 0.3621 0.7877 +vn 0.4983 0.3621 0.7877 +vn 0.6160 0.0000 0.7877 +vn 0.4984 -0.3621 0.7877 +vn 0.1904 -0.5859 0.7877 +vn -0.1904 -0.5859 0.7877 +vn -0.4984 -0.3621 0.7877 +vn -0.4572 0.1894 -0.8690 +vn -0.4983 -0.3621 0.7877 +usemtl None +s 1 +f 1/1/1 2/2/1 3/3/1 +f 4/4/2 5/5/2 6/6/2 +f 7/7/3 3/3/3 5/5/3 +f 6/6/4 3/3/4 2/2/4 +f 8/8/5 9/9/5 10/10/5 +f 11/11/6 12/12/6 9/9/6 +f 13/13/7 14/14/7 12/12/7 +f 15/15/8 16/16/8 14/14/8 +f 17/17/9 18/18/9 16/19/9 +f 19/20/10 20/21/10 18/18/10 +f 21/22/11 22/23/11 20/21/11 +f 23/24/12 10/10/12 22/23/12 +f 16/25/4 18/26/4 22/27/4 +f 24/28/13 25/29/13 26/30/13 +f 26/30/14 27/31/14 28/32/14 +f 27/31/15 29/33/15 28/32/15 +f 30/34/16 31/35/16 29/33/16 +f 32/36/17 33/37/17 31/38/17 +f 33/37/18 34/39/18 35/40/18 +f 30/34/19 36/41/19 37/42/19 +f 35/40/20 38/43/20 39/44/20 +f 38/43/21 24/28/21 39/44/21 +f 39/44/22 40/45/22 35/40/22 +f 41/46/20 42/47/20 43/48/20 +f 44/49/23 41/46/23 34/39/23 +f 32/50/24 37/42/24 45/51/24 +f 38/43/25 41/46/25 43/48/25 +f 25/29/26 36/41/26 27/31/26 +f 32/36/27 46/52/27 44/49/27 +f 47/53/28 43/48/28 48/54/28 +f 47/53/29 49/55/29 25/29/29 +f 50/56/3 51/57/3 52/58/3 +f 46/52/17 53/59/17 54/60/17 +f 36/41/15 51/61/15 37/42/15 +f 48/54/13 55/62/13 49/55/13 +f 43/48/21 56/63/21 48/54/21 +f 46/52/18 50/64/18 41/46/18 +f 37/42/16 53/65/16 45/51/16 +f 49/55/14 52/66/14 36/41/14 +f 57/67/21 58/68/21 59/69/21 +f 26/30/30 60/70/30 61/71/30 +f 31/38/31 62/72/31 63/73/31 +f 24/28/32 59/69/32 39/44/32 +f 24/28/33 61/71/33 57/67/33 +f 29/33/34 60/70/35 28/32/35 +f 33/37/36 40/45/36 62/72/36 +f 31/35/37 64/74/37 29/33/37 +f 65/75/38 66/76/38 67/77/38 +f 62/72/18 66/78/18 68/79/18 +f 63/80/16 65/81/16 64/74/16 +f 60/70/14 69/82/14 61/71/14 +f 40/45/20 58/68/20 66/78/20 +f 62/72/17 70/83/17 63/73/17 +f 64/74/15 67/84/15 60/70/15 +f 61/71/13 71/85/13 57/67/13 +f 72/86/39 73/87/39 74/88/39 +f 75/89/1 76/90/1 77/91/1 +f 78/92/38 79/93/38 76/90/38 +f 80/94/2 81/95/2 79/93/2 +f 82/96/3 77/91/3 81/97/3 +f 79/93/4 77/98/4 76/99/4 +f 83/100/40 84/101/40 85/102/40 +f 85/102/41 86/103/41 87/104/41 +f 87/104/42 88/105/42 89/106/42 +f 90/107/43 91/108/43 92/109/43 +f 93/110/44 94/111/44 95/112/44 +f 96/113/1 97/114/1 98/115/1 +f 99/116/38 100/117/38 97/114/38 +f 101/118/2 102/119/2 100/117/2 +f 100/117/4 98/115/4 97/114/4 +f 103/120/45 104/121/45 105/122/45 +f 106/123/46 107/124/46 104/121/46 +f 108/125/2 109/126/2 107/124/2 +f 110/127/47 111/128/47 109/126/47 +f 112/129/48 113/130/48 111/128/48 +f 114/131/49 115/132/49 113/133/49 +f 116/134/50 117/135/50 115/132/50 +f 118/136/1 119/137/1 117/135/1 +f 103/120/51 120/138/52 106/123/52 +f 121/139/53 122/140/53 119/137/53 +f 123/141/54 105/122/54 122/140/54 +f 105/122/55 124/142/55 122/140/55 +f 125/143/38 126/144/38 127/145/38 +f 122/140/56 126/146/56 119/137/56 +f 117/135/57 126/146/57 128/147/57 +f 115/132/58 128/147/58 129/148/58 +f 113/133/59 129/148/59 130/149/59 +f 113/130/60 131/150/60 111/128/60 +f 111/128/61 125/151/61 109/126/61 +f 105/122/62 132/152/62 133/153/62 +f 109/126/63 127/154/63 107/124/63 +f 104/121/64 127/154/64 132/152/64 +f 134/155/2 135/156/2 136/157/2 +f 108/125/65 134/155/65 110/127/65 +f 106/123/66 137/158/67 108/125/68 +f 103/120/69 138/159/70 139/160/69 +f 123/141/71 140/161/72 138/159/71 +f 118/136/73 140/161/73 121/139/73 +f 116/134/74 141/162/74 118/136/74 +f 114/131/75 142/163/75 116/134/75 +f 114/164/76 143/165/76 144/166/76 +f 112/129/77 134/155/77 143/165/77 +f 145/167/3 136/168/3 135/169/3 +f 138/159/54 146/170/54 139/160/54 +f 141/162/50 147/171/50 148/172/50 +f 143/165/47 136/157/47 149/173/47 +f 139/160/45 150/174/45 120/138/45 +f 141/162/1 145/175/1 140/161/1 +f 144/166/48 149/173/48 151/176/48 +f 120/138/46 135/156/46 137/158/46 +f 140/161/53 152/177/53 138/159/53 +f 142/163/49 151/178/49 147/171/49 +f 1/1/1 153/179/1 2/2/1 +f 4/4/2 7/180/2 5/5/2 +f 7/7/3 1/181/3 3/3/3 +f 6/6/4 5/5/4 3/3/4 +f 8/8/5 11/11/5 9/9/5 +f 11/11/6 13/13/6 12/12/6 +f 13/13/7 15/15/7 14/14/7 +f 15/15/8 17/182/8 16/16/8 +f 17/17/9 19/20/9 18/18/9 +f 19/20/10 21/22/10 20/21/10 +f 21/22/11 23/24/11 22/23/11 +f 23/24/12 8/8/12 10/10/12 +f 22/27/4 10/183/4 16/25/4 +f 9/184/4 12/185/4 14/186/4 +f 14/186/4 16/25/4 10/183/4 +f 18/26/4 20/187/4 22/27/4 +f 10/183/4 9/184/4 14/186/4 +f 24/28/13 47/53/13 25/29/13 +f 26/30/14 25/29/14 27/31/14 +f 27/31/15 30/34/15 29/33/15 +f 30/34/16 32/50/16 31/35/16 +f 32/36/17 44/49/17 33/37/17 +f 33/37/18 44/49/18 34/39/18 +f 30/34/19 27/31/19 36/41/19 +f 35/40/20 34/39/20 38/43/20 +f 38/43/21 47/53/21 24/28/21 +f 39/44/22 59/69/22 40/45/22 +f 41/46/20 50/64/20 42/47/20 +f 44/49/23 46/52/23 41/46/23 +f 32/50/24 30/34/24 37/42/24 +f 38/43/25 34/39/25 41/46/25 +f 25/29/26 49/55/26 36/41/26 +f 32/36/27 45/188/27 46/52/27 +f 47/53/28 38/43/28 43/48/28 +f 47/53/29 48/54/29 49/55/29 +f 52/58/3 55/189/3 42/190/3 +f 56/191/3 42/190/3 55/189/3 +f 50/56/3 54/192/3 51/57/3 +f 53/193/3 51/57/3 54/192/3 +f 52/58/3 42/190/3 50/56/3 +f 46/52/17 45/188/17 53/59/17 +f 36/41/15 52/66/15 51/61/15 +f 48/54/13 56/63/13 55/62/13 +f 43/48/21 42/47/21 56/63/21 +f 46/52/18 54/60/18 50/64/18 +f 37/42/16 51/61/16 53/65/16 +f 49/55/14 55/62/14 52/66/14 +f 57/67/21 71/85/21 58/68/21 +f 26/30/30 28/32/78 60/70/30 +f 31/38/31 33/37/31 62/72/31 +f 24/28/32 57/67/32 59/69/32 +f 24/28/33 26/30/33 61/71/33 +f 29/33/34 64/74/34 60/70/35 +f 33/37/36 35/40/36 40/45/36 +f 31/35/37 63/80/37 64/74/37 +f 58/194/38 71/195/38 69/196/38 +f 69/196/38 67/77/38 58/194/38 +f 65/75/38 70/197/38 68/198/38 +f 68/198/38 66/76/38 65/75/38 +f 58/194/38 67/77/38 66/76/38 +f 62/72/18 40/45/18 66/78/18 +f 63/80/16 70/199/16 65/81/16 +f 60/70/14 67/84/14 69/82/14 +f 40/45/20 59/69/20 58/68/20 +f 62/72/17 68/79/17 70/83/17 +f 64/74/15 65/81/15 67/84/15 +f 61/71/13 69/82/13 71/85/13 +f 72/86/39 154/200/39 73/87/39 +f 75/89/1 78/92/1 76/90/1 +f 78/92/38 80/94/38 79/93/38 +f 80/94/2 82/201/2 81/95/2 +f 82/96/3 75/89/3 77/91/3 +f 79/93/4 81/95/4 77/98/4 +f 83/100/40 155/202/40 84/101/40 +f 85/102/41 84/101/41 86/103/41 +f 87/104/42 86/103/42 88/105/42 +f 86/203/43 84/204/43 155/205/43 +f 155/205/43 92/109/43 88/206/43 +f 90/107/43 156/207/43 91/108/43 +f 91/108/43 88/206/43 92/109/43 +f 86/203/43 155/205/43 88/206/43 +f 95/112/44 83/208/44 89/209/44 +f 85/210/44 87/211/44 83/208/44 +f 89/209/44 93/110/44 95/112/44 +f 157/212/44 94/111/44 93/110/44 +f 83/208/44 87/211/44 89/209/44 +f 96/113/1 99/213/1 97/114/1 +f 99/116/38 101/214/38 100/117/38 +f 101/118/2 158/215/2 102/119/2 +f 100/117/4 102/119/4 98/115/4 +f 103/120/45 106/123/45 104/121/45 +f 106/123/46 108/125/46 107/124/46 +f 108/125/2 110/127/2 109/126/2 +f 110/127/47 112/129/47 111/128/47 +f 112/129/48 114/164/48 113/130/48 +f 114/131/49 116/134/49 115/132/49 +f 116/134/50 118/136/50 117/135/50 +f 118/136/1 121/139/1 119/137/1 +f 103/120/51 139/160/51 120/138/52 +f 121/139/53 123/141/53 122/140/53 +f 123/141/54 103/120/54 105/122/54 +f 105/122/55 133/153/55 124/142/55 +f 124/216/38 133/217/38 132/218/38 +f 132/218/38 127/145/38 124/216/38 +f 125/143/38 131/219/38 129/220/38 +f 130/221/38 129/220/38 131/219/38 +f 128/222/38 126/144/38 125/143/38 +f 124/216/38 127/145/38 126/144/38 +f 125/143/38 129/220/38 128/222/38 +f 122/140/56 124/142/56 126/146/56 +f 117/135/57 119/137/57 126/146/57 +f 115/132/58 117/135/58 128/147/58 +f 113/133/59 115/132/59 129/148/59 +f 113/130/60 130/223/60 131/150/60 +f 111/128/61 131/150/61 125/151/61 +f 105/122/62 104/121/62 132/152/62 +f 109/126/63 125/151/63 127/154/63 +f 104/121/64 107/124/64 127/154/64 +f 134/155/2 137/158/2 135/156/2 +f 108/125/65 137/158/65 134/155/65 +f 106/123/66 120/138/66 137/158/67 +f 103/120/69 123/141/70 138/159/70 +f 123/141/71 121/139/72 140/161/72 +f 118/136/73 141/162/73 140/161/73 +f 116/134/74 142/163/74 141/162/74 +f 114/131/75 144/224/75 142/163/75 +f 114/164/76 112/129/76 143/165/76 +f 112/129/77 110/127/79 134/155/77 +f 135/169/3 150/225/3 145/167/3 +f 146/226/3 152/227/3 150/225/3 +f 145/167/3 148/228/3 136/168/3 +f 147/229/3 151/230/3 149/231/3 +f 149/231/3 136/168/3 148/228/3 +f 150/225/3 152/227/3 145/167/3 +f 148/228/3 147/229/3 149/231/3 +f 138/159/54 152/177/54 146/170/54 +f 141/162/50 142/163/50 147/171/50 +f 143/165/47 134/155/47 136/157/47 +f 139/160/45 146/170/45 150/174/45 +f 141/162/1 148/172/1 145/175/1 +f 144/166/48 143/165/48 149/173/48 +f 120/138/46 150/174/46 135/156/46 +f 140/161/53 145/175/53 152/177/53 +f 142/163/49 144/224/49 151/178/49 +o Mag_Cube.002 +v -0.089029 2.933951 -0.760703 +v -0.089029 1.301304 -1.115814 +v -0.089029 1.283170 -0.753593 +v 0.138329 2.939292 -1.161489 +v -0.089029 2.939292 -1.161489 +v 0.138329 2.933951 -0.760703 +v 0.110239 1.325914 -0.657225 +v 0.138329 1.283170 -0.753593 +v -0.060939 3.704485 -0.669529 +v 0.110239 3.704485 -0.669529 +v 0.138329 3.754883 -1.150658 +v -0.089029 3.752410 -0.837243 +v 0.138329 3.752410 -0.837243 +v -0.089029 3.732157 -0.767971 +v 0.138329 3.732157 -0.767971 +v 0.138329 2.961623 -0.842189 +v 0.138329 2.966964 -1.161489 +v -0.089029 2.966964 -1.161489 +v -0.089029 2.961623 -0.842189 +v -0.089029 3.754883 -1.150658 +v -0.089029 3.752410 -0.763026 +v 0.138329 3.752410 -0.763026 +v -0.060939 1.325914 -0.657225 +v 0.138329 1.301304 -1.115814 +vt 0.832504 0.337653 +vt 0.866722 0.059183 +vt 0.831819 0.056090 +vt 0.836432 0.315214 +vt 0.851387 0.264253 +vt 0.851387 0.315214 +vt 0.832504 0.337653 +vt 0.822533 0.063381 +vt 0.831819 0.056090 +vt 0.862646 0.264253 +vt 0.851387 0.337897 +vt 0.851387 0.264253 +vt 0.852658 0.180430 +vt 0.837703 0.171830 +vt 0.852658 0.171830 +vt 0.867566 0.223086 +vt 0.856749 0.233730 +vt 0.856749 0.223086 +vt 0.844313 0.232814 +vt 0.847847 0.242143 +vt 0.844313 0.243458 +vt 0.840356 0.342373 +vt 0.823718 0.469077 +vt 0.836432 0.316075 +vt 0.851387 0.316075 +vt 0.840356 0.342373 +vt 0.871123 0.338564 +vt 0.839879 0.477252 +vt 0.871123 0.343284 +vt 0.836432 0.340586 +vt 0.851387 0.340586 +vt 0.839879 0.477252 +vt 0.833204 0.473797 +vt 0.846791 0.232242 +vt 0.845893 0.221598 +vt 0.846791 0.221598 +vt 0.871123 0.343284 +vt 0.870079 0.477673 +vt 0.833204 0.473797 +vt 0.832728 0.477252 +vt 0.823718 0.469077 +vt 0.871123 0.338564 +vt 0.854191 0.233730 +vt 0.854191 0.223086 +vt 0.839550 0.169214 +vt 0.850810 0.169214 +vt 0.866722 0.059183 +vt 0.822533 0.063381 +vt 0.836432 0.264253 +vt 0.862646 0.337897 +vt 0.837703 0.180430 +vt 0.867566 0.233730 +vt 0.847847 0.234129 +vt 0.870079 0.477673 +vt 0.832728 0.477252 +vt 0.845893 0.232242 +vn -1.0000 0.0000 0.0000 +vn 0.0000 -0.0279 -0.9996 +vn 0.9599 0.0013 0.2804 +vn 0.9594 0.0014 0.2820 +vn 0.9602 0.0012 0.2793 +vn 0.0000 0.0052 1.0000 +vn 0.0000 -0.9987 -0.0500 +vn 0.0000 1.0000 0.0079 +vn 0.0000 1.0000 -0.0000 +vn 0.0000 0.9627 0.2706 +vn 0.9993 0.0350 0.0119 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0137 -0.9999 +vn 1.0000 0.0000 0.0000 +vn 0.0000 -0.2372 0.9715 +vn -0.9632 -0.0258 0.2676 +vn 0.0000 -0.9141 0.4055 +vn -0.9599 0.0013 0.2804 +vn -0.9594 0.0014 0.2820 +vn -0.9591 0.0015 0.2831 +vn 0.9591 0.0015 0.2831 +vn 0.9632 -0.0258 0.2676 +vn -0.9993 0.0350 0.0119 +vn -0.9602 0.0012 0.2793 +usemtl None_NONE +s 1 +f 159/232/80 160/233/80 161/234/80 +f 162/235/81 160/236/81 163/237/81 +f 164/238/82 165/239/83 166/240/84 +f 167/241/85 165/242/85 168/243/85 +f 160/244/86 166/245/86 161/246/86 +f 169/247/87 170/248/87 171/249/88 +f 172/250/89 168/251/89 173/252/89 +f 174/253/90 168/254/90 164/238/90 +f 175/255/91 163/237/91 176/256/92 +f 177/257/80 163/258/80 159/232/80 +f 170/259/80 176/260/80 177/257/80 +f 169/261/92 176/256/92 178/262/92 +f 171/263/93 173/264/93 174/253/93 +f 179/265/94 173/266/94 180/267/94 +f 171/263/93 175/268/93 169/269/93 +f 170/259/80 172/270/80 179/271/80 +f 177/257/95 167/272/95 172/270/95 +f 174/253/93 162/273/93 175/268/93 +f 171/249/88 179/274/88 180/275/88 +f 161/246/96 165/276/96 181/277/96 +f 164/238/93 182/278/93 162/273/93 +f 159/232/97 181/279/98 167/272/99 +f 159/232/80 163/258/80 160/233/80 +f 162/235/81 182/280/81 160/236/81 +f 164/238/82 168/254/100 165/239/83 +f 167/241/85 181/281/85 165/242/85 +f 160/244/86 182/282/86 166/245/86 +f 169/247/87 178/283/87 170/248/87 +f 172/250/89 167/284/89 168/251/89 +f 174/253/101 173/264/101 168/254/101 +f 175/255/91 162/235/91 163/237/91 +f 177/257/80 176/260/80 163/258/80 +f 170/259/80 178/285/80 176/260/80 +f 169/261/92 175/255/91 176/256/92 +f 171/263/93 180/286/93 173/264/93 +f 179/265/94 172/287/94 173/266/94 +f 171/263/93 174/253/93 175/268/93 +f 170/259/80 177/257/80 172/270/80 +f 177/257/102 159/232/102 167/272/102 +f 174/253/93 164/238/93 162/273/93 +f 171/249/88 170/248/87 179/274/88 +f 161/246/96 166/245/96 165/276/96 +f 164/238/93 166/240/93 182/278/93 +f 159/232/97 161/234/103 181/279/98 + diff --git a/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket.png b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket.png new file mode 100644 index 000000000..132e23ffe Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_bones.png b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_bones.png new file mode 100644 index 000000000..307af4045 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_bones.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_he.png b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_he.png new file mode 100644 index 000000000..4165c8f4b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_he.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_incendiary.png b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_incendiary.png new file mode 100644 index 000000000..67d55d217 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_incendiary.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_nuclear.png b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_nuclear.png new file mode 100644 index 000000000..c7752fd92 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_stinger_rocket_nuclear.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gun_skystinger.png b/src/main/resources/assets/hbm/textures/items/gun_skystinger.png index 9c07773ef..ef3ff8c9d 100644 Binary files a/src/main/resources/assets/hbm/textures/items/gun_skystinger.png and b/src/main/resources/assets/hbm/textures/items/gun_skystinger.png differ diff --git a/src/main/resources/assets/hbm/textures/items/gun_stinger.png b/src/main/resources/assets/hbm/textures/items/gun_stinger.png index efa3f726e..4e89b8215 100644 Binary files a/src/main/resources/assets/hbm/textures/items/gun_stinger.png and b/src/main/resources/assets/hbm/textures/items/gun_stinger.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/sky_stinger.png b/src/main/resources/assets/hbm/textures/models/weapons/sky_stinger.png new file mode 100644 index 000000000..2424f2a56 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/sky_stinger.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/stinger.png b/src/main/resources/assets/hbm/textures/models/weapons/stinger.png new file mode 100644 index 000000000..178445cb4 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/stinger.png differ