diff --git a/changelog b/changelog index 9c7a703ba..46b68a1a7 100644 --- a/changelog +++ b/changelog @@ -45,6 +45,8 @@ * Ore dict recipe autogen for crucible molds now prioritizes NTM's own items over any other ore dict compatible item * If a cracking tower's input is set to an incorrect type, the input and steam tanks are now preserved instead of being set to NONE * Removed legacy wire items +* Removed random ore, along with its configs +* DFC emitters are now only 95% efficient instead of 98% ## Fixed * The conveyor grabber should no longer skip over items when used in long lines @@ -59,3 +61,4 @@ * Fixed a bug regarding shift clicking in the breeding reactor * Fixed empty particle capsules not being extractable from the ICF pellet maker * Fixed issue regarding mass storage filters when using GTNH-NEI +* Fixed DFC emitters calculating their original 98% inefficiency twice when hitting another emitter or tungsten crate diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index c6f62a404..6b4b0992c 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -8,7 +8,6 @@ import com.hbm.blocks.fluid.*; import com.hbm.blocks.gas.*; import com.hbm.blocks.generic.*; import com.hbm.blocks.generic.BlockHazard.ExtDisplayEffect; -import com.hbm.blocks.generic.BlockMotherOfAllOres.ItemRandomOreBlock; import com.hbm.blocks.machine.*; import com.hbm.blocks.machine.pile.*; import com.hbm.blocks.machine.rbmk.*; @@ -72,7 +71,6 @@ public class ModBlocks { public static Block ore_coltan; public static Block ore_alexandrite; - public static Block ore_random; public static Block ore_bedrock; public static Block ore_volcano; @@ -1283,7 +1281,6 @@ public class ModBlocks { stone_keyhole = new BlockKeyhole().setBlockName("stone_keyhole").setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":stone_keyhole"); - ore_random = new BlockMotherOfAllOres().setBlockName("ore_random").setCreativeTab(MainRegistry.blockTab); ore_bedrock = new BlockBedrockOreTE().setBlockName("ore_bedrock").setCreativeTab(null); ore_volcano = new BlockFissure().setBlockName("ore_volcano").setLightLevel(1F).setCreativeTab(MainRegistry.blockTab); @@ -1761,7 +1758,7 @@ public class ModBlocks { machine_gascent = new MachineGasCent(Material.iron).setBlockName("machine_gascent").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_fel = new MachineFEL(Material.iron).setBlockName("machine_fel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_silex = new MachineSILEX(Material.iron).setBlockName("machine_silex").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); - machine_rotary_furnace = new MachineRotaryFurnace(Material.iron).setBlockName("machine_rotary_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_firebrick"); + machine_rotary_furnace = new MachineRotaryFurnace(Material.iron).setBlockName("machine_rotary_furnace").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_crystallizer = new MachineCrystallizer(Material.iron).setBlockName("machine_crystallizer").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_crystallizer"); machine_uf6_tank = new MachineUF6Tank(Material.iron).setBlockName("machine_uf6_tank").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab); @@ -2422,9 +2419,6 @@ public class ModBlocks { //End Ores GameRegistry.registerBlock(ore_tikite, ore_tikite.getUnlocalizedName()); - //It's a meme you dip - GameRegistry.registerBlock(ore_random, ItemRandomOreBlock.class, ore_random.getUnlocalizedName()); - //Bedrock ore register(ore_bedrock); register(ore_volcano); diff --git a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java b/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java deleted file mode 100644 index bcccfe515..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java +++ /dev/null @@ -1,319 +0,0 @@ -package com.hbm.blocks.generic; - -import java.awt.Color; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Random; - -import com.google.common.collect.HashBiMap; -import com.hbm.blocks.IBlockMultiPass; -import com.hbm.config.WorldConfig; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.items.ModItems; -import com.hbm.lib.RefStrings; -import com.hbm.render.block.RenderBlockMultipass; -import com.hbm.util.ColorUtil; - -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.Block; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.creativetab.CreativeTabs; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.init.Blocks; -import net.minecraft.item.Item; -import net.minecraft.item.ItemBlock; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.IIcon; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.util.StatCollector; -import net.minecraft.world.IBlockAccess; -import net.minecraft.world.World; -import net.minecraftforge.oredict.OreDictionary; - -public class BlockMotherOfAllOres extends BlockContainer implements IBlockMultiPass { - - public static int override = -1; - - public static void shuffleOverride(Random rand) { - override = rand.nextInt(uniqueItems.size()); - } - - public static void resetOverride() { - override = -1; - } - - public BlockMotherOfAllOres() { - super(Material.rock); - this.setBlockTextureName("stone"); - } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileEntityRandomOre(); - } - - @Override - @SideOnly(Side.CLIENT) - public void getSubBlocks(Item item, CreativeTabs tab, List list) { - - for(int i = 0; i < uniqueItems.size(); i++) - list.add(new ItemStack(item, 1, i)); - } - - @Override - public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) { - - TileEntity te = world.getTileEntity(x, y, z); - - if(te instanceof TileEntityRandomOre) { - TileEntityRandomOre ore = (TileEntityRandomOre) te; - return new ItemStack(this, 1, ore.getStackId()); - } - - return new ItemStack(ModItems.nothing); - } - - @Override - public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) { - ArrayList ret = new ArrayList(); - - if(fortune == 0xFECE00) { - TileEntity te = world.getTileEntity(x, y, z); - - if(te instanceof TileEntityRandomOre) { - TileEntityRandomOre ore = (TileEntityRandomOre) te; - ComparableStack item = ore.getCompStack(); - ret.add(item.toStack()); - } - } - - return ret; - } - - - @Override - public void breakBlock(World world, int x, int y, int z, Block block, int meta) { - this.dropBlockAsItemWithChance(world, x, y, z, meta, 1, 0xFECE00); - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entity, ItemStack stack) { - ((TileEntityRandomOre)world.getTileEntity(x, y, z)).setItem(stack.getItemDamage()); - world.markBlockForUpdate(x, y, z); - } - - @Override - public int getRenderType(){ - return IBlockMultiPass.getRenderType(); - } - - @Override - public int getPasses() { - return 2; - } - - private IIcon[] overlays = new IIcon[10]; - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - - this.blockIcon = reg.registerIcon("stone"); - for(int i = 0; i < overlays.length; i++) { - overlays[i] = reg.registerIcon(RefStrings.MODID + ":ore_random_" + (i + 1)); - } - } - - @Override - @SideOnly(Side.CLIENT) - public IIcon getIcon(IBlockAccess world, int x, int y, int z, int side) { - - if(RenderBlockMultipass.currentPass == 0) - return Blocks.stone.getIcon(0, 0); - - TileEntity te = world.getTileEntity(x, y, z); - - if(te instanceof TileEntityRandomOre) { - TileEntityRandomOre ore = (TileEntityRandomOre) te; - int index = ore.getStackId() % overlays.length; - return overlays[index]; - } - - return Blocks.stone.getIcon(0, 0); - } - - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - - if(RenderBlockMultipass.currentPass == 0) - return Blocks.stone.getIcon(0, 0); - - int index = meta % overlays.length; - return overlays[index]; - } - - @Override - @SideOnly(Side.CLIENT) - public int colorMultiplier(IBlockAccess world, int x, int y, int z) { - - if(RenderBlockMultipass.currentPass == 0) - return 0xffffff; - - TileEntity te = world.getTileEntity(x, y, z); - - if(te instanceof TileEntityRandomOre) { - TileEntityRandomOre ore = (TileEntityRandomOre) te; - ItemStack stack = ore.getStack(); - int color = ColorUtil.getAverageColorFromStack(stack); - color = ColorUtil.amplifyColor(color); - - Color col = new Color(color); - int r = col.getRed(); - int g = col.getGreen(); - int b = col.getBlue(); - - float[] hsb = new Color(color).RGBtoHSB(r, g, b, new float[3]); - - if(hsb[1] > 0F && hsb[1] < 0.75F) - hsb[1] = 0.75F; - - color = Color.HSBtoRGB(hsb[0], hsb[1], hsb[2]); - - return color; - } - - return super.colorMultiplier(world, x, y, z); - } - - public static class TileEntityRandomOre extends TileEntity { - - private ComparableStack stack; - - public TileEntityRandomOre() { - if(override != -1) { - setItem(override); - } - } - - public void setItem(int id) { - ComparableStack comp = itemMap.get(id); - this.stack = comp != null ? ((ComparableStack) comp.copy()) : null; - - if(this.worldObj != null) - this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); - } - - public int getStackId() { - return itemMap.inverse().get(getCompStack()); - } - - public ItemStack getStack() { - return getCompStack().toStack(); - } - - public ComparableStack getCompStack() { - - if(stack == null) { - int rand = worldObj.rand.nextInt(uniqueItems.size()); - stack = (ComparableStack) itemMap.get(rand).copy(); - this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); - } - - return stack != null ? stack : new ComparableStack(ModItems.nothing); - } - - @Override - public boolean canUpdate() { - return false; - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - int key = nbt.getInteger("item"); - this.setItem(key); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - - try { - Integer key = itemMap.inverse().get(getCompStack()); - nbt.setInteger("item", key != null ? key : 0); - } catch(Exception ex) { } - } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbt = new NBTTagCompound(); - this.writeToNBT(nbt); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - this.readFromNBT(pkt.func_148857_g()); - } - } - - public static class ItemRandomOreBlock extends ItemBlock { - - public ItemRandomOreBlock(Block block) { - super(block); - this.setHasSubtypes(true); - this.setMaxDamage(0); - } - - @Override - public String getItemStackDisplayName(ItemStack stack) { - ComparableStack comp = itemMap.get(stack.getItemDamage()); - ItemStack name = comp != null ? comp.toStack() : new ItemStack(ModItems.nothing); - if(name.getItemDamage() == OreDictionary.WILDCARD_VALUE) { - name.setItemDamage(0); - } - return StatCollector.translateToLocalFormatted(this.getUnlocalizedName() + ".name", name.getItem().getItemStackDisplayName(name)); - } - } - - public static HashSet uniqueItems = new HashSet(); - public static HashBiMap itemMap = HashBiMap.create(); - - public static void init() { - - if(WorldConfig.enableRandom) { - for(Object b : Block.blockRegistry.getKeys()) { - Block block = Block.getBlockFromName((String) b); - if(block != null && Item.getItemFromBlock(block) != null) - uniqueItems.add(new ComparableStack(block)); - } - - for(Object i : Item.itemRegistry.getKeys()) { - Item item = (Item) Item.itemRegistry.getObject((String) i); - uniqueItems.add(new ComparableStack(item)); - } - - for(String i : OreDictionary.getOreNames()) { - for(ItemStack stack : OreDictionary.getOres(i)) { - uniqueItems.add(new ComparableStack(stack)); - } - } - } else { - uniqueItems.add(new ComparableStack(ModItems.nothing)); - } - - int i = 0; - for(ComparableStack stack : uniqueItems) { - itemMap.put(i++, stack); - } - } -} diff --git a/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java b/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java index 4e7d7657f..020a202f7 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java +++ b/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java @@ -1,5 +1,6 @@ package com.hbm.blocks.generic; +import java.util.ArrayList; import java.util.Random; import com.hbm.blocks.ModBlocks; @@ -51,11 +52,20 @@ public class DecoBlockAlt extends BlockContainer { return null; } - @Override - public Item getItemDropped(int p_149650_1_, Random p_149650_2_, int p_149650_3_) - { - return Item.getItemFromBlock(ModBlocks.statue_elb); - } + @Override + public ArrayList getDrops(World world, int x, int y, int z, int metadata, int fortune) + { + ArrayList drops = new ArrayList(); + drops.add(new ItemStack(Item.getItemFromBlock(ModBlocks.statue_elb))); + if (this == ModBlocks.statue_elb_g || this == ModBlocks.statue_elb_f) + { + drops.add(new ItemStack(ModItems.gun_revolver_cursed, 1, 0)); + } + if (this == ModBlocks.statue_elb_w || this == ModBlocks.statue_elb_f) { + drops.add(new ItemStack(ModItems.watch, 1, 0)); + } + return drops; + } @Override public int getRenderType(){ @@ -153,6 +163,13 @@ public class DecoBlockAlt extends BlockContainer { return true; } } + boolean cracked = player.getHeldItem().getItem() == ModItems.key_red_cracked; + if((player.getHeldItem().getItem() == ModItems.key_red || cracked)) { + if(cracked) player.getHeldItem().stackSize--; + world.func_147480_a(x, y, z, false); + this.dropBlockAsItem(world, x, y, z, world.getBlockMetadata(x, y, z), 0); + return true; + } } } return false; diff --git a/src/main/java/com/hbm/config/WorldConfig.java b/src/main/java/com/hbm/config/WorldConfig.java index c69d5b6f4..a4b6b11e9 100644 --- a/src/main/java/com/hbm/config/WorldConfig.java +++ b/src/main/java/com/hbm/config/WorldConfig.java @@ -76,9 +76,6 @@ public class WorldConfig { public static int endTikiteSpawn = 8; - public static boolean enableRandom = false; - public static int randomSpawn = 0; - public static int radioStructure = 500; public static int antennaStructure = 250; public static int atomStructure = 500; @@ -198,9 +195,6 @@ public class WorldConfig { endTikiteSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.E00_tikiteSpawnrate", "Amount of end trixite per chunk", 8); - enableRandom = CommonConfig.createConfigBool(config, CATEGORY_OREGEN, "2.R00_enableRandomOre", "Amount of random ore per chunk", false); - randomSpawn = CommonConfig.createConfigInt(config, CATEGORY_OREGEN, "2.R01_randomOreSpawnrate", "Amount of random ore per chunk", 0); - final String CATEGORY_DUNGEON = CommonConfig.CATEGORY_DUNGEONS; radioStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.00_radioSpawn", "Spawn radio station on every nTH chunk", 500); antennaStructure = CommonConfig.createConfigInt(config, CATEGORY_DUNGEON, "4.01_antennaSpawn", "Spawn antenna on every nTH chunk", 250); diff --git a/src/main/java/com/hbm/entity/EntityMappings.java b/src/main/java/com/hbm/entity/EntityMappings.java index 98e5f7a2d..ca32a4fd0 100644 --- a/src/main/java/com/hbm/entity/EntityMappings.java +++ b/src/main/java/com/hbm/entity/EntityMappings.java @@ -203,6 +203,7 @@ public class EntityMappings { addEntity(EntitySawblade.class, "entity_stray_saw", 1000); addEntity(EntityChemical.class, "entity_chemthrower_splash", 1000); addEntity(EntityMist.class, "entity_mist", 250, false); + addEntity(EntityFireLingering.class, "entity_fire_lingering", 250, false); addEntity(EntityAcidBomb.class, "entity_acid_bomb", 1000); addEntity(EntityFallingBlockNT.class, "entity_falling_block_nt", 1000); addEntity(EntityBoatRubber.class, "entity_rubber_boat", 250, false); diff --git a/src/main/java/com/hbm/entity/effect/EntityFireLingering.java b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java new file mode 100644 index 000000000..2c101d471 --- /dev/null +++ b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java @@ -0,0 +1,101 @@ +package com.hbm.entity.effect; + +import java.util.List; + +import com.hbm.extprop.HbmLivingProps; +import com.hbm.particle.helper.FlameCreator; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.util.Vec3; +import net.minecraft.world.World; + +public class EntityFireLingering extends Entity { + + public static int TYPE_DIESEL = 0; + public static int TYPE_BALEFIRE = 1; + public int maxAge = 150; + + public EntityFireLingering(World world) { + super(world); + } + + public EntityFireLingering setArea(float width, float height) { + this.dataWatcher.updateObject(11, width); + this.dataWatcher.updateObject(12, height); + return this; + } + public EntityFireLingering setDuration(int duration){ + this.maxAge = duration; + return this; + } + + @Override + protected void entityInit() { + this.dataWatcher.addObject(10, new Integer(0)); + this.dataWatcher.addObject(11, new Float(0)); + this.dataWatcher.addObject(12, new Float(0)); + } + + public EntityFireLingering setType(int type) { + this.dataWatcher.updateObject(10, type); + return this; + } + + public int getType() { + return this.dataWatcher.getWatchableObjectInt(10); + } + + @Override + public void onEntityUpdate() { + + float height = this.dataWatcher.getWatchableObjectFloat(12); + this.yOffset = 0; + this.setSize(this.dataWatcher.getWatchableObjectFloat(11), height); + this.setPosition(this.posX, this.posY, this.posZ); + + if(!worldObj.isRemote) { + + if(this.ticksExisted >= maxAge) { + this.setDead(); + } + + List affected = worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getBoundingBox(posX - width / 2, posY, posZ - width / 2, posX + width / 2, posY + height, posZ + width / 2)); + + for(Entity e : affected) { + if(e instanceof EntityLivingBase) { + EntityLivingBase livng = (EntityLivingBase) e; + HbmLivingProps props = HbmLivingProps.getData(livng); + if(this.getType() == this.TYPE_DIESEL) if(props.fire < 60) props.fire = 60; + if(this.getType() == this.TYPE_BALEFIRE) if(props.balefire < 100) props.balefire = 100; + } else { + e.setFire(4); + } + } + } else { + + for(int i = 0; i < (width >= 5 ? 2 : 1); i++) { + double x = posX - width / 2 + rand.nextDouble() * width; + double z = posZ - width / 2 + rand.nextDouble() * width; + + Vec3 up = Vec3.createVectorHelper(x, posY + height, z); + Vec3 down = Vec3.createVectorHelper(x, posY - height, z); + MovingObjectPosition mop = worldObj.func_147447_a(up, down, false, true, true); + if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) down = mop.hitVec; + if(this.getType() == this.TYPE_DIESEL) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_FIRE); + if(this.getType() == this.TYPE_BALEFIRE) FlameCreator.composeEffectClient(worldObj, x, down.yCoord, z, FlameCreator.META_BALEFIRE); + } + } + } + + @Override @SideOnly(Side.CLIENT) public boolean canRenderOnFire() { return false; } + @Override protected void writeEntityToNBT(NBTTagCompound nbt) { } + @Override public boolean writeToNBTOptional(NBTTagCompound nbt) { return false; } + @Override public void writeToNBT(NBTTagCompound nbt) { } + @Override public void readEntityFromNBT(NBTTagCompound nbt) { this.setDead(); } +} diff --git a/src/main/java/com/hbm/entity/effect/EntityMist.java b/src/main/java/com/hbm/entity/effect/EntityMist.java index 50df95ae6..8c5fef05e 100644 --- a/src/main/java/com/hbm/entity/effect/EntityMist.java +++ b/src/main/java/com/hbm/entity/effect/EntityMist.java @@ -66,7 +66,6 @@ public class EntityMist extends Entity { public FluidType getType() { return Fluids.fromID(this.dataWatcher.getWatchableObjectInt(10)); } - @Override public void onEntityUpdate() { diff --git a/src/main/java/com/hbm/entity/projectile/EntityChemical.java b/src/main/java/com/hbm/entity/projectile/EntityChemical.java index ed3e7391e..9cee29064 100644 --- a/src/main/java/com/hbm/entity/projectile/EntityChemical.java +++ b/src/main/java/com/hbm/entity/projectile/EntityChemical.java @@ -182,15 +182,6 @@ public class EntityChemical extends EntityThrowableNT { if(style == ChemicalStyle.LIQUID || style == ChemicalStyle.GAS) { if(type.temperature < -20) { if(living != null) { //only living things are affected - - HbmLivingProps.setTemperature(living, HbmLivingProps.getTemperature(living) + type.temperature / 20); - - if(HbmLivingProps.isFrozen(living)) { - if(!EntityDamageUtil.attackEntityFromIgnoreIFrame(e, getDamage(ModDamageSource.s_cryolator), living.getMaxHealth() * -type.temperature / 273 * 0.01F)) - e.attackEntityFrom(getDamage(ModDamageSource.s_cryolator), living.getMaxHealth() * -type.temperature / 273); - living.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 100, 2)); - living.addPotionEffect(new PotionEffect(Potion.digSlowdown.id, 100, 4)); - } } } diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index 6a1746ed9..fa16e127d 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -26,7 +26,6 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; @@ -48,9 +47,8 @@ public class HbmLivingProps implements IExtendedEntityProperties { private int bombTimer; private int contagion; private int oil; - private int temperature; - private boolean frozen = false; - private boolean burning = false; + public int fire; + public int balefire; private List contamination = new ArrayList(); public HbmLivingProps(EntityLivingBase entity) { @@ -268,31 +266,8 @@ public class HbmLivingProps implements IExtendedEntityProperties { } /// OIL /// - public static int getOil(EntityLivingBase entity) { - return getData(entity).oil; - } - - public static void setOil(EntityLivingBase entity, int oil) { - getData(entity).oil = oil; - } - - /// TEMPERATURE /// - public static int getTemperature(EntityLivingBase entity) { - return getData(entity).temperature; - } - - public static void setTemperature(EntityLivingBase entity, int temperature) { - HbmLivingProps data = getData(entity); - temperature = MathHelper.clamp_int(temperature, -2500, 2500); - data.temperature = temperature; - if(temperature > 1000) data.burning = true; - if(temperature < 800) data.burning = false; - if(temperature < -1000) data.frozen = true; - if(temperature > -800) data.frozen = false; - } - - public static boolean isFrozen(EntityLivingBase entity) { return getData(entity).frozen; }; - public static boolean isBurning(EntityLivingBase entity) { return getData(entity).burning; }; + public static int getOil(EntityLivingBase entity) { return getData(entity).oil; } + public static void setOil(EntityLivingBase entity, int oil) { getData(entity).oil = oil; } @Override public void init(Entity entity, World world) { } @@ -340,6 +315,8 @@ public class HbmLivingProps implements IExtendedEntityProperties { props.setInteger("hfr_contagion", contagion); props.setInteger("hfr_blacklung", blacklung); props.setInteger("hfr_oil", oil); + props.setInteger("hfr_fire", fire); + props.setInteger("hfr_balefire", balefire); props.setInteger("hfr_cont_count", this.contamination.size()); @@ -364,6 +341,8 @@ public class HbmLivingProps implements IExtendedEntityProperties { contagion = props.getInteger("hfr_contagion"); blacklung = props.getInteger("hfr_blacklung"); oil = props.getInteger("hfr_oil"); + fire = props.getInteger("hfr_fire"); + balefire = props.getInteger("hfr_balefire"); int cont = props.getInteger("hfr_cont_count"); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 9e4ed7089..2ad4807c3 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -23,6 +23,7 @@ import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.ExtPropPacket; +import com.hbm.particle.helper.FlameCreator; import com.hbm.potion.HbmPotion; import com.hbm.saveddata.AuxSavedData; import com.hbm.util.ArmorRegistry; @@ -49,6 +50,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; +import net.minecraft.util.DamageSource; import net.minecraft.util.MathHelper; import net.minecraft.util.Vec3; import net.minecraft.world.World; @@ -569,34 +571,30 @@ public class EntityEffectHandler { if(entity.worldObj.isRemote) return; EntityLivingBase living = (EntityLivingBase) entity; - int temp = HbmLivingProps.getTemperature(living); + HbmLivingProps props = HbmLivingProps.getData(living); + Random rand = living.getRNG(); - if(temp < 0) HbmLivingProps.setTemperature(living, temp + Math.min(-temp, 5)); - if(temp > 0) HbmLivingProps.setTemperature(living, temp - Math.min(temp, 5)); + if(living.isImmuneToFire()) props.fire = 0; - if(HbmLivingProps.isFrozen(living)) { - living.motionX = 0; - living.motionZ = 0; - living.motionY = Math.min(living.motionY, 0); + double x = living.posX; + double y = living.posY; + double z = living.posZ; - if(entity.ticksExisted % 5 == 0) { - NBTTagCompound nbt0 = new NBTTagCompound(); - nbt0.setString("type", "sweat"); - nbt0.setInteger("count", 1); - nbt0.setInteger("block", Block.getIdFromBlock(Blocks.snow)); - nbt0.setInteger("entity", entity.getEntityId()); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(nbt0, 0, 0, 0), new TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, 25)); + if(living.isInWater() || living.isWet()) props.fire = 0; - if(entity instanceof EntityPlayerMP) { - NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setString("type", "frozen"); - PacketDispatcher.wrapper.sendTo(new AuxParticlePacketNT(nbt1, 0, 0, 0), (EntityPlayerMP) entity); - } - } + if(props.fire > 0) { + props.fire--; + if((living.ticksExisted + living.getEntityId()) % 15 == 0) living.worldObj.playSoundEffect(living.posX, living.posY + living.height / 2, living.posZ, "random.fizz", 1F, 1.5F + rand.nextFloat() * 0.5F); + if((living.ticksExisted + living.getEntityId()) % 40 == 0) living.attackEntityFrom(DamageSource.onFire, 2F); + FlameCreator.composeEffect(entity.worldObj, x - living.width / 2 + living.width * rand.nextDouble(), y + rand.nextDouble() * living.height, z - living.width / 2 + living.width * rand.nextDouble(), FlameCreator.META_FIRE); } - if(HbmLivingProps.isBurning(living)) { - living.setFire(1); + if(props.balefire > 0) { + props.balefire--; + if((living.ticksExisted + living.getEntityId()) % 15 == 0) living.worldObj.playSoundEffect(living.posX, living.posY + living.height / 2, living.posZ, "random.fizz", 1F, 1.5F + rand.nextFloat() * 0.5F); + ContaminationUtil.contaminate(living, HazardType.RADIATION, ContaminationType.CREATIVE, 5F); + if((living.ticksExisted + living.getEntityId()) % 20 == 0) living.attackEntityFrom(DamageSource.onFire, 5F); + FlameCreator.composeEffect(entity.worldObj, x - living.width / 2 + living.width * rand.nextDouble(), y + rand.nextDouble() * living.height, z - living.width / 2 + living.width * rand.nextDouble(), FlameCreator.META_BALEFIRE); } } diff --git a/src/main/java/com/hbm/inventory/OreDictManager.java b/src/main/java/com/hbm/inventory/OreDictManager.java index 4399cf3d6..ef6fb0d36 100644 --- a/src/main/java/com/hbm/inventory/OreDictManager.java +++ b/src/main/java/com/hbm/inventory/OreDictManager.java @@ -546,25 +546,25 @@ public class OreDictManager { for(NTMMaterial mat : Mats.orderedList) { if(mat.smeltable == SmeltingBehavior.SMELTABLE) { - if(mat.shapes.contains(MaterialShapes.BOLT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.BOLT.name() + name, new ItemStack(ModItems.bolt, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.INGOT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.INGOT.name() + name, new ItemStack(ModItems.ingot_raw, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.CASTPLATE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.CASTPLATE.name() + name, new ItemStack(ModItems.plate_cast, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.WELDEDPLATE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.WELDEDPLATE.name() + name, new ItemStack(ModItems.plate_welded, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.HEAVY_COMPONENT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVY_COMPONENT.name() + name, new ItemStack(ModItems.heavy_component, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.DENSEWIRE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.DENSEWIRE.name() + name, new ItemStack(ModItems.wire_dense, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.SHELL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.SHELL.name() + name, new ItemStack(ModItems.shell, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.PIPE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.PIPE.name() + name, new ItemStack(ModItems.pipe, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.BOLT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.BOLT.name() + name, new ItemStack(ModItems.bolt, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.INGOT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.INGOT.name() + name, new ItemStack(ModItems.ingot_raw, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.CASTPLATE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.CASTPLATE.name() + name, new ItemStack(ModItems.plate_cast, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.WELDEDPLATE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.WELDEDPLATE.name() + name, new ItemStack(ModItems.plate_welded, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.HEAVY_COMPONENT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVY_COMPONENT.name() + name, new ItemStack(ModItems.heavy_component, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.DENSEWIRE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.DENSEWIRE.name() + name, new ItemStack(ModItems.wire_dense, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.SHELL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.SHELL.name() + name, new ItemStack(ModItems.shell, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.PIPE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.PIPE.name() + name, new ItemStack(ModItems.pipe, 1, mat.id)); } - if(mat.shapes.contains(MaterialShapes.FRAGMENT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.FRAGMENT.name() + name, new ItemStack(ModItems.bedrock_ore_fragment, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.WIRE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.WIRE.name() + name, new ItemStack(ModItems.wire_fine, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.FRAGMENT)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.FRAGMENT.name() + name, new ItemStack(ModItems.bedrock_ore_fragment, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.WIRE)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.WIRE.name() + name, new ItemStack(ModItems.wire_fine, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.LIGHTBARREL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.LIGHTBARREL.name() + name, new ItemStack(ModItems.part_barrel_light, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.HEAVYBARREL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVYBARREL.name() + name, new ItemStack(ModItems.part_barrel_heavy, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.LIGHTRECEIVER)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.LIGHTRECEIVER.name() + name, new ItemStack(ModItems.part_receiver_light, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.HEAVYRECEIVER)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVYRECEIVER.name() + name, new ItemStack(ModItems.part_receiver_heavy, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.MECHANISM)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.MECHANISM.name() + name, new ItemStack(ModItems.part_mechanism, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.STOCK)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.STOCK.name() + name, new ItemStack(ModItems.part_stock, 1, mat.id)); - if(mat.shapes.contains(MaterialShapes.GRIP)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.GRIP.name() + name, new ItemStack(ModItems.part_grip, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.LIGHTBARREL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.LIGHTBARREL.name() + name, new ItemStack(ModItems.part_barrel_light, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.HEAVYBARREL)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVYBARREL.name() + name, new ItemStack(ModItems.part_barrel_heavy, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.LIGHTRECEIVER)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.LIGHTRECEIVER.name() + name, new ItemStack(ModItems.part_receiver_light, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.HEAVYRECEIVER)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.HEAVYRECEIVER.name() + name, new ItemStack(ModItems.part_receiver_heavy, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.MECHANISM)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.MECHANISM.name() + name, new ItemStack(ModItems.part_mechanism, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.STOCK)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.STOCK.name() + name, new ItemStack(ModItems.part_stock, 1, mat.id)); + if(mat.autogen.contains(MaterialShapes.GRIP)) for(String name : mat.names) OreDictionary.registerOre(MaterialShapes.GRIP.name() + name, new ItemStack(ModItems.part_grip, 1, mat.id)); } for(EnumBedrockOre ore : EnumBedrockOre.values()) { @@ -653,7 +653,7 @@ public class OreDictManager { OreDictionary.registerOre("itemSilicon", billet_silicon); for(NTMMaterial mat : Mats.orderedList) { - if(mat.shapes.contains(MaterialShapes.FRAGMENT)) { + if(mat.autogen.contains(MaterialShapes.FRAGMENT)) { String name = mat.names[0]; if(!OreDictionary.getOres(MaterialShapes.DUST.name() + name).isEmpty()) MineralRecipes.add9To1(mat.make(ModItems.bedrock_ore_fragment), OreDictionary.getOres(MaterialShapes.DUST.name() + name).get(0)); else if(!OreDictionary.getOres(MaterialShapes.GEM.name() + name).isEmpty()) MineralRecipes.add9To1(mat.make(ModItems.bedrock_ore_fragment), OreDictionary.getOres(MaterialShapes.GEM.name() + name).get(0)); diff --git a/src/main/java/com/hbm/inventory/material/Mats.java b/src/main/java/com/hbm/inventory/material/Mats.java index 5a44866f3..2f78142ee 100644 --- a/src/main/java/com/hbm/inventory/material/Mats.java +++ b/src/main/java/com/hbm/inventory/material/Mats.java @@ -47,20 +47,20 @@ public class Mats { public static final int _ES = 20_000; //Vanilla and vanilla-like - public static final NTMMaterial MAT_WOOD = makeNonSmeltable(_VS + 03, WOOD, 0x896727, 0x281E0B, 0x896727).setShapes(STOCK, GRIP).n(); - public static final NTMMaterial MAT_IVORY = makeNonSmeltable(_VS + 04, BONE, 0xFFFEEE, 0x797870, 0xEDEBCA).setShapes(GRIP).n(); + public static final NTMMaterial MAT_WOOD = makeNonSmeltable(_VS + 03, WOOD, 0x896727, 0x281E0B, 0x896727).setAutogen(STOCK, GRIP).n(); + public static final NTMMaterial MAT_IVORY = makeNonSmeltable(_VS + 04, BONE, 0xFFFEEE, 0x797870, 0xEDEBCA).setAutogen(GRIP).n(); public static final NTMMaterial MAT_STONE = makeSmeltable(_VS + 00, df("Stone"), 0x7F7F7F, 0x353535, 0x4D2F23).n(); - public static final NTMMaterial MAT_CARBON = makeAdditive( 699, CARBON, 0x363636, 0x030303, 0x404040).setShapes(WIRE, BLOCK).n(); - public static final NTMMaterial MAT_COAL = makeNonSmeltable(600, COAL, 0x363636, 0x030303, 0x404040).setConversion(MAT_CARBON, 2, 1).setShapes(FRAGMENT).n(); - public static final NTMMaterial MAT_LIGNITE = makeNonSmeltable(601, LIGNITE, 0x542D0F, 0x261508, 0x472913).setConversion(MAT_CARBON, 3, 1).setShapes(FRAGMENT).n(); + public static final NTMMaterial MAT_CARBON = makeAdditive( 699, CARBON, 0x363636, 0x030303, 0x404040).setAutogen(WIRE, BLOCK).n(); + public static final NTMMaterial MAT_COAL = makeNonSmeltable(600, COAL, 0x363636, 0x030303, 0x404040).setConversion(MAT_CARBON, 2, 1).setAutogen(FRAGMENT).n(); + public static final NTMMaterial MAT_LIGNITE = makeNonSmeltable(601, LIGNITE, 0x542D0F, 0x261508, 0x472913).setConversion(MAT_CARBON, 3, 1).setAutogen(FRAGMENT).n(); public static final NTMMaterial MAT_COALCOKE = make( 610, COALCOKE) .setConversion(MAT_CARBON, 4, 3).n(); public static final NTMMaterial MAT_PETCOKE = make( 611, PETCOKE) .setConversion(MAT_CARBON, 4, 3).n(); public static final NTMMaterial MAT_LIGCOKE = make( 612, LIGCOKE) .setConversion(MAT_CARBON, 4, 3).n(); public static final NTMMaterial MAT_GRAPHITE = make( 620, GRAPHITE) .setConversion(MAT_CARBON, 1, 1).n(); - public static final NTMMaterial MAT_DIAMOND = makeNonSmeltable(1430, DIAMOND, 0xFFFFFF, 0x1B7B6B, 0x8CF4E2).setConversion(MAT_CARBON, 1, 1).setShapes(FRAGMENT).n(); - public static final NTMMaterial MAT_IRON = makeSmeltable(2600, IRON, 0xFFFFFF, 0x353535, 0xFFA259).setShapes(FRAGMENT, DUST, PIPE, CASTPLATE, WELDEDPLATE, BLOCK).m(); - public static final NTMMaterial MAT_GOLD = makeSmeltable(7900, GOLD, 0xFFFF8B, 0xC26E00, 0xE8D754).setShapes(FRAGMENT, WIRE, NUGGET, DUST, DENSEWIRE, CASTPLATE, BLOCK).m(); - public static final NTMMaterial MAT_REDSTONE = makeSmeltable(_VS + 01, REDSTONE, 0xE3260C, 0x700E06, 0xFF1000).setShapes(FRAGMENT).n(); + public static final NTMMaterial MAT_DIAMOND = makeNonSmeltable(1430, DIAMOND, 0xFFFFFF, 0x1B7B6B, 0x8CF4E2).setConversion(MAT_CARBON, 1, 1).setAutogen(FRAGMENT).n(); + public static final NTMMaterial MAT_IRON = makeSmeltable(2600, IRON, 0xFFFFFF, 0x353535, 0xFFA259).setAutogen(FRAGMENT, DUST, PIPE, CASTPLATE, WELDEDPLATE, BLOCK).m(); + public static final NTMMaterial MAT_GOLD = makeSmeltable(7900, GOLD, 0xFFFF8B, 0xC26E00, 0xE8D754).setAutogen(FRAGMENT, WIRE, NUGGET, DUST, DENSEWIRE, CASTPLATE, BLOCK).m(); + public static final NTMMaterial MAT_REDSTONE = makeSmeltable(_VS + 01, REDSTONE, 0xE3260C, 0x700E06, 0xFF1000).setAutogen(FRAGMENT).n(); public static final NTMMaterial MAT_OBSIDIAN = makeSmeltable(_VS + 02, df("Obsidian"), 0x3D234D).n(); public static final NTMMaterial MAT_HEMATITE = makeAdditive( 2601, HEMATITE, 0xDFB7AE, 0x5F372E, 0x6E463D).m(); public static final NTMMaterial MAT_WROUGHTIRON = makeSmeltable(2602, df("WroughtIron"), 0xFAAB89).m(); @@ -69,94 +69,94 @@ public class Mats { public static final NTMMaterial MAT_MALACHITE = makeAdditive( 2901, MALACHITE, 0xA2F0C8, 0x227048, 0x61AF87).m(); //Radioactive - public static final NTMMaterial MAT_URANIUM = makeSmeltable(9200, U, 0xC1C7BD, 0x2B3227, 0x9AA196).setShapes(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_U233 = makeSmeltable(9233, U233, 0xC1C7BD, 0x2B3227, 0x9AA196).setShapes(NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_U235 = makeSmeltable(9235, U235, 0xC1C7BD, 0x2B3227, 0x9AA196).setShapes(NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_U238 = makeSmeltable(9238, U238, 0xC1C7BD, 0x2B3227, 0x9AA196).setShapes(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_THORIUM = makeSmeltable(9032, TH232, 0xBF825F, 0x1C0000, 0xBF825F).setShapes(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_PLUTONIUM = makeSmeltable(9400, PU, 0x9AA3A0, 0x111A17, 0x78817E).setShapes(NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_RGP = makeSmeltable(9401, PURG, 0x9AA3A0, 0x111A17, 0x78817E).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_PU238 = makeSmeltable(9438, PU238, 0xFFBC59, 0xFF8E2B, 0x78817E).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_PU239 = makeSmeltable(9439, PU239, 0x9AA3A0, 0x111A17, 0x78817E).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_PU240 = makeSmeltable(9440, PU240, 0x9AA3A0, 0x111A17, 0x78817E).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_PU241 = makeSmeltable(9441, PU241, 0x9AA3A0, 0x111A17, 0x78817E).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_RGA = makeSmeltable(9501, AMRG, 0xCEB3B9, 0x3A1C21, 0x93767B).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_AM241 = makeSmeltable(9541, AM241, 0xCEB3B9, 0x3A1C21, 0x93767B).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_AM242 = makeSmeltable(9542, AM242, 0xCEB3B9, 0x3A1C21, 0x93767B).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_NEPTUNIUM = makeSmeltable(9337, NP237, 0xA6B2A6, 0x030F03, 0x647064).setShapes(NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_POLONIUM = makeSmeltable(8410, PO210, 0x968779, 0x3D1509, 0x715E4A).setShapes(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_TECHNETIUM = makeSmeltable(4399, TC99, 0xFAFFFF, 0x576C6C, 0xCADFDF).setShapes(FRAGMENT, NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_RADIUM = makeSmeltable(8826, RA226, 0xFCFCFC, 0xADBFBA, 0xE9FAF6).setShapes(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_ACTINIUM = makeSmeltable(8927, AC227, 0xECE0E0, 0x221616, 0x958989).setShapes(NUGGET, BILLET).m(); - public static final NTMMaterial MAT_CO60 = makeSmeltable(2760, CO60, 0xC2D1EE, 0x353554, 0x8F72AE).setShapes(NUGGET, BILLET, DUST).m(); - public static final NTMMaterial MAT_AU198 = makeSmeltable(7998, AU198, 0xFFFF8B, 0xC26E00, 0xE8D754).setShapes(NUGGET, BILLET, DUST).m(); - public static final NTMMaterial MAT_PB209 = makeSmeltable(8209, PB209, 0xB38A94, 0x12020E, 0x7B535D).setShapes(NUGGET, BILLET, DUST).m(); - public static final NTMMaterial MAT_SCHRABIDIUM = makeSmeltable(12626, SA326, 0x32FFFF, 0x005C5C, 0x32FFFF).setShapes(NUGGET, WIRE, BILLET, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK).m(); - public static final NTMMaterial MAT_SOLINIUM = makeSmeltable(12627, SA327, 0xA2E6E0, 0x00433D, 0x72B6B0).setShapes(NUGGET, BILLET, BLOCK).m(); - public static final NTMMaterial MAT_SCHRABIDATE = makeSmeltable(12600, SBD, 0x77C0D7, 0x39005E, 0x6589B4).setShapes(DUST, DENSEWIRE, CASTPLATE, BLOCK).m(); - public static final NTMMaterial MAT_SCHRARANIUM = makeSmeltable(12601, SRN, 0x2B3227, 0x2B3227, 0x24AFAC).setShapes(BLOCK).m(); - public static final NTMMaterial MAT_GHIORSIUM = makeSmeltable(12836, GH336, 0xF4EFE1, 0x2A3306, 0xC6C6A1).setShapes(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_URANIUM = makeSmeltable(9200, U, 0xC1C7BD, 0x2B3227, 0x9AA196).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_U233 = makeSmeltable(9233, U233, 0xC1C7BD, 0x2B3227, 0x9AA196).setAutogen(NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_U235 = makeSmeltable(9235, U235, 0xC1C7BD, 0x2B3227, 0x9AA196).setAutogen(NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_U238 = makeSmeltable(9238, U238, 0xC1C7BD, 0x2B3227, 0x9AA196).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_THORIUM = makeSmeltable(9032, TH232, 0xBF825F, 0x1C0000, 0xBF825F).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_PLUTONIUM = makeSmeltable(9400, PU, 0x9AA3A0, 0x111A17, 0x78817E).setAutogen(NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_RGP = makeSmeltable(9401, PURG, 0x9AA3A0, 0x111A17, 0x78817E).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_PU238 = makeSmeltable(9438, PU238, 0xFFBC59, 0xFF8E2B, 0x78817E).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_PU239 = makeSmeltable(9439, PU239, 0x9AA3A0, 0x111A17, 0x78817E).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_PU240 = makeSmeltable(9440, PU240, 0x9AA3A0, 0x111A17, 0x78817E).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_PU241 = makeSmeltable(9441, PU241, 0x9AA3A0, 0x111A17, 0x78817E).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_RGA = makeSmeltable(9501, AMRG, 0xCEB3B9, 0x3A1C21, 0x93767B).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_AM241 = makeSmeltable(9541, AM241, 0xCEB3B9, 0x3A1C21, 0x93767B).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_AM242 = makeSmeltable(9542, AM242, 0xCEB3B9, 0x3A1C21, 0x93767B).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_NEPTUNIUM = makeSmeltable(9337, NP237, 0xA6B2A6, 0x030F03, 0x647064).setAutogen(NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_POLONIUM = makeSmeltable(8410, PO210, 0x968779, 0x3D1509, 0x715E4A).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_TECHNETIUM = makeSmeltable(4399, TC99, 0xFAFFFF, 0x576C6C, 0xCADFDF).setAutogen(FRAGMENT, NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_RADIUM = makeSmeltable(8826, RA226, 0xFCFCFC, 0xADBFBA, 0xE9FAF6).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_ACTINIUM = makeSmeltable(8927, AC227, 0xECE0E0, 0x221616, 0x958989).setAutogen(NUGGET, BILLET).m(); + public static final NTMMaterial MAT_CO60 = makeSmeltable(2760, CO60, 0xC2D1EE, 0x353554, 0x8F72AE).setAutogen(NUGGET, BILLET, DUST).m(); + public static final NTMMaterial MAT_AU198 = makeSmeltable(7998, AU198, 0xFFFF8B, 0xC26E00, 0xE8D754).setAutogen(NUGGET, BILLET, DUST).m(); + public static final NTMMaterial MAT_PB209 = makeSmeltable(8209, PB209, 0xB38A94, 0x12020E, 0x7B535D).setAutogen(NUGGET, BILLET, DUST).m(); + public static final NTMMaterial MAT_SCHRABIDIUM = makeSmeltable(12626, SA326, 0x32FFFF, 0x005C5C, 0x32FFFF).setAutogen(NUGGET, WIRE, BILLET, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK).m(); + public static final NTMMaterial MAT_SOLINIUM = makeSmeltable(12627, SA327, 0xA2E6E0, 0x00433D, 0x72B6B0).setAutogen(NUGGET, BILLET, BLOCK).m(); + public static final NTMMaterial MAT_SCHRABIDATE = makeSmeltable(12600, SBD, 0x77C0D7, 0x39005E, 0x6589B4).setAutogen(DUST, DENSEWIRE, CASTPLATE, BLOCK).m(); + public static final NTMMaterial MAT_SCHRARANIUM = makeSmeltable(12601, SRN, 0x2B3227, 0x2B3227, 0x24AFAC).setAutogen(BLOCK).m(); + public static final NTMMaterial MAT_GHIORSIUM = makeSmeltable(12836, GH336, 0xF4EFE1, 0x2A3306, 0xC6C6A1).setAutogen(NUGGET, BILLET, BLOCK).m(); //Base metals - public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setShapes(FRAGMENT, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setShapes(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setShapes(FRAGMENT, WIRE, BOLT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setShapes(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setShapes(FRAGMENT, NUGGET, WIRE, DUST, PLATE, CASTPLATE, PIPE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, BI, 0xB200FF, 0xB200FF, 0xB200FF).setShapes(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_ARSENIC = makeSmeltable(3300, AS, 0x6CBABA, 0x242525, 0x558080).setShapes(NUGGET).m(); - public static final NTMMaterial MAT_TANTALIUM = makeSmeltable(7300, TA, 0xFFFFFF, 0x1D1D36, 0xA89B74).setShapes(NUGGET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_NEODYMIUM = makeSmeltable(6000, ND, 0xE6E6B6, 0x1C1C00, 0x8F8F5F).setShapes(FRAGMENT, NUGGET, DUSTTINY, INGOT, DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_NIOBIUM = makeSmeltable(4100, NB, 0xB76EC9, 0x2F2D42, 0xD576B1).setShapes(FRAGMENT, NUGGET, DUSTTINY, DUST, BLOCK).m(); - public static final NTMMaterial MAT_BERYLLIUM = makeSmeltable(400, BE, 0xB2B2A6, 0x0F0F03, 0xAE9572).setShapes(FRAGMENT, NUGGET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_EMERALD = makeNonSmeltable(401, EMERALD, 0xBAFFD4, 0x003900, 0x17DD62).setConversion(MAT_BERYLLIUM, 4, 3).setShapes(FRAGMENT, DUST, GEM, BLOCK).n(); - public static final NTMMaterial MAT_COBALT = makeSmeltable(2700, CO, 0xC2D1EE, 0x353554, 0x8F72AE).setShapes(FRAGMENT, NUGGET, DUSTTINY, BILLET, DUST, BLOCK).m(); - public static final NTMMaterial MAT_BORON = makeSmeltable(500, B, 0xBDC8D2, 0x29343E, 0xAD72AE).setShapes(FRAGMENT, DUSTTINY, DUST, BLOCK).m(); - public static final NTMMaterial MAT_BORAX = makeSmeltable(501, BORAX, 0xFFFFFF, 0x946E23, 0xFFECC6).setShapes(FRAGMENT, INGOT, DUST).n(); - public static final NTMMaterial MAT_LANTHANIUM = makeSmeltable(5700, LA, 0xC8E0E0, 0x3B5353, 0xA1B9B9).setShapes(FRAGMENT, BLOCK).m(); - public static final NTMMaterial MAT_ZIRCONIUM = makeSmeltable(4000, ZR, 0xE3DCBE, 0x3E3719, 0xADA688).setShapes(FRAGMENT, NUGGET, WIRE, DUSTTINY, BILLET, DUST, CASTPLATE, WELDEDPLATE, BLOCK).m(); - public static final NTMMaterial MAT_SODIUM = makeSmeltable(1100, NA, 0xD3BF9E, 0x3A5A6B, 0x7E9493).setShapes(FRAGMENT, INGOT, DUST).m(); - public static final NTMMaterial MAT_SODALITE = makeNonSmeltable(1101, SODALITE, 0xDCE5F6, 0x4927B4, 0x96A7E6).setShapes(FRAGMENT, GEM).n(); - public static final NTMMaterial MAT_STRONTIUM = makeSmeltable(3800, SR, 0xF1E8BA, 0x271E00, 0xCAC193).setShapes(FRAGMENT, INGOT, DUST).m(); - public static final NTMMaterial MAT_CALCIUM = makeSmeltable(2000, CA, 0xCFCFA6, 0x747F6E, 0xB7B784).setShapes(DUST).m(); - public static final NTMMaterial MAT_LITHIUM = makeSmeltable(300, LI, 0xFFFFFF, 0x818181, 0xD6D6D6).setShapes(FRAGMENT, DUST, BLOCK).m(); - public static final NTMMaterial MAT_SULFUR = makeNonSmeltable(1600, S, 0xFCEE80, 0xBDA022, 0xF1DF68).setShapes(FRAGMENT, DUST, BLOCK).n(); - public static final NTMMaterial MAT_KNO = makeNonSmeltable(700, KNO, 0xD4D4D4, 0x969696, 0xC9C9C9).setShapes(FRAGMENT, DUST, BLOCK).n(); - public static final NTMMaterial MAT_FLUORITE = makeNonSmeltable(900, F, 0xFFFFFF, 0xB0A192, 0xE1DBD4).setShapes(FRAGMENT, DUST, BLOCK).n(); - public static final NTMMaterial MAT_PHOSPHORUS = makeNonSmeltable(1500, P_RED, 0xCB0213, 0x600006, 0xBA0615).setShapes(FRAGMENT, DUST, BLOCK).n(); - public static final NTMMaterial MAT_CHLOROCALCITE = makeNonSmeltable(1701, CHLOROCALCITE, 0xF7E761, 0x475B46, 0xB8B963).setShapes(FRAGMENT, DUST).n(); - public static final NTMMaterial MAT_MOLYSITE = makeNonSmeltable(1702, MOLYSITE, 0xF9E97B, 0x216E00, 0xD0D264).setShapes(FRAGMENT, DUST).n(); - public static final NTMMaterial MAT_CINNABAR = makeNonSmeltable(8001, CINNABAR, 0xD87070, 0x993030, 0xBF4E4E).setShapes(FRAGMENT, GEM).n(); - public static final NTMMaterial MAT_CADMIUM = makeSmeltable(4800, CD, 0xFFFADE, 0x350000, 0xA85600).setShapes(DUST).m(); - public static final NTMMaterial MAT_SILICON = makeSmeltable(1400, SI, 0xD1D7DF, 0x1A1A3D, 0x878B9E).setShapes(FRAGMENT, NUGGET, BILLET).m(); - public static final NTMMaterial MAT_ASBESTOS = makeSmeltable(1401, ASBESTOS, 0xD8D9CF, 0x616258, 0xB0B3A8).setShapes(FRAGMENT, BLOCK).n(); - public static final NTMMaterial MAT_OSMIRIDIUM = makeSmeltable(7699, OSMIRIDIUM, 0xDBE3EF, 0x7891BE, 0xACBDD9).setShapes(NUGGET, CASTPLATE, WELDEDPLATE).m(); + public static final NTMMaterial MAT_TITANIUM = makeSmeltable(2200, TI, 0xF7F3F2, 0x4F4C4B, 0xA99E79).setAutogen(FRAGMENT, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_COPPER = makeSmeltable(2900, CU, 0xFDCA88, 0x601E0D, 0xC18336).setAutogen(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_TUNGSTEN = makeSmeltable(7400, W, 0x868686, 0x000000, 0x977474).setAutogen(FRAGMENT, WIRE, BOLT, DUST, DENSEWIRE, CASTPLATE, WELDEDPLATE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_ALUMINIUM = makeSmeltable(1300, AL, 0xFFFFFF, 0x344550, 0xD0B8EB).setAutogen(FRAGMENT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_LEAD = makeSmeltable(8200, PB, 0xA6A6B2, 0x03030F, 0x646470).setAutogen(FRAGMENT, NUGGET, WIRE, DUST, PLATE, CASTPLATE, PIPE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_BISMUTH = makeSmeltable(8300, BI, 0xB200FF, 0xB200FF, 0xB200FF).setAutogen(FRAGMENT, NUGGET, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_ARSENIC = makeSmeltable(3300, AS, 0x6CBABA, 0x242525, 0x558080).setAutogen(NUGGET).m(); + public static final NTMMaterial MAT_TANTALIUM = makeSmeltable(7300, TA, 0xFFFFFF, 0x1D1D36, 0xA89B74).setAutogen(NUGGET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_NEODYMIUM = makeSmeltable(6000, ND, 0xE6E6B6, 0x1C1C00, 0x8F8F5F).setAutogen(FRAGMENT, NUGGET, DUSTTINY, INGOT, DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_NIOBIUM = makeSmeltable(4100, NB, 0xB76EC9, 0x2F2D42, 0xD576B1).setAutogen(FRAGMENT, NUGGET, DUSTTINY, DUST, BLOCK).m(); + public static final NTMMaterial MAT_BERYLLIUM = makeSmeltable(400, BE, 0xB2B2A6, 0x0F0F03, 0xAE9572).setAutogen(FRAGMENT, NUGGET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_EMERALD = makeNonSmeltable(401, EMERALD, 0xBAFFD4, 0x003900, 0x17DD62).setConversion(MAT_BERYLLIUM, 4, 3).setAutogen(FRAGMENT, DUST, GEM, BLOCK).n(); + public static final NTMMaterial MAT_COBALT = makeSmeltable(2700, CO, 0xC2D1EE, 0x353554, 0x8F72AE).setAutogen(FRAGMENT, NUGGET, DUSTTINY, BILLET, DUST, BLOCK).m(); + public static final NTMMaterial MAT_BORON = makeSmeltable(500, B, 0xBDC8D2, 0x29343E, 0xAD72AE).setAutogen(FRAGMENT, DUSTTINY, DUST, BLOCK).m(); + public static final NTMMaterial MAT_BORAX = makeSmeltable(501, BORAX, 0xFFFFFF, 0x946E23, 0xFFECC6).setAutogen(FRAGMENT, INGOT, DUST).n(); + public static final NTMMaterial MAT_LANTHANIUM = makeSmeltable(5700, LA, 0xC8E0E0, 0x3B5353, 0xA1B9B9).setAutogen(FRAGMENT, BLOCK).m(); + public static final NTMMaterial MAT_ZIRCONIUM = makeSmeltable(4000, ZR, 0xE3DCBE, 0x3E3719, 0xADA688).setAutogen(FRAGMENT, NUGGET, WIRE, DUSTTINY, BILLET, DUST, CASTPLATE, WELDEDPLATE, BLOCK).m(); + public static final NTMMaterial MAT_SODIUM = makeSmeltable(1100, NA, 0xD3BF9E, 0x3A5A6B, 0x7E9493).setAutogen(FRAGMENT, INGOT, DUST).m(); + public static final NTMMaterial MAT_SODALITE = makeNonSmeltable(1101, SODALITE, 0xDCE5F6, 0x4927B4, 0x96A7E6).setAutogen(FRAGMENT, GEM).n(); + public static final NTMMaterial MAT_STRONTIUM = makeSmeltable(3800, SR, 0xF1E8BA, 0x271E00, 0xCAC193).setAutogen(FRAGMENT, INGOT, DUST).m(); + public static final NTMMaterial MAT_CALCIUM = makeSmeltable(2000, CA, 0xCFCFA6, 0x747F6E, 0xB7B784).setAutogen(DUST).m(); + public static final NTMMaterial MAT_LITHIUM = makeSmeltable(300, LI, 0xFFFFFF, 0x818181, 0xD6D6D6).setAutogen(FRAGMENT, DUST, BLOCK).m(); + public static final NTMMaterial MAT_SULFUR = makeNonSmeltable(1600, S, 0xFCEE80, 0xBDA022, 0xF1DF68).setAutogen(FRAGMENT, DUST, BLOCK).n(); + public static final NTMMaterial MAT_KNO = makeNonSmeltable(700, KNO, 0xD4D4D4, 0x969696, 0xC9C9C9).setAutogen(FRAGMENT, DUST, BLOCK).n(); + public static final NTMMaterial MAT_FLUORITE = makeNonSmeltable(900, F, 0xFFFFFF, 0xB0A192, 0xE1DBD4).setAutogen(FRAGMENT, DUST, BLOCK).n(); + public static final NTMMaterial MAT_PHOSPHORUS = makeNonSmeltable(1500, P_RED, 0xCB0213, 0x600006, 0xBA0615).setAutogen(FRAGMENT, DUST, BLOCK).n(); + public static final NTMMaterial MAT_CHLOROCALCITE = makeNonSmeltable(1701, CHLOROCALCITE, 0xF7E761, 0x475B46, 0xB8B963).setAutogen(FRAGMENT, DUST).n(); + public static final NTMMaterial MAT_MOLYSITE = makeNonSmeltable(1702, MOLYSITE, 0xF9E97B, 0x216E00, 0xD0D264).setAutogen(FRAGMENT, DUST).n(); + public static final NTMMaterial MAT_CINNABAR = makeNonSmeltable(8001, CINNABAR, 0xD87070, 0x993030, 0xBF4E4E).setAutogen(FRAGMENT, GEM).n(); + public static final NTMMaterial MAT_CADMIUM = makeSmeltable(4800, CD, 0xFFFADE, 0x350000, 0xA85600).setAutogen(DUST).m(); + public static final NTMMaterial MAT_SILICON = makeSmeltable(1400, SI, 0xD1D7DF, 0x1A1A3D, 0x878B9E).setAutogen(FRAGMENT, NUGGET, BILLET).m(); + public static final NTMMaterial MAT_ASBESTOS = makeSmeltable(1401, ASBESTOS, 0xD8D9CF, 0x616258, 0xB0B3A8).setAutogen(FRAGMENT, BLOCK).n(); + public static final NTMMaterial MAT_OSMIRIDIUM = makeSmeltable(7699, OSMIRIDIUM, 0xDBE3EF, 0x7891BE, 0xACBDD9).setAutogen(NUGGET, CASTPLATE, WELDEDPLATE).m(); //Alloys - public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setShapes(DUSTTINY, BOLT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, GRIP).m(); - public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setShapes(WIRE, DUST, BLOCK).m(); - public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setShapes(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x183039, 0x030B0B, 0x376373).setShapes(BOLT, DUST, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m(); - public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setShapes(DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setShapes(DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_STEEL = makeSmeltable(_AS + 0, STEEL, 0xAFAFAF, 0x0F0F0F, 0x4A4A4A).setAutogen(DUSTTINY, BOLT, WIRE, DUST, PLATE, CASTPLATE, WELDEDPLATE, SHELL, PIPE, BLOCK, HEAVY_COMPONENT, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, GRIP).m(); + public static final NTMMaterial MAT_MINGRADE = makeSmeltable(_AS + 1, MINGRADE, 0xFFBA7D, 0xAF1700, 0xE44C0F).setAutogen(WIRE, DUST, BLOCK).m(); + public static final NTMMaterial MAT_ALLOY = makeSmeltable(_AS + 2, ALLOY, 0xFF8330, 0x700000, 0xFF7318).setAutogen(WIRE, DUST, DENSEWIRE, PLATE, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_DURA = makeSmeltable(_AS + 3, DURA, 0x183039, 0x030B0B, 0x376373).setAutogen(BOLT, DUST, PIPE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, GRIP).m(); + public static final NTMMaterial MAT_DESH = makeSmeltable(_AS + 12, DESH, 0xFF6D6D, 0x720000, 0xF22929).setAutogen(DUST, CASTPLATE, BLOCK, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_STAR = makeSmeltable(_AS + 5, STAR, 0xCCCCEA, 0x11111A, 0xA5A5D3).setAutogen(DUST, DENSEWIRE, BLOCK).m(); public static final NTMMaterial MAT_FERRO = makeSmeltable(_AS + 7, FERRO, 0xB7B7C9, 0x101022, 0x6B6B8B).m(); - public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setShapes(DUST, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setShapes(CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); - public static final NTMMaterial MAT_BBRONZE = makeSmeltable(_AS + 16, BBRONZE, 0xE19A69, 0x485353, 0x987D65).setShapes(CASTPLATE).m(); - public static final NTMMaterial MAT_ABRONZE = makeSmeltable(_AS + 17, ABRONZE, 0xDB9462, 0x203331, 0x77644D).setShapes(CASTPLATE).m(); - public static final NTMMaterial MAT_BSCCO = makeSmeltable(_AS + 18, BSCCO, 0x767BF1, 0x000000, 0x5E62C0).setShapes(DENSEWIRE).m(); - public static final NTMMaterial MAT_MAGTUNG = makeSmeltable(_AS + 8, MAGTUNG, 0x22A2A2, 0x0F0F0F, 0x22A2A2).setShapes(WIRE, DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setShapes(DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK).m(); - public static final NTMMaterial MAT_DNT = makeSmeltable(_AS + 15, DNT, 0x7582B9, 0x16000E, 0x455289).setShapes(DUST, DENSEWIRE, BLOCK).m(); - public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setShapes(DUST).n(); - public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setShapes(BLOCK).n(); + public static final NTMMaterial MAT_TCALLOY = makeSmeltable(_AS + 6, TCALLOY, 0xD4D6D6, 0x323D3D, 0x9CA6A6).setAutogen(DUST, CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_CDALLOY = makeSmeltable(_AS + 13, CDALLOY, 0xF7DF8F, 0x604308, 0xFBD368).setAutogen(CASTPLATE, WELDEDPLATE, HEAVY_COMPONENT).m(); + public static final NTMMaterial MAT_BBRONZE = makeSmeltable(_AS + 16, BBRONZE, 0xE19A69, 0x485353, 0x987D65).setAutogen(CASTPLATE).m(); + public static final NTMMaterial MAT_ABRONZE = makeSmeltable(_AS + 17, ABRONZE, 0xDB9462, 0x203331, 0x77644D).setAutogen(CASTPLATE).m(); + public static final NTMMaterial MAT_BSCCO = makeSmeltable(_AS + 18, BSCCO, 0x767BF1, 0x000000, 0x5E62C0).setAutogen(DENSEWIRE).m(); + public static final NTMMaterial MAT_MAGTUNG = makeSmeltable(_AS + 8, MAGTUNG, 0x22A2A2, 0x0F0F0F, 0x22A2A2).setAutogen(WIRE, DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_CMB = makeSmeltable(_AS + 9, CMB, 0x6F6FB4, 0x000011, 0x6F6FB4).setAutogen(DUST, PLATE, CASTPLATE, WELDEDPLATE, BLOCK).m(); + public static final NTMMaterial MAT_DNT = makeSmeltable(_AS + 15, DNT, 0x7582B9, 0x16000E, 0x455289).setAutogen(DUST, DENSEWIRE, BLOCK).m(); + public static final NTMMaterial MAT_FLUX = makeAdditive(_AS + 10, df("Flux"), 0xF1E0BB, 0x6F6256, 0xDECCAD).setAutogen(DUST).n(); + public static final NTMMaterial MAT_SLAG = makeSmeltable(_AS + 11, SLAG, 0x554940, 0x34281F, 0x6C6562).setAutogen(BLOCK).n(); public static final NTMMaterial MAT_MUD = makeSmeltable(_AS + 14, MUD, 0xBCB5A9, 0x481213, 0x96783B).n(); - public static final NTMMaterial MAT_GUNMETAL = makeSmeltable(_AS + 19, GUNMETAL, 0xFFEF3F, 0xAD3600, 0xF9C62C).setShapes(LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).n(); - public static final NTMMaterial MAT_WEAPONSTEEL = makeSmeltable(_AS + 20, WEAPONSTEEL, 0xA0A0A0, 0x000000, 0x808080).setShapes(LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).n(); - public static final NTMMaterial MAT_SATURN = makeSmeltable(_AS + 4, BIGMT, 0x3AC4DA, 0x09282C, 0x30A4B7).setShapes(PLATE, CASTPLATE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).m(); + public static final NTMMaterial MAT_GUNMETAL = makeSmeltable(_AS + 19, GUNMETAL, 0xFFEF3F, 0xAD3600, 0xF9C62C).setAutogen(LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).n(); + public static final NTMMaterial MAT_WEAPONSTEEL = makeSmeltable(_AS + 20, WEAPONSTEEL, 0xA0A0A0, 0x000000, 0x808080).setAutogen(LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).n(); + public static final NTMMaterial MAT_SATURN = makeSmeltable(_AS + 4, BIGMT, 0x3AC4DA, 0x09282C, 0x30A4B7).setAutogen(PLATE, CASTPLATE, BLOCK, LIGHTBARREL, HEAVYBARREL, LIGHTRECEIVER, HEAVYRECEIVER, MECHANISM, STOCK, GRIP).m(); //Extension - public static final NTMMaterial MAT_RAREEARTH = makeNonSmeltable(_ES + 00, RAREEARTH, 0xC1BDBD, 0x384646, 0x7B7F7F).setShapes(FRAGMENT).n(); + public static final NTMMaterial MAT_RAREEARTH = makeNonSmeltable(_ES + 00, RAREEARTH, 0xC1BDBD, 0x384646, 0x7B7F7F).setAutogen(FRAGMENT).n(); public static NTMMaterial makeSmeltable(int id, DictFrame dict, int color) { return makeSmeltable(id, dict, color, color, color); } diff --git a/src/main/java/com/hbm/inventory/material/NTMMaterial.java b/src/main/java/com/hbm/inventory/material/NTMMaterial.java index 193ad939a..7f15f1bed 100644 --- a/src/main/java/com/hbm/inventory/material/NTMMaterial.java +++ b/src/main/java/com/hbm/inventory/material/NTMMaterial.java @@ -18,7 +18,7 @@ public class NTMMaterial { public final int id; public String[] names; - public Set shapes = new HashSet(); + public Set autogen = new HashSet(); public Set traits = new HashSet(); public SmeltingBehavior smeltable = SmeltingBehavior.NOT_SMELTABLE; public int solidColorLight = 0xFF4A00; @@ -58,8 +58,8 @@ public class NTMMaterial { } /** Shapes for autogen */ - public NTMMaterial setShapes(MaterialShapes... shapes) { - for(MaterialShapes shape : shapes) this.shapes.add(shape); + public NTMMaterial setAutogen(MaterialShapes... shapes) { + for(MaterialShapes shape : shapes) this.autogen.add(shape); return this; } diff --git a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java index 01475b4ac..805be6ed7 100644 --- a/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AssemblerRecipes.java @@ -1285,7 +1285,7 @@ public class AssemblerRecipes extends SerializableRecipe { } for(NTMMaterial mat : Mats.orderedList) { - if(mat.shapes.contains(MaterialShapes.CASTPLATE) && mat.shapes.contains(MaterialShapes.HEAVY_COMPONENT)) { + if(mat.autogen.contains(MaterialShapes.CASTPLATE) && mat.autogen.contains(MaterialShapes.HEAVY_COMPONENT)) { makeRecipe(new ComparableStack(ModItems.heavy_component, 1, mat.id), new AStack[] { new OreDictStack(MaterialShapes.CASTPLATE.name() + mat.names[0], 256) }, 12_000); } } diff --git a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java index a2907a600..d9ccaf232 100644 --- a/src/main/java/com/hbm/inventory/recipes/PressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/PressRecipes.java @@ -33,6 +33,7 @@ import net.minecraft.init.Blocks; import net.minecraft.init.Items; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; +import net.minecraftforge.oredict.OreDictionary; public class PressRecipes extends SerializableRecipe { @@ -94,7 +95,7 @@ public class PressRecipes extends SerializableRecipe { makeRecipe(StampType.C50, new OreDictStack(WEAPONSTEEL.plate()), DictFrame.fromOne(ModItems.casing, EnumCasingType.LARGE_STEEL, 2)); for(NTMMaterial mat : Mats.orderedList) { - if(mat.shapes.contains(MaterialShapes.WIRE) && mat.shapes.contains(MaterialShapes.INGOT)) { + if(mat.autogen.contains(MaterialShapes.WIRE) && OreDictionary.doesOreNameExist(MaterialShapes.INGOT.make(mat))) { makeRecipe(StampType.WIRE, new OreDictStack(MaterialShapes.INGOT.make(mat)), new ItemStack(ModItems.wire_fine, 8, mat.id)); } } diff --git a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java index ff6591a4a..767950bd8 100644 --- a/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/anvil/AnvilRecipes.java @@ -150,7 +150,7 @@ public class AnvilRecipes { constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(DURA.ingot()), new AnvilOutput(new ItemStack(ModItems.plate_dura_steel))).setTier(3)); for(NTMMaterial mat : Mats.orderedList) { - if(mat.shapes.contains(MaterialShapes.WIRE) && mat.shapes.contains(MaterialShapes.INGOT)) { + if(mat.autogen.contains(MaterialShapes.WIRE) && OreDictionary.doesOreNameExist(MaterialShapes.INGOT.make(mat))) { constructionRecipes.add(new AnvilConstructionRecipe(new OreDictStack(MaterialShapes.INGOT.name() + mat.names[0]), new AnvilOutput(new ItemStack(ModItems.wire_fine, 8, mat.id))).setTier(4)); } } @@ -181,10 +181,10 @@ public class AnvilRecipes { new AStack[] {new OreDictStack(DNT.ingot(), 4), new ComparableStack(ModBlocks.depth_brick)}, new AnvilOutput(new ItemStack(ModBlocks.depth_dnt))).setTier(1916169)); - for(NTMMaterial mat : Mats.orderedList) if(mat.shapes.contains(MaterialShapes.SHELL)) constructionRecipes.add(new AnvilConstructionRecipe( + for(NTMMaterial mat : Mats.orderedList) if(mat.autogen.contains(MaterialShapes.SHELL)) constructionRecipes.add(new AnvilConstructionRecipe( new OreDictStack(MaterialShapes.PLATE.name() + mat.names[0], 4), new AnvilOutput(new ItemStack(ModItems.shell, 1, mat.id))).setTier(1)); - for(NTMMaterial mat : Mats.orderedList) if(mat.shapes.contains(MaterialShapes.PIPE)) constructionRecipes.add(new AnvilConstructionRecipe( + for(NTMMaterial mat : Mats.orderedList) if(mat.autogen.contains(MaterialShapes.PIPE)) constructionRecipes.add(new AnvilConstructionRecipe( new OreDictStack(MaterialShapes.PLATE.name() + mat.names[0], 3), new AnvilOutput(new ItemStack(ModItems.pipe, 1, mat.id))).setTier(1)); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index b67427f9f..b9766ce79 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1622,6 +1622,7 @@ public class ModItems { public static Item gun_quadro; public static Item gun_minigun; public static Item gun_missile_launcher; + public static Item gun_tesla_cannon; public static Item ammo_standard; @@ -6981,6 +6982,7 @@ public class ModItems { GameRegistry.registerItem(gun_quadro, gun_quadro.getUnlocalizedName()); GameRegistry.registerItem(gun_minigun, gun_minigun.getUnlocalizedName()); GameRegistry.registerItem(gun_missile_launcher, gun_missile_launcher.getUnlocalizedName()); + GameRegistry.registerItem(gun_tesla_cannon, gun_tesla_cannon.getUnlocalizedName()); GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/special/ItemAutogen.java b/src/main/java/com/hbm/items/special/ItemAutogen.java index ea2be4db1..b828c9d2b 100644 --- a/src/main/java/com/hbm/items/special/ItemAutogen.java +++ b/src/main/java/com/hbm/items/special/ItemAutogen.java @@ -52,7 +52,7 @@ public class ItemAutogen extends Item { TextureMap map = (TextureMap) reg; for(NTMMaterial mat : Mats.orderedList) { - if(!textureOverrides.containsKey(mat) && mat.solidColorLight != mat.solidColorDark && (shape == null || mat.shapes.contains(shape))) { //only generate icons if there is no override, color variation is available and if the icon will actually be used + if(!textureOverrides.containsKey(mat) && mat.solidColorLight != mat.solidColorDark && (shape == null || mat.autogen.contains(shape))) { //only generate icons if there is no override, color variation is available and if the icon will actually be used String placeholderName = this.getIconString() + "-" + mat.names[0]; //the part after the dash is discarded - the name only has to be unique so that the hashmap which holds all the icon definitions can hold multiple references TextureAtlasSpriteMutatable mutableIcon = new TextureAtlasSpriteMutatable(placeholderName, new RGBMutatorInterpolatedComponentRemap(0xFFFFFF, 0x505050, mat.solidColorLight, mat.solidColorDark)); map.setTextureEntry(placeholderName, mutableIcon); @@ -71,7 +71,7 @@ public class ItemAutogen extends Item { public void getSubItems(Item item, CreativeTabs tab, List list) { for(NTMMaterial mat : Mats.orderedList) { - if(mat.shapes.contains(this.shape)) { + if(mat.autogen.contains(this.shape)) { list.add(new ItemStack(item, 1, mat.id)); } } diff --git a/src/main/java/com/hbm/items/weapon/GunB92Cell.java b/src/main/java/com/hbm/items/weapon/GunB92Cell.java index eac40f6f3..282e228d3 100644 --- a/src/main/java/com/hbm/items/weapon/GunB92Cell.java +++ b/src/main/java/com/hbm/items/weapon/GunB92Cell.java @@ -38,7 +38,7 @@ public class GunB92Cell extends Item { list.add("Draws energy from the B92, allowing you to"); list.add("reload it an additional 25 times."); - list.add("The cell will permanently hold it's charge,"); + list.add("The cell will permanently hold its charge,"); list.add("it is not meant to be used as a battery enhancement"); list.add("for the B92, but rather as a bomb."); list.add(""); diff --git a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java index 70053a148..77a08d1fd 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -25,11 +25,11 @@ import net.minecraft.util.Vec3; import net.minecraft.world.WorldServer; import net.minecraftforge.common.util.ForgeDirection; -public class BulletConfig { +public class BulletConfig implements Cloneable { public static List configs = new ArrayList(); - public final int id; + public int id; public ComparableStack ammo; /** How much ammo is added to a standard mag when loading one item */ @@ -76,6 +76,13 @@ public class BulletConfig { this.id = configs.size(); configs.add(this); } + + /** Required for the clone() operation to reset the ID, otherwise the ID and config entry will be the same as the original */ + public BulletConfig forceReRegister() { + this.id = configs.size(); + configs.add(this); + return this; + } public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } public BulletConfig setItem(EnumAmmo ammo) { this.ammo = new ComparableStack(ModItems.ammo_standard, 1, ammo.ordinal()); return this; } @@ -193,4 +200,14 @@ public class BulletConfig { } } }; + + @Override + public BulletConfig clone() { + try { + BulletConfig clone = (BulletConfig) super.clone(); + clone.forceReRegister(); + return clone; + } catch(CloneNotSupportedException e) { } + return null; + } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index f93da0840..10af203e0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -4,7 +4,6 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; -import com.hbm.handler.CasingEjector; import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.interfaces.IItemHUD; import com.hbm.items.IEquipReceiver; @@ -14,7 +13,6 @@ import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; -import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; @@ -22,7 +20,6 @@ import com.hbm.sound.AudioWrapper; import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; -import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.Minecraft; @@ -97,7 +94,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei A_SIDE, B_SIDE, LEGENDARY, - SEPCIAL, + SPECIAL, SECRET, DEBUG } @@ -128,7 +125,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei case A_SIDE: list.add(EnumChatFormatting.YELLOW + "Standard Arsenal"); break; case B_SIDE: list.add(EnumChatFormatting.GOLD + "B-Side"); break; case LEGENDARY: list.add(EnumChatFormatting.RED + "Legendary Weapon"); break; - case SEPCIAL: list.add(EnumChatFormatting.AQUA + "Special Weapon"); break; + case SPECIAL: list.add(EnumChatFormatting.AQUA + "Special Weapon"); break; case SECRET: list.add(EnumChatFormatting.DARK_RED + "SECRET"); break; case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break; } @@ -244,22 +241,6 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei if(timer <= 1) configs[i].getDecider(stack).accept(stack, ctx[i]); } } - - public static void trySpawnCasing(Entity entity, CasingEjector ejector, BulletConfig bullet, ItemStack stack) { - - if(ejector == null) return; //abort if the gun can't eject bullets at all - if(bullet == null) return; //abort if there's no valid bullet cfg - if(bullet.casing == null) return; //abort if the bullet is caseless - - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "casing"); - data.setFloat("pitch", (float) Math.toRadians(entity.rotationPitch)); - data.setFloat("yaw", (float) Math.toRadians(entity.rotationYaw)); - data.setBoolean("crouched", entity.isSneaking()); - data.setString("name", bullet.casing.getName()); - data.setInteger("ej", ejector.getId()); - PacketDispatcher.wrapper.sendToAllAround(new AuxParticlePacketNT(data, entity.posX, entity.posY + entity.getEyeHeight(), entity.posZ), new TargetPoint(entity.dimension, entity.posX, entity.posY, entity.posZ, 50)); - } // GUN DRAWN // public static boolean getIsDrawn(ItemStack stack) { return getValueBool(stack, KEY_DRAWN); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 907942666..a0eb311e0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java @@ -27,7 +27,7 @@ public class GunFactory { /// AMMO ITEMS /// ModItems.ammo_debug = new Item().setUnlocalizedName("ammo_debug").setTextureName(RefStrings.MODID + ":ammo_45"); - ModItems.ammo_standard = new ItemEnumMulti(EnumAmmo.class, true, true).setUnlocalizedName("ammo_standard").setTextureName(RefStrings.MODID + ":ammo_standard"); + ModItems.ammo_standard = new ItemEnumMulti(EnumAmmo.class, true, true).setUnlocalizedName("ammo_standard").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":ammo_standard"); /// BULLLET CFGS /// ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug).setSpread(0.01F).setRicochetAngle(45).setCasing(CASING44.clone().register("DEBUG0")); @@ -58,6 +58,7 @@ public class GunFactory { XFactoryRocket.init(); XFactory556mm.init(); XFactory50.init(); + XFactoryEnergy.init(); /// PROXY BULLSHIT /// MainRegistry.proxy.registerGunCfg(); @@ -73,9 +74,10 @@ public class GunFactory { R762_SP, R762_FMJ, R762_JHP, R762_AP, R762_DU, BMG50_SP, BMG50_FMJ, BMG50_JHP, BMG50_AP, BMG50_DU, G12_BP, G12_BP_MAGNUM, G12_BP_SLUG, G12, G12_SLUG, G12_FLECHETTE, G12_MAGNUM, G12_EXPLOSIVE, G12_PHOSPHORUS, G12_ANTHRAX, - G40_FLARE, G40, - ROCKET_HE, ROCKET_HEAT, - FLAME_DIESEL, + G26_FLARE, + G40_HE, G40_HEAT, G40_DEMO, G40_INC, G40_PHOSPHORUS, + ROCKET_HE, ROCKET_HEAT, ROCKET_DEMO, ROCKET_INC, ROCKET_PHOSPHORUS, + FLAME_DIESEL, FLAME_GAS, FLAME_NAPALM, FLAME_BALEFIRE, M44_EQUESTRIAN, G12_EQUESTRIAN, BMG50_EQUESTRIAN } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index f2e390e0a..8ac90fb2f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -13,7 +13,11 @@ import static com.hbm.items.weapon.sedna.factory.XFactory9mm.*; import static com.hbm.items.weapon.sedna.factory.XFactoryBlackPowder.*; import static com.hbm.items.weapon.sedna.factory.XFactoryRocket.*; +import java.util.function.BiConsumer; + +import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.main.ResourceManager; import com.hbm.render.item.weapon.sedna.*; @@ -54,28 +58,56 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_quadro, new ItemRenderQuadro()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_minigun, new ItemRenderMinigun()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_missile_launcher, new ItemRenderMissileLauncher()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_tesla_cannon, new ItemRenderTeslaCannon()); //PROJECTILES ammo_debug.setRenderer(LegoClient.RENDER_STANDARD_BULLET); ammo_debug_buckshot.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + stone.setRenderer(LegoClient.RENDER_STANDARD_BULLET); flint.setRenderer(LegoClient.RENDER_STANDARD_BULLET); iron.setRenderer(LegoClient.RENDER_STANDARD_BULLET); shot.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + m357_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); m357_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); m357_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); m357_ap.setRenderer(LegoClient.RENDER_AP_BULLET); m357_express.setRenderer(LegoClient.RENDER_EXPRESS_BULLET); + m44_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); m44_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); m44_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); m44_ap.setRenderer(LegoClient.RENDER_AP_BULLET); m44_express.setRenderer(LegoClient.RENDER_EXPRESS_BULLET); m44_equestrian.setRenderer(LegoClient.RENDER_LEGENDARY_BULLET); + + p22_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + p22_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + p22_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + p22_ap.setRenderer(LegoClient.RENDER_AP_BULLET); + p9_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); p9_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); p9_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); p9_ap.setRenderer(LegoClient.RENDER_AP_BULLET); + + r556_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + r556_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + r556_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + r556_ap.setRenderer(LegoClient.RENDER_AP_BULLET); + + r762_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + r762_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + r762_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + r762_ap.setRenderer(LegoClient.RENDER_AP_BULLET); + r762_du.setRenderer(LegoClient.RENDER_DU_BULLET); + + bmg50_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + bmg50_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + bmg50_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); + bmg50_ap.setRenderer(LegoClient.RENDER_AP_BULLET); + bmg50_du.setRenderer(LegoClient.RENDER_DU_BULLET); + g12_bp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); g12_bp_magnum.setRenderer(LegoClient.RENDER_STANDARD_BULLET); g12_bp_slug.setRenderer(LegoClient.RENDER_STANDARD_BULLET); @@ -87,32 +119,14 @@ public class GunFactoryClient { g12_phosphorus.setRenderer(LegoClient.RENDER_AP_BULLET); g12_anthrax.setRenderer(LegoClient.RENDER_STANDARD_BULLET); g12_equestrian.setRenderer(LegoClient.RENDER_LEGENDARY_BULLET); - r762_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - r762_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - r762_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - r762_ap.setRenderer(LegoClient.RENDER_AP_BULLET); - r762_du.setRenderer(LegoClient.RENDER_DU_BULLET); - p22_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - p22_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - p22_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - p22_ap.setRenderer(LegoClient.RENDER_AP_BULLET); - g40_flare.setRenderer(LegoClient.RENDER_FLARE); - g40.setRenderer(LegoClient.RENDER_GRENADE); - rocket_rpzb_he.setRenderer(LegoClient.RENDER_RPZB); - rocket_rpzb_heat.setRenderer(LegoClient.RENDER_RPZB); - rocket_qd_he.setRenderer(LegoClient.RENDER_QD); - rocket_qd_heat.setRenderer(LegoClient.RENDER_QD); - rocket_ml_he.setRenderer(LegoClient.RENDER_ML); - rocket_ml_heat.setRenderer(LegoClient.RENDER_ML); - r556_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - r556_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - r556_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - r556_ap.setRenderer(LegoClient.RENDER_AP_BULLET); - bmg50_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - bmg50_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - bmg50_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); - bmg50_ap.setRenderer(LegoClient.RENDER_AP_BULLET); - bmg50_du.setRenderer(LegoClient.RENDER_DU_BULLET); + + g26_flare.setRenderer(LegoClient.RENDER_FLARE); + + setRendererBulk(LegoClient.RENDER_GRENADE, g40_he, g40_heat, g40_demo, g40_inc); + + setRendererBulk(LegoClient.RENDER_RPZB, rocket_rpzb); + setRendererBulk(LegoClient.RENDER_QD, rocket_qd); + setRendererBulk(LegoClient.RENDER_ML, rocket_ml); //HUDS ((ItemGunBaseNT) ModItems.gun_debug) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_pepperbox) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); @@ -142,10 +156,15 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_quadro) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_minigun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_missile_launcher) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_tesla_cannon) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_light_revolver_dani) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); ((ItemGunBaseNT) ModItems.gun_light_revolver_dani) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_maresleg_akimbo) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY_MIRROR, LegoClient.HUD_COMPONENT_AMMO_MIRROR); ((ItemGunBaseNT) ModItems.gun_maresleg_akimbo) .getConfig(null, 1).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); } + + public static void setRendererBulk(BiConsumer renderer, BulletConfig... configs) { + for(BulletConfig config : configs) config.setRenderer(renderer); + } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java index 5a17fd923..692a9bf69 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Orchestras.java @@ -851,4 +851,27 @@ public class Orchestras { if(timer == 27) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.boltClose", 1F, 0.9F); } }; + + public static BiConsumer ORCHESTRA_TESLA = (stack, ctx) -> { + EntityLivingBase entity = ctx.entity; + if(entity.worldObj.isRemote) return; + AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + + if(type == AnimType.CYCLE) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.shredderCycle", 0.25F, 1.5F); + } + if(type == AnimType.CYCLE_DRY) { + if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 1F); + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.fire.shredderCycle", 0.25F, 1.5F); + } + if(type == AnimType.RELOAD) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); + if(timer == 32) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + } + if(type == AnimType.INSPECT) { + if(timer == 2) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magRemove", 1F, 1F); + if(timer == 28) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.magInsert", 1F, 1F); + } + }; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java index 830bbf708..b53280475 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java @@ -3,7 +3,15 @@ package com.hbm.items.weapon.sedna.factory; import java.util.function.BiConsumer; import java.util.function.BiFunction; +import com.hbm.entity.effect.EntityFireLingering; import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; +import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -23,28 +31,87 @@ import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class XFactory40mm { - public static BulletConfig g40_flare; - public static BulletConfig g40; - + public static BulletConfig g26_flare; + public static BulletConfig g40_he; + public static BulletConfig g40_heat; + public static BulletConfig g40_demo; + public static BulletConfig g40_inc; + + public static BiConsumer LAMBDA_STANDARD_IGNITE = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY) { + if(mop.entityHit instanceof EntityLivingBase) { + HbmLivingProps props = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); + props.fire += 200; + } + } + }; public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); bullet.setDead(); }; + public static BiConsumer LAMBDA_STANDARD_EXPLODE_HEAT = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; + Lego.standardExplode(bullet, mop, 2.5F); bullet.setDead(); + }; + public static BiConsumer LAMBDA_STANDARD_EXPLODE_DEMO = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; + ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 5F); + vnt.setBlockAllocator(new BlockAllocatorStandard()); + vnt.setBlockProcessor(new BlockProcessorStandard()); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); + vnt.explode(); + bullet.setDead(); + }; + public static BiConsumer LAMBDA_STANDARD_EXPLODE_INC = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; + World world = bullet.worldObj; + Lego.standardExplode(bullet, mop, 3F); + EntityFireLingering fire = new EntityFireLingering(world).setArea(5, 2).setDuration(200).setType(EntityFireLingering.TYPE_DIESEL); + fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); + world.spawnEntityInWorld(fire); + bullet.setDead(); + for(int dx = -1; dx <= 1; dx++) { + for(int dy = -1; dy <= 1; dy++) { + for(int dz = -2; dz <= 2; dz++) { + int x = (int) Math.floor(mop.hitVec.xCoord) + dx; + int y = (int) Math.floor(mop.hitVec.yCoord) + dy; + int z = (int) Math.floor(mop.hitVec.zCoord) + dz; + if(world.getBlock(x, y, z).isAir(bullet.worldObj, x, y, z)) for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ).isFlammable(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir.getOpposite())) { + world.setBlock(x, y, z, Blocks.fire); + break; + } + } + } + } + } + }; public static void init() { - g40_flare = new BulletConfig().setItem(EnumAmmo.G40_FLARE).setLife(100).setVel(2F).setGrav(0.035D).setRenderRotations(false).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x9E1616).setScale(2F).register("G40Flare")); - g40 = new BulletConfig().setItem(EnumAmmo.G40).setLife(200).setOnImpact(LAMBDA_STANDARD_EXPLODE).setVel(2F).setGrav(0.035D).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(SpentCasing.COLOR_CASE_40MM).setScale(2, 2F, 1.5F).register("G40")); + g26_flare = new BulletConfig().setItem(EnumAmmo.G26_FLARE).setLife(100).setVel(2F).setGrav(0.035D).setRenderRotations(false).setOnImpact(LAMBDA_STANDARD_IGNITE).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x9E1616).setScale(2F).register("G40Flare")); + + BulletConfig g40_base = new BulletConfig().setLife(200).setVel(2F).setGrav(0.035D); + g40_he = g40_base.clone().setItem(EnumAmmo.G40_HE).setOnImpact(LAMBDA_STANDARD_EXPLODE).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x777777).setScale(2, 2F, 1.5F).register("g40")); + g40_heat = g40_base.clone().setItem(EnumAmmo.G40_HEAT).setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x5E6854).setScale(2, 2F, 1.5F).register("g40heat")); + g40_demo = g40_base.clone().setItem(EnumAmmo.G40_DEMO).setOnImpact(LAMBDA_STANDARD_EXPLODE_DEMO).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0xE30000).setScale(2, 2F, 1.5F).register("g40demo")); + g40_inc = g40_base.clone().setItem(EnumAmmo.G40_INC).setOnImpact(LAMBDA_STANDARD_EXPLODE_INC).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0xE86F20).setScale(2, 2F, 1.5F).register("g40inc")); ModItems.gun_flaregun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(100).draw(7).inspect(39).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(15F).delay(20).reload(28).jam(33).sound("hbm:weapon.hkShoot", 1.0F, 1.0F) - .mag(new MagazineSingleReload(0, 1).addConfigs(g40_flare)) + .mag(new MagazineSingleReload(0, 1).addConfigs(g26_flare)) .offset(0.75, -0.0625, -0.1875D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() @@ -55,7 +122,7 @@ public class XFactory40mm { .dura(400).draw(7).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(30F).delay(24).reload(16, 16, 16, 0).jam(0).sound("hbm:weapon.glShoot", 1.0F, 1.0F) - .mag(new MagazineSingleReload(0, 4).addConfigs(g40, g40_flare)) + .mag(new MagazineSingleReload(0, 4).addConfigs(g40_he, g40_heat, g40_demo, g40_inc)) .offset(0.75, -0.0625, -0.1875D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java index c32ce1092..60e3182b0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java @@ -32,6 +32,7 @@ public class XFactoryBlackPowder { .rec(new Receiver(0) .dmg(5F).delay(27).reload(67).jam(58).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(stone, flint, iron, shot)) + .offset(0.75, -0.0625, -0.1875D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_PEPPERBOX_ANIMS).orchestra(Orchestras.ORCHESTRA_PEPPERBOX) diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java new file mode 100644 index 000000000..e7688b019 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -0,0 +1,66 @@ +package com.hbm.items.weapon.sedna.factory; + +import java.util.function.BiFunction; + +import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.items.weapon.sedna.Crosshair; +import com.hbm.items.weapon.sedna.GunConfig; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; +import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; +import com.hbm.items.weapon.sedna.mags.MagazineBelt; +import com.hbm.render.anim.BusAnimation; +import com.hbm.render.anim.BusAnimationSequence; +import com.hbm.render.anim.BusAnimationKeyframe.IType; +import com.hbm.render.anim.HbmAnimations.AnimType; + +import net.minecraft.item.ItemStack; + +public class XFactoryEnergy { + + public static BulletConfig energy_tesla; + + public static void init() { + + energy_tesla = new BulletConfig().setItem(EnumAmmo.P9_SP).setSpread(0.01F); + + ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() + .dura(2_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .rec(new Receiver(0) + .dmg(15F).delay(10).reload(44).jam(19).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .mag(new MagazineBelt().addConfigs(energy_tesla)) + .offset(0.75, -0.125, -0.25) + .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardConfiguration() + .anim(LAMBDA_TESLA_ANIMS).orchestra(Orchestras.ORCHESTRA_TESLA) + ).setUnlocalizedName("gun_tesla_cannon"); + } + + @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_TESLA_ANIMS = (stack, type) -> { + switch(type) { + case EQUIP: return new BusAnimation() + .addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_DOWN)); + case CYCLE: return new BusAnimation() + .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, -1, 50, IType.SIN_DOWN).addPos(0, 0, 0, 150, IType.SIN_FULL)) + .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 0, 150).addPos(0, 0, 18, 100)); + case CYCLE_DRY: return new BusAnimation() + .addBus("CYCLE", new BusAnimationSequence().addPos(0, 0, 0, 150).addPos(0, 0, 18, 100)); + case RELOAD: return new BusAnimation() + .addBus("MAG", new BusAnimationSequence().addPos(0, -8, 0, 250, IType.SIN_UP).addPos(0, -8, 0, 1000).addPos(0, 0, 0, 300)) + .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 750).addPos(-25, 0, 0, 300, IType.SIN_FULL).addPos(-25, 0, 0, 500).addPos(-27, 0, 0, 100, IType.SIN_DOWN).addPos(-25, 0, 0, 100, IType.SIN_FULL).addPos(-25, 0, 0, 150).addPos(0, 0, 0, 300, IType.SIN_FULL)); + case JAMMED: return new BusAnimation() + .addBus("MAG", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(0, -2, 0, 150, IType.SIN_UP).addPos(0, 0, 0, 100)) + .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 750).addPos(-2, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)); + case INSPECT: return new BusAnimation() + .addBus("MAG", new BusAnimationSequence() + .addPos(0, -1, 0, 150).addPos(6, -1, 0, 150).addPos(6, 12, 0, 350, IType.SIN_DOWN).addPos(6, -2, 0, 350, IType.SIN_UP).addPos(6, -1, 0, 50) + .addPos(6, -1, 0, 100).addPos(0, -1, 0, 150, IType.SIN_FULL).addPos(0, 0, 0, 150, IType.SIN_UP)) + .addBus("SPEEN", new BusAnimationSequence().addPos(0, 0, 0, 300).addPos(360, 0, 0, 700)) + .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 1450).addPos(-2, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)); + } + + return null; + }; +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java index e98eb9637..24b55823a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java @@ -1,7 +1,13 @@ package com.hbm.items.weapon.sedna.factory; +import java.util.List; +import java.util.function.BiConsumer; import java.util.function.BiFunction; +import java.util.function.Consumer; +import com.hbm.entity.effect.EntityFireLingering; +import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.extprop.HbmLivingProps; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -15,36 +21,92 @@ import com.hbm.items.weapon.sedna.mags.MagazineFluid; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; +import com.hbm.particle.helper.FlameCreator; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +import net.minecraft.block.Block; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.AxisAlignedBB; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class XFactoryFlamer { - + public static BulletConfig flame_diesel; + public static BulletConfig flame_gas; + public static BulletConfig flame_napalm; + public static BulletConfig flame_balefire; + public static BulletConfig flame_digamma; + + public static Consumer LAMBDA_FIRE = (bullet) -> { + if(bullet.worldObj.isRemote && MainRegistry.proxy.me().getDistanceToEntity(bullet) < 100) FlameCreator.composeEffectClient(bullet.worldObj, bullet.posX, bullet.posY - 0.125, bullet.posZ, FlameCreator.META_FIRE); + }; + public static Consumer LAMBDA_BALEFIRE = (bullet) -> { + if(bullet.worldObj.isRemote && MainRegistry.proxy.me().getDistanceToEntity(bullet) < 100) FlameCreator.composeEffectClient(bullet.worldObj, bullet.posX, bullet.posY - 0.125, bullet.posZ, FlameCreator.META_BALEFIRE); + }; + public static BiConsumer LAMBDA_IGNITE_FIRE = (bullet, mop) -> { + if(mop.entityHit instanceof EntityLivingBase) { + HbmLivingProps props = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); + if(props.fire < 100) props.fire = 100; + } + }; + public static BiConsumer LAMBDA_IGNITE_BALEFIRE = (bullet, mop) -> { + if(mop.entityHit instanceof EntityLivingBase) { + HbmLivingProps props = HbmLivingProps.getData((EntityLivingBase) mop.entityHit); + if(props.balefire < 200) props.balefire = 200; + } + }; + public static BiConsumer LAMBDA_LINGER_DIESEL = (bullet, mop) -> { if(!igniteIfPossible(bullet, mop)) spawnFire(bullet, mop, 2F, 1F, 100, EntityFireLingering.TYPE_DIESEL); }; + public static BiConsumer LAMBDA_LINGER_GAS = (bullet, mop) -> { igniteIfPossible(bullet, mop); }; + public static BiConsumer LAMBDA_LINGER_NAPALM = (bullet, mop) -> { if(!igniteIfPossible(bullet, mop)) spawnFire(bullet, mop, 2.5F, 1F, 200, EntityFireLingering.TYPE_DIESEL); }; + public static BiConsumer LAMBDA_LINGER_BALEFIRE = (bullet, mop) -> { spawnFire(bullet, mop, 3F, 1F, 300, EntityFireLingering.TYPE_BALEFIRE); }; + + public static boolean igniteIfPossible(EntityBulletBaseMK4 bullet, MovingObjectPosition mop) { + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { + World world = bullet.worldObj; + Block b = world.getBlock(mop.blockX, mop.blockY, mop.blockZ); + ForgeDirection dir = ForgeDirection.getOrientation(mop.sideHit); + if(b.isFlammable(world, mop.blockX, mop.blockY, mop.blockZ, dir.getOpposite())) { + if(world.getBlock(mop.blockX + dir.offsetX, mop.blockY + dir.offsetY, mop.blockZ + dir.offsetZ).isAir(world, mop.blockX + dir.offsetX, mop.blockY + dir.offsetY, mop.blockZ + dir.offsetZ)) { + world.setBlock(mop.blockX + dir.offsetX, mop.blockY + dir.offsetY, mop.blockZ + dir.offsetZ, Blocks.fire); + return true; + } + } + bullet.setDead(); + } + return false; + } + + public static void spawnFire(EntityBulletBaseMK4 bullet, MovingObjectPosition mop, float width, float height, int duration, int type) { + if(mop.typeOfHit == mop.typeOfHit.BLOCK) { + List fires = bullet.worldObj.getEntitiesWithinAABB(EntityFireLingering.class, + AxisAlignedBB.getBoundingBox(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord).expand(width / 2 + 0.5, height / 2 + 0.5, width / 2 + 0.5)); + if(fires.isEmpty()) { + EntityFireLingering fire = new EntityFireLingering(bullet.worldObj).setArea(width, height).setDuration(duration).setType(type); + fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); + bullet.worldObj.spawnEntityInWorld(fire); + } + bullet.setDead(); + } + } public static void init() { - flame_diesel = new BulletConfig().setItem(EnumAmmo.FLAME_DIESEL).setLife(100).setVel(1F).setGrav(0.02D).setReloadCount(300) - .setOnUpdate((bullet) -> { - if(bullet.worldObj.isRemote && MainRegistry.proxy.me().getDistanceToEntity(bullet) < 100) { - NBTTagCompound data = new NBTTagCompound(); - data.setString("type", "flamethrower"); - data.setDouble("posX", bullet.posX); - data.setDouble("posY", bullet.posY - 0.125); - data.setDouble("posZ", bullet.posZ); - MainRegistry.proxy.effectNT(data); - } - }); + flame_diesel = new BulletConfig().setItem(EnumAmmo.FLAME_DIESEL).setLife(100).setVel(1F).setGrav(0.02D).setReloadCount(300).setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_DIESEL); + flame_gas = new BulletConfig().setItem(EnumAmmo.FLAME_GAS).setLife(10).setSpread(0.05F).setVel(1F).setGrav(0.0D).setReloadCount(300).setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_GAS); + flame_napalm = new BulletConfig().setItem(EnumAmmo.FLAME_NAPALM).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(300).setOnUpdate(LAMBDA_FIRE).setOnRicochet(LAMBDA_LINGER_NAPALM); + flame_balefire = new BulletConfig().setItem(EnumAmmo.FLAME_BALEFIRE).setLife(200).setVel(1F).setGrav(0.02D).setReloadCount(300).setOnUpdate(LAMBDA_BALEFIRE).setOnRicochet(LAMBDA_LINGER_BALEFIRE); ModItems.gun_flamer = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(20_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(1).auto(true).reload(90).jam(17) - .mag(new MagazineFullReload(0, 300).addConfigs(flame_diesel)) + .mag(new MagazineFullReload(0, 300).addConfigs(flame_diesel, flame_gas, flame_napalm, flame_balefire)) .offset(0.75, -0.0625, -0.25D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index bb905aeab..c6d4eb2d7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java @@ -4,7 +4,14 @@ import java.util.function.BiConsumer; import java.util.function.BiFunction; import java.util.function.Consumer; +import com.hbm.entity.effect.EntityFireLingering; import com.hbm.entity.projectile.EntityBulletBaseMK4; +import com.hbm.explosion.vanillant.ExplosionVNT; +import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard; +import com.hbm.explosion.vanillant.standard.BlockProcessorStandard; +import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth; +import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon; +import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -25,29 +32,31 @@ import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.init.Blocks; import net.minecraft.item.ItemStack; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; public class XFactoryRocket { - public static BulletConfig rocket_rpzb_he; - public static BulletConfig rocket_rpzb_heat; - public static BulletConfig rocket_qd_he; - public static BulletConfig rocket_qd_heat; - public static BulletConfig rocket_ml_he; - public static BulletConfig rocket_ml_heat; + public static BulletConfig[] rocket_template; + + public static BulletConfig[] rocket_rpzb; + public static BulletConfig[] rocket_qd; + public static BulletConfig[] rocket_ml; + // FLYING public static Consumer LAMBDA_STANDARD_ACCELERATE = (bullet) -> { if(bullet.accel < 7) bullet.accel += 0.4D; }; public static Consumer LAMBDA_STEERING_ACCELERATE = (bullet) -> { if(bullet.accel < 4) bullet.accel += 0.4D; - if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) return; + EntityPlayer player = (EntityPlayer) bullet.getThrower(); if(Vec3.createVectorHelper(bullet.posX - player.posX, bullet.posY - player.posY, bullet.posZ - player.posZ).lengthVector() > 100) return; - if(player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemGunBaseNT) || !ItemGunBaseNT.getIsAiming(player.getHeldItem())) return; MovingObjectPosition mop = Library.rayTrace(player, 200, 1); @@ -58,40 +67,87 @@ public class XFactoryRocket { vec = vec.normalize(); double speed = Vec3.createVectorHelper(bullet.motionX, bullet.motionY, bullet.motionZ).lengthVector(); - bullet.motionX = vec.xCoord * speed; bullet.motionY = vec.yCoord * speed; bullet.motionZ = vec.zCoord * speed; }; + + // IMPACT public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; Lego.standardExplode(bullet, mop, 5F); bullet.setDead(); }; public static BiConsumer LAMBDA_STANDARD_EXPLODE_HEAT = (bullet, mop) -> { if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; - Lego.standardExplode(bullet, mop, 3F, 0.25F); bullet.setDead(); + Lego.standardExplode(bullet, mop, 2.5F); bullet.setDead(); + }; + public static BiConsumer LAMBDA_STANDARD_EXPLODE_DEMO = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; + ExplosionVNT vnt = new ExplosionVNT(bullet.worldObj, mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, 5F); + vnt.setBlockAllocator(new BlockAllocatorStandard()); + vnt.setBlockProcessor(new BlockProcessorStandard()); + vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, bullet.damage)); + vnt.setPlayerProcessor(new PlayerProcessorStandard()); + vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F)); + vnt.explode(); + bullet.setDead(); + }; + public static BiConsumer LAMBDA_STANDARD_EXPLODE_INC = (bullet, mop) -> { + if(mop.typeOfHit == mop.typeOfHit.ENTITY && bullet.ticksExisted < 3) return; + World world = bullet.worldObj; + Lego.standardExplode(bullet, mop, 3F); + EntityFireLingering fire = new EntityFireLingering(world).setArea(6, 2).setDuration(300).setType(EntityFireLingering.TYPE_DIESEL); + fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); + world.spawnEntityInWorld(fire); + bullet.setDead(); + for(int dx = -2; dx <= 2; dx++) { + for(int dy = -2; dy <= 2; dy++) { + for(int dz = -2; dz <= 2; dz++) { + int x = (int) Math.floor(mop.hitVec.xCoord) + dx; + int y = (int) Math.floor(mop.hitVec.yCoord) + dy; + int z = (int) Math.floor(mop.hitVec.zCoord) + dz; + if(world.getBlock(x, y, z).isAir(bullet.worldObj, x, y, z)) for(ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + if(world.getBlock(x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ).isFlammable(world, x + dir.offsetX, y + dir.offsetY, z + dir.offsetZ, dir.getOpposite())) { + world.setBlock(x, y, z, Blocks.fire); + break; + } + } + } + } + } }; + public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); } + public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); } + public static BulletConfig makeML(BulletConfig original) { return original.clone(); } + + //this is starting to get messy but we need to put this crap *somewhere* and fragmenting it into a billion classes with two methods each just isn't gonna help public static void init() { - rocket_rpzb_he = new BulletConfig().setItem(EnumAmmo.ROCKET_HE).setLife(300).setSelfDamageDelay(10).setVel(0F).setGrav(0D) - .setOnImpact(LAMBDA_STANDARD_EXPLODE).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); - rocket_rpzb_heat = new BulletConfig().setItem(EnumAmmo.ROCKET_HEAT).setLife(300).setDamage(1.5F).setSelfDamageDelay(10).setVel(0F).setGrav(0D) - .setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); - rocket_qd_he = new BulletConfig().setItem(EnumAmmo.ROCKET_HE).setLife(400).setSelfDamageDelay(10).setVel(0F).setGrav(0D) - .setOnImpact(LAMBDA_STANDARD_EXPLODE).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STEERING_ACCELERATE); - rocket_qd_heat = new BulletConfig().setItem(EnumAmmo.ROCKET_HEAT).setLife(400).setDamage(1.5F).setSelfDamageDelay(10).setVel(0F).setGrav(0D) - .setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STEERING_ACCELERATE); - rocket_ml_he = new BulletConfig().setItem(EnumAmmo.ROCKET_HE).setLife(300).setSelfDamageDelay(10).setVel(0F).setGrav(0D) - .setOnImpact(LAMBDA_STANDARD_EXPLODE).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); - rocket_ml_heat = new BulletConfig().setItem(EnumAmmo.ROCKET_HEAT).setLife(300).setDamage(1.5F).setSelfDamageDelay(10).setVel(0F).setGrav(0D) - .setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); + rocket_template = new BulletConfig[4]; + + BulletConfig baseRocket = new BulletConfig().setLife(300).setSelfDamageDelay(10).setVel(0F).setGrav(0D).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); + + rocket_template[0] = baseRocket.clone().setItem(EnumAmmo.ROCKET_HE).setOnImpact(LAMBDA_STANDARD_EXPLODE); + rocket_template[1] = baseRocket.clone().setItem(EnumAmmo.ROCKET_HEAT).setDamage(1.5F).setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT); + rocket_template[2] = baseRocket.clone().setItem(EnumAmmo.ROCKET_DEMO).setDamage(0.5F).setOnImpact(LAMBDA_STANDARD_EXPLODE_DEMO); + rocket_template[3] = baseRocket.clone().setItem(EnumAmmo.ROCKET_INC).setDamage(0.75F).setOnImpact(LAMBDA_STANDARD_EXPLODE_INC); + + rocket_rpzb = new BulletConfig[rocket_template.length]; + rocket_qd = new BulletConfig[rocket_template.length]; + rocket_ml = new BulletConfig[rocket_template.length]; + + for(int i = 0; i < rocket_template.length; i++) { + rocket_rpzb[i] = makeRPZB(rocket_template[i]); + rocket_qd[i] = makeQD(rocket_template[i]); + rocket_ml[i] = makeML(rocket_template[i]); + } ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(7).inspect(40).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) .dmg(25F).delay(5).reload(50).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) - .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_rpzb_he, rocket_rpzb_heat)) + .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_rpzb)) .offset(1, -0.0625 * 1.5, -0.1875D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() @@ -102,7 +158,7 @@ public class XFactoryRocket { .dura(300).draw(7).inspect(40).crosshair(Crosshair.L_BOX_OUTLINE) .rec(new Receiver(0) .dmg(25F).delay(5).reload(50).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) - .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_rpzb_he, rocket_rpzb_heat)) + .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_rpzb)) .offset(1, -0.0625 * 1.5, -0.1875D) .setupLockonFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration().ps(LAMBDA_STINGER_SECONDARY_PRESS).rs(LAMBDA_STINGER_SECONDARY_RELEASE) @@ -113,7 +169,7 @@ public class XFactoryRocket { .dura(400).draw(7).inspect(40).crosshair(Crosshair.L_CIRCUMFLEX).hideCrosshair(false) .rec(new Receiver(0) .dmg(25F).delay(10).reload(55).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) - .mag(new MagazineFullReload(0, 4).addConfigs(rocket_qd_he, rocket_qd_heat)) + .mag(new MagazineFullReload(0, 4).addConfigs(rocket_qd)) .offset(1, -0.0625 * 1.5, -0.1875D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() @@ -124,7 +180,7 @@ public class XFactoryRocket { .dura(500).draw(20).inspect(40).crosshair(Crosshair.L_CIRCUMFLEX).hideCrosshair(false) .rec(new Receiver(0) .dmg(25F).delay(5).reload(48).jam(33).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) - .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_ml_he, rocket_ml_heat)) + .mag(new MagazineSingleReload(0, 1).addConfigs(rocket_ml)) .offset(1, -0.0625 * 1.5, -0.1875D) .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration().pp(LAMBDA_MISSILE_LAUNCHER_PRIMARY_PRESS) diff --git a/src/main/java/com/hbm/lib/HbmWorldGen.java b/src/main/java/com/hbm/lib/HbmWorldGen.java index e060239d9..759e5c6cd 100644 --- a/src/main/java/com/hbm/lib/HbmWorldGen.java +++ b/src/main/java/com/hbm/lib/HbmWorldGen.java @@ -4,7 +4,6 @@ import java.util.Random; import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockMotherOfAllOres; import com.hbm.blocks.generic.BlockNTMFlower.EnumFlowerType; import com.hbm.config.GeneralConfig; import com.hbm.config.MobConfig; @@ -179,12 +178,6 @@ public class HbmWorldGen implements IWorldGenerator { BedrockOre.generate(world, randPosX, randPosZ, def.stack, def.acid, def.color, def.tier); } } - - for(int k = 0; k < WorldConfig.randomSpawn; k++) { - BlockMotherOfAllOres.shuffleOverride(rand); - DungeonToolbox.generateOre(world, rand, i, j, 1, 10, 4, 30, ModBlocks.ore_random); - } - BlockMotherOfAllOres.resetOverride(); if(GeneralConfig.enable528ColtanSpawn) { DungeonToolbox.generateOre(world, rand, i, j, GeneralConfig.coltanRate, 4, 15, 40, ModBlocks.ore_coltan); diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index e7404c5d3..43c1764f8 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -662,6 +662,7 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerEntityRenderingHandler(EntitySawblade.class, new RenderSawblade()); RenderingRegistry.registerEntityRenderingHandler(EntityChemical.class, new RenderChemical()); RenderingRegistry.registerEntityRenderingHandler(EntityMist.class, new RenderMist()); + RenderingRegistry.registerEntityRenderingHandler(EntityFireLingering.class, new RenderMist()); RenderingRegistry.registerEntityRenderingHandler(EntityWaypoint.class, new RenderMist()); RenderingRegistry.registerEntityRenderingHandler(EntityAcidBomb.class, new RenderSnowball(Items.slime_ball)); //grenades diff --git a/src/main/java/com/hbm/main/CraftingManager.java b/src/main/java/com/hbm/main/CraftingManager.java index a1d964d98..d5e09faa1 100644 --- a/src/main/java/com/hbm/main/CraftingManager.java +++ b/src/main/java/com/hbm/main/CraftingManager.java @@ -1060,7 +1060,7 @@ public class CraftingManager { addRecipeAuto(new ItemStack(ModItems.neutron_reflector, 4), new Object[] { "##", "##", '#', W.ingot() }); for(NTMMaterial mat : Mats.orderedList) { - if(mat.shapes.contains(MaterialShapes.WIRE)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.wire_fine, 24, mat.id), new Object[] { "###", '#', MaterialShapes.INGOT.prefixes[0] + name }); + if(mat.autogen.contains(MaterialShapes.WIRE)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.wire_fine, 24, mat.id), new Object[] { "###", '#', MaterialShapes.INGOT.prefixes[0] + name }); } addRecipeAuto(new ItemStack(ModItems.book_of_), new Object[] { "BGB", "GAG", "BGB", 'B', ModItems.egg_balefire_shard, 'G', GOLD.ingot(), 'A', Items.book }); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 1d48f0720..3058b4ea8 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -3,7 +3,6 @@ package com.hbm.main; import com.google.common.collect.ImmutableList; import com.hbm.blocks.BlockEnums.EnumStoneType; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockMotherOfAllOres; import com.hbm.blocks.generic.BlockToolConversion; import com.hbm.commands.*; import com.hbm.config.*; @@ -871,8 +870,6 @@ public class MainRegistry { AchievementHandler.register(); proxy.registerMissileItems(); - - BlockMotherOfAllOres.init(); // Load compatibility for OC. CompatHandler.init(); @@ -972,7 +969,7 @@ public class MainRegistry { try { if(GeneralConfig.enableThermosPreventer && Class.forName("thermos.ThermosClassTransformer") != null) { - throw new IllegalStateException("The mod tried to start on a Thermos or it's fork server and therefore stopped. To allow the server to start on Thermos, change the appropriate " + throw new IllegalStateException("The mod tried to start on a Thermos or its fork server and therefore stopped. To allow the server to start on Thermos, change the appropriate " + "config entry (0.00 in hbm.cfg). This was done because, by default, Thermos " + "uses a so-called \"optimization\" feature that reduces tile ticking a lot, which will inevitably break a lot of machines. Most people aren't even aware " + "of this, and start blaming random mods for all their stuff breaking. In order to adjust or even disable this feature, edit \"tileentities.yml\" in your " @@ -1456,6 +1453,7 @@ public class MainRegistry { ignoreMappings.add("hbm:item.powder_unobtainium"); ignoreMappings.add("hbm:item.powder_daffergon"); ignoreMappings.add("hbm:item.powder_verticium"); + ignoreMappings.add("hbm:tile.ore_random"); /// REMAP /// remapItems.put("hbm:item.gadget_explosive8", ModItems.early_explosive_lenses); diff --git a/src/main/java/com/hbm/main/NEIConfig.java b/src/main/java/com/hbm/main/NEIConfig.java index 40533ddf3..371573df3 100644 --- a/src/main/java/com/hbm/main/NEIConfig.java +++ b/src/main/java/com/hbm/main/NEIConfig.java @@ -4,7 +4,6 @@ import java.util.List; import codechicken.nei.recipe.*; import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; import com.hbm.config.CustomMachineConfigJSON; import com.hbm.handler.nei.CustomMachineHandler; @@ -79,31 +78,6 @@ public class NEIConfig implements IConfigureNEI { API.hideItem(new ItemStack(ModBlocks.spotlight_halogen_off)); API.hideItem(new ItemStack(ModBlocks.spotlight_beam)); - API.registerHighlightIdentifier(ModBlocks.ore_random, new IHighlightHandler() { - - @Override - public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { - int x = mop.blockX; - int y = mop.blockY; - int z = mop.blockZ; - - TileEntity te = world.getTileEntity(x, y, z); - - if(te instanceof TileEntityRandomOre) { - TileEntityRandomOre ore = (TileEntityRandomOre) te; - return new ItemStack(ModBlocks.ore_random, 1, ore.getStackId()); - } - - return null; - } - - @Override - public List handleTextData(ItemStack itemStack, World world, EntityPlayer player, MovingObjectPosition mop, List currenttip, Layout layout) { - return currenttip; - } - - }); - API.registerHighlightIdentifier(ModBlocks.plushie, new IHighlightHandler() { @Override public ItemStack identifyHighlight(World world, EntityPlayer player, MovingObjectPosition mop) { int x = mop.blockX; diff --git a/src/main/java/com/hbm/particle/ParticleFlamethrower.java b/src/main/java/com/hbm/particle/ParticleFlamethrower.java index cc11601ba..636ef82a9 100644 --- a/src/main/java/com/hbm/particle/ParticleFlamethrower.java +++ b/src/main/java/com/hbm/particle/ParticleFlamethrower.java @@ -3,6 +3,7 @@ package com.hbm.particle; import java.awt.Color; import com.hbm.main.ModEventHandlerClient; +import com.hbm.particle.helper.FlameCreator; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; @@ -12,7 +13,7 @@ import net.minecraft.world.World; @SideOnly(Side.CLIENT) public class ParticleFlamethrower extends EntityFXRotating { - public ParticleFlamethrower(World world, double x, double y, double z) { + public ParticleFlamethrower(World world, double x, double y, double z, int type) { super(world, x, y, z); particleIcon = ModEventHandlerClient.particleBase; this.particleMaxAge = 20 + rand.nextInt(10); @@ -20,8 +21,13 @@ public class ParticleFlamethrower extends EntityFXRotating { this.motionX = world.rand.nextGaussian() * 0.02; this.motionZ = world.rand.nextGaussian() * 0.02; + + float initialColor = 15F + rand.nextFloat() * 25F; - Color color = Color.getHSBColor((15F + rand.nextFloat() * 25F) / 255F, 1F, 1F); + if(type == FlameCreator.META_BALEFIRE) initialColor = 65F + rand.nextFloat() * 35F; + if(type == FlameCreator.META_DIGAMMA) initialColor = 0F - rand.nextFloat() * 15F; + + Color color = Color.getHSBColor(initialColor / 255F, 1F, 1F); this.particleRed = color.getRed() / 255F; this.particleGreen = color.getGreen() / 255F; this.particleBlue = color.getBlue() / 255F; diff --git a/src/main/java/com/hbm/particle/helper/FlameCreator.java b/src/main/java/com/hbm/particle/helper/FlameCreator.java index 6e4f791e0..d47fd0095 100644 --- a/src/main/java/com/hbm/particle/helper/FlameCreator.java +++ b/src/main/java/com/hbm/particle/helper/FlameCreator.java @@ -2,6 +2,7 @@ package com.hbm.particle.helper; import java.util.Random; +import com.hbm.main.MainRegistry; import com.hbm.particle.ParticleFlamethrower; import cpw.mods.fml.relauncher.Side; @@ -14,16 +15,31 @@ import net.minecraft.world.World; public class FlameCreator implements IParticleCreator { - public static void composeEffect(World world, double x, double y, double z) { + public static int META_FIRE = 0; + public static int META_BALEFIRE = 1; + public static int META_DIGAMMA = 2; + + public static void composeEffect(World world, double x, double y, double z, int meta) { NBTTagCompound data = new NBTTagCompound(); data.setString("type", "flamethrower"); + data.setInteger("meta", meta); IParticleCreator.sendPacket(world, x, y, z, 50, data); } + public static void composeEffectClient(World world, double x, double y, double z, int meta) { + NBTTagCompound data = new NBTTagCompound(); + data.setString("type", "flamethrower"); + data.setInteger("meta", meta); + data.setDouble("posX", x); + data.setDouble("posY", y); + data.setDouble("posZ", z); + MainRegistry.proxy.effectNT(data); + } + @Override @SideOnly(Side.CLIENT) public void makeParticle(World world, EntityPlayer player, TextureManager texman, Random rand, double x, double y, double z, NBTTagCompound data) { - ParticleFlamethrower particle = new ParticleFlamethrower(world, x, y, z); + ParticleFlamethrower particle = new ParticleFlamethrower(world, x, y, z, data.getInteger("meta")); Minecraft.getMinecraft().effectRenderer.addEffect(particle); } } diff --git a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java index 181407f36..b4f567573 100644 --- a/src/main/java/com/hbm/render/block/RenderBlockMultipass.java +++ b/src/main/java/com/hbm/render/block/RenderBlockMultipass.java @@ -1,21 +1,13 @@ package com.hbm.render.block; -import java.awt.Color; - import org.lwjgl.opengl.GL11; import com.hbm.blocks.IBlockMultiPass; -import com.hbm.blocks.ModBlocks; -import com.hbm.blocks.generic.BlockMotherOfAllOres; -import com.hbm.inventory.RecipesCommon.ComparableStack; -import com.hbm.items.ModItems; -import com.hbm.util.ColorUtil; import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; import net.minecraft.block.Block; import net.minecraft.client.renderer.RenderBlocks; import net.minecraft.client.renderer.Tessellator; -import net.minecraft.item.ItemStack; import net.minecraft.world.IBlockAccess; public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { @@ -72,7 +64,7 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { } /** terrible hack to make this shit work */ - if(block == ModBlocks.ore_random) { + /*if(block == ModBlocks.ore_random) { this.currentPass = 1; renderer.setOverrideBlockTexture(block.getIcon(0, metadata)); @@ -123,7 +115,7 @@ public class RenderBlockMultipass implements ISimpleBlockRenderingHandler { renderer.clearOverrideBlockTexture(); GL11.glColor3f(1F, 1F, 1F); - } + }*/ GL11.glTranslatef(0.5F, 0.5F, 0.5F); } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderTeslaCannon.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderTeslaCannon.java new file mode 100644 index 000000000..51657c56f --- /dev/null +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderTeslaCannon.java @@ -0,0 +1,26 @@ +package com.hbm.render.item.weapon.sedna; + +import net.minecraft.item.ItemStack; +import net.minecraftforge.client.IItemRenderer; + +public class ItemRenderTeslaCannon implements IItemRenderer { + + @Override + public boolean handleRenderType(ItemStack item, ItemRenderType type) { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { + // TODO Auto-generated method stub + return false; + } + + @Override + public void renderItem(ItemRenderType type, ItemStack item, Object... data) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/com/hbm/render/util/RenderInfoSystem.java b/src/main/java/com/hbm/render/util/RenderInfoSystem.java index 4ea75768f..4b008f85c 100644 --- a/src/main/java/com/hbm/render/util/RenderInfoSystem.java +++ b/src/main/java/com/hbm/render/util/RenderInfoSystem.java @@ -50,6 +50,8 @@ public class RenderInfoSystem { if(event.type != ElementType.CROSSHAIRS) return; + //this.messages.put(-666, new InfoEntry("Halloween Preview", 666_666)); + if(this.messages.isEmpty()) return; @@ -167,13 +169,8 @@ public class RenderInfoSystem { @Override public int compareTo(Object o) { - - if(!(o instanceof InfoEntry)) { - return 0; - } - + if(!(o instanceof InfoEntry)) { return 0; } InfoEntry other = (InfoEntry) o; - return this.millis < other.millis ? -1 : this.millis > other.millis ? 1 : 0; } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index 43fd6dbde..09bdce611 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -11,7 +11,6 @@ import com.hbm.blocks.generic.BlockDynamicSlag.TileEntitySlag; import com.hbm.blocks.generic.BlockEmitter.TileEntityEmitter; import com.hbm.blocks.generic.BlockGlyphidSpawner.TileEntityGlpyhidSpawner; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; -import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; @@ -216,7 +215,6 @@ public class TileMappings { put(TileEntityProxyCombo.class, "tileentity_proxy_combo"); put(TileEntityProxyConductor.class, "tileentity_proxy_conductor"); - put(TileEntityRandomOre.class, "tileentity_mother_of_all_ores"); put(TileEntityBedrockOre.class, "tileentity_bedrock_ore"); put(TileEntityBlockPWR.class, "tileentity_block_pwr"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java index 36601b98f..3a6712af9 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -97,7 +97,7 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne if(joules > 0) { - long out = joules * 98 / 100; + long out = joules * 95 / 100; ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata()); for(int i = 1; i <= range; i++) { @@ -111,20 +111,9 @@ public class TileEntityCoreEmitter extends TileEntityMachineBase implements IEne Block block = worldObj.getBlock(x, y, z); TileEntity te = worldObj.getTileEntity(x, y, z); - if(block instanceof ILaserable) { - ((ILaserable)block).addEnergy(worldObj, x, y, z, out * 98 / 100, dir); - break; - } - - if(te instanceof ILaserable) { - ((ILaserable)te).addEnergy(worldObj, x, y, z, out * 98 / 100, dir); - break; - } - - if(te instanceof TileEntityCore) { - out = ((TileEntityCore)te).burn(out); - continue; - } + if(block instanceof ILaserable) { ((ILaserable)block).addEnergy(worldObj, x, y, z, out, dir); break; } + if(te instanceof ILaserable) { ((ILaserable)te).addEnergy(worldObj, x, y, z, out, dir); break; } + if(te instanceof TileEntityCore) { out = ((TileEntityCore)te).burn(out); continue; } Block b = worldObj.getBlock(x, y, z); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java index 19fcda459..7ddaaca52 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityForceField.java @@ -1,14 +1,18 @@ package com.hbm.tileentity.machine; +import java.io.IOException; import java.util.ArrayList; import java.util.List; +import com.google.gson.JsonObject; +import com.google.gson.stream.JsonWriter; import com.hbm.inventory.container.ContainerForceField; import com.hbm.inventory.gui.GUIForceField; import com.hbm.items.ModItems; import com.hbm.lib.Library; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.TEFFPacket; +import com.hbm.tileentity.IConfigurableMachine; import com.hbm.tileentity.IGUIProvider; import com.hbm.tileentity.TileEntityLoadedBase; @@ -30,10 +34,10 @@ import net.minecraft.util.Vec3; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityForceField extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IGUIProvider { +public class TileEntityForceField extends TileEntityLoadedBase implements ISidedInventory, IEnergyReceiverMK2, IGUIProvider, IConfigurableMachine { private ItemStack slots[]; - + public int health = 100; public int maxHealth = 100; public long power; @@ -43,17 +47,55 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public float radius = 16; public boolean isOn = false; public int color = 0x0000FF; - public final int baseCon = 1000; - public final int radCon = 500; - public final int shCon = 250; - public static final long maxPower = 1000000; - + public static int baseCon = 1000; + public static int radCon = 500; + public static int shCon = 250; + public static long maxPower = 1000000; + private static final int[] slots_top = new int[] {0}; private static final int[] slots_bottom = new int[] {0}; private static final int[] slots_side = new int[] {0}; - + private String customName; - + + // config options stuff. + public static int baseRadius = 16; + public static int radUpgrade = 16; + public static int shUpgrade = 50; + public static double cooldownModif = 1; + public static double healthRegenModif = 1; + + @Override + public String getConfigName() { + return "forcefield"; + } + + @Override + public void readIfPresent(JsonObject obj) { + maxPower = IConfigurableMachine.grab(obj, "L:powerCap", maxPower); + baseCon = IConfigurableMachine.grab(obj, "I:baseConsumption", baseCon); + radCon = IConfigurableMachine.grab(obj, "I:radiusConsumption", radCon); + shCon = IConfigurableMachine.grab(obj, "I:shieldConsumption", shCon); + baseRadius = IConfigurableMachine.grab(obj, "I:baseRadius", baseRadius); + radUpgrade = IConfigurableMachine.grab(obj, "I:radiusUpgrade", radUpgrade); + shUpgrade = IConfigurableMachine.grab(obj, "I:shieldUpgrade", shUpgrade); + cooldownModif = IConfigurableMachine.grab(obj, "D:cooldownModifier", cooldownModif); + healthRegenModif = IConfigurableMachine.grab(obj, "D:healthRegenModifier", healthRegenModif); + } + + @Override + public void writeConfig(JsonWriter writer) throws IOException { + writer.name("L:powerCap").value(maxPower); + writer.name("I:baseConsumption").value(baseCon); + writer.name("I:radiusConsumption").value(radCon); + writer.name("I:shieldConsumption").value(shCon); + writer.name("I:baseRadius").value(baseRadius); + writer.name("I:radiusUpgrade").value(radUpgrade); + writer.name("I:shieldUpgrade").value(shUpgrade); + writer.name("D:cooldownModifier").value(cooldownModif); + writer.name("D:healthRegenModifier").value(healthRegenModif); + } + public TileEntityForceField() { slots = new ItemStack[3]; } @@ -98,7 +140,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public boolean hasCustomInventoryName() { return this.customName != null && this.customName.length() > 0; } - + public void setCustomName(String name) { this.customName = name; } @@ -117,7 +159,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <=64; } } - + //You scrubs aren't needed for anything (right now) @Override public void openInventory() {} @@ -129,13 +171,13 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided if(i == 0) if(itemStack.getItem() instanceof IBatteryItem) return true; - + if(i == 1) return true; - + return false; } - + @Override public ItemStack decrStackSize(int i, int j) { if(slots[i] != null) @@ -151,18 +193,18 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided { slots[i] = null; } - + return itemStack1; } else { return null; } } - + @Override public void readFromNBT(NBTTagCompound nbt) { super.readFromNBT(nbt); NBTTagList list = nbt.getTagList("items", 10); - + this.power = nbt.getLong("powerTime"); this.health = nbt.getInteger("health"); this.maxHealth = nbt.getInteger("maxHealth"); @@ -170,9 +212,9 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided this.blink = nbt.getInteger("blink"); this.radius = nbt.getFloat("radius"); this.isOn = nbt.getBoolean("isOn"); - + slots = new ItemStack[getSizeInventory()]; - + for(int i = 0; i < list.tagCount(); i++) { NBTTagCompound nbt1 = list.getCompoundTagAt(i); @@ -183,7 +225,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided } } } - + @Override public void writeToNBT(NBTTagCompound nbt) { super.writeToNBT(nbt); @@ -194,9 +236,9 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided nbt.setInteger("blink", blink); nbt.setFloat("radius", radius); nbt.setBoolean("isOn", isOn); - + NBTTagList list = new NBTTagList(); - + for(int i = 0; i < slots.length; i++) { if(slots[i] != null) @@ -209,7 +251,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided } nbt.setTag("items", list); } - + @Override public int[] getAccessibleSlotsFromSide(int p_94128_1_) { @@ -225,41 +267,41 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public boolean canExtractItem(int i, ItemStack itemStack, int j) { return false; } - + public int getHealthScaled(int i) { return (health * i) / maxHealth; } - + public long getPowerScaled(long i) { return (power * i) / maxPower; } - + @Override public void updateEntity() { if(!worldObj.isRemote) { - + updateConnections(); - + int rStack = 0; int hStack = 0; - radius = 16; + radius = baseRadius; maxHealth = 100; - + if(slots[1] != null && slots[1].getItem() == ModItems.upgrade_radius) { rStack = slots[1].stackSize; - radius += rStack * 16; + radius += rStack * radUpgrade; } - + if(slots[2] != null && slots[2].getItem() == ModItems.upgrade_health) { hStack = slots[2].stackSize; - maxHealth += hStack * 50; + maxHealth += hStack * shUpgrade; } - - this.powerCons = this.baseCon + rStack * this.radCon + hStack * this.shCon; - + + this.powerCons = baseCon + rStack * radCon + hStack * shCon; + power = Library.chargeTEFromItems(slots, 0, power, maxPower); - + if(blink > 0) { blink--; color = 0xFF0000; @@ -267,20 +309,20 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided color = 0x00FF00; } } - + if(cooldown > 0) { cooldown--; } else { if(health < maxHealth) - health += maxHealth / 100; - + health += (maxHealth / 100) * healthRegenModif; + if(health > maxHealth) health = maxHealth; } - + if(isOn && cooldown == 0 && health > 0 && power >= powerCons) { doField(radius); - + if(!worldObj.isRemote) { power -= powerCons; } @@ -293,34 +335,34 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided if(power < powerCons) power = 0; } - + if(!worldObj.isRemote) { PacketDispatcher.wrapper.sendToAllAround(new TEFFPacket(xCoord, yCoord, zCoord, radius, health, maxHealth, (int) power, isOn, color, cooldown), new TargetPoint(worldObj.provider.dimensionId, xCoord, yCoord, zCoord, 500)); } } - + private int impact(Entity e) { - + double mass = e.height * e.width * e.width; double speed = getMotionWithFallback(e); return (int)(mass * speed * 50); } - + private void damage(int ouch) { health -= ouch; - + if(ouch >= (this.maxHealth / 250)) blink = 5; - + if(health <= 0) { health = 0; - cooldown = (int) (100 + radius); + cooldown = (int) (100 + radius * (float)cooldownModif); } } List outside = new ArrayList(); List inside = new ArrayList(); - + private void doField(float rad) { List oLegacy = new ArrayList(outside); @@ -328,18 +370,18 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided outside.clear(); inside.clear(); - + List list = worldObj.getEntitiesWithinAABBExcludingEntity(null, AxisAlignedBB.getBoundingBox(xCoord + 0.5 - (rad + 25), yCoord + 0.5 - (rad + 25), zCoord + 0.5 - (rad + 25), xCoord + 0.5 + (rad + 25), yCoord + 0.5 + (rad + 25), zCoord + 0.5 + (rad + 25))); - + for(Object o : list) { - + if(o instanceof Entity && !(o instanceof EntityPlayer)) { Entity entity = (Entity)o; - + double dist = Math.sqrt(Math.pow(xCoord + 0.5 - entity.posX, 2) + Math.pow(yCoord + 0.5 - entity.posY, 2) + Math.pow(zCoord + 0.5 - entity.posZ, 2)); - + boolean out = dist > rad; - + //if the entity has not been registered yet if(!oLegacy.contains(entity) && !iLegacy.contains(entity)) { if(out) { @@ -347,21 +389,21 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided } else { inside.add(entity); } - + //if the entity has been detected before } else { - + //if the entity has crossed inwards if(oLegacy.contains(entity) && !out) { Vec3 vec = Vec3.createVectorHelper(xCoord + 0.5 - entity.posX, yCoord + 0.5 - entity.posY, zCoord + 0.5 - entity.posZ); vec = vec.normalize(); - + double mx = -vec.xCoord * (rad + 1); double my = -vec.yCoord * (rad + 1); double mz = -vec.zCoord * (rad + 1); - + entity.setLocationAndAngles(xCoord + 0.5 + mx, yCoord + 0.5 + my, zCoord + 0.5 + mz, 0, 0); - + double mo = Math.sqrt(Math.pow(entity.motionX, 2) + Math.pow(entity.motionY, 2) + Math.pow(entity.motionZ, 2)); entity.motionX = vec.xCoord * -mo; @@ -374,24 +416,24 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided worldObj.playSoundAtEntity(entity, "hbm:weapon.sparkShoot", 2.5F, 1.0F); outside.add(entity); - + if(!worldObj.isRemote) { this.damage(this.impact(entity)); } - + } else - + //if the entity has crossed outwards if(iLegacy.contains(entity) && out) { Vec3 vec = Vec3.createVectorHelper(xCoord + 0.5 - entity.posX, yCoord + 0.5 - entity.posY, zCoord + 0.5 - entity.posZ); vec = vec.normalize(); - + double mx = -vec.xCoord * (rad - 1); double my = -vec.yCoord * (rad - 1); double mz = -vec.zCoord * (rad - 1); entity.setLocationAndAngles(xCoord + 0.5 + mx, yCoord + 0.5 + my, zCoord + 0.5 + mz, 0, 0); - + double mo = Math.sqrt(Math.pow(entity.motionX, 2) + Math.pow(entity.motionY, 2) + Math.pow(entity.motionZ, 2)); entity.motionX = vec.xCoord * mo; @@ -404,13 +446,13 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided worldObj.playSoundAtEntity(entity, "hbm:weapon.sparkShoot", 2.5F, 1.0F); inside.add(entity); - + if(!worldObj.isRemote) { this.damage(this.impact(entity)); } - + } else { - + if(out) { outside.add(entity); } else { @@ -421,7 +463,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided } } } - + private double getMotionWithFallback(Entity e) { Vec3 v1 = Vec3.createVectorHelper(e.motionX, e.motionY, e.motionZ); @@ -429,13 +471,13 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided double s1 = v1.lengthVector(); double s2 = v2.lengthVector(); - + if(s1 == 0) return s2; - + if(s2 == 0) return s1; - + return Math.min(s1, s2); } @@ -448,7 +490,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided @Override public long getPower() { return power; - + } @Override @@ -460,7 +502,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public boolean canConnect(ForgeDirection dir) { return dir != ForgeDirection.UP && dir != ForgeDirection.UNKNOWN; } - + private void updateConnections() { this.trySubscribe(worldObj, xCoord + 1, yCoord, zCoord, Library.POS_X); this.trySubscribe(worldObj, xCoord - 1, yCoord, zCoord, Library.NEG_X); @@ -473,7 +515,7 @@ public class TileEntityForceField extends TileEntityLoadedBase implements ISided public AxisAlignedBB getRenderBoundingBox() { return TileEntity.INFINITE_EXTENT_AABB; } - + @Override @SideOnly(Side.CLIENT) public double getMaxRenderDistanceSquared() diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c11015608..84cae9b1a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -621,7 +621,7 @@ hadron.error_diode_collision=Fehler 0x08 [DC] hadron.error_branching_turn=Fehler 0x09 [BT] hadron.hopper0=§eNormalmodus:$Alle Items werden beschleunigt. hadron.hopper1=§eTrichtermodus:$Ein Item bleibt immer übrig. -hadron.hopper1=§eEinzelmodus:$Erlaubt nur ein Item pro Slot. +hadron.hopper2=§eEinzelmodus:$Erlaubt nur ein Item pro Slot. hadron.idle=Leerlauf hadron.modeCircular=§eRingbeschleuniger:$Magnete bilden eine Schleife.$Schaltet mehr Rezepte frei. hadron.modeLine=§eLinearbeschleuniger:$Beschleuniger ended mit Analysekammer.$Weniger Rezepte. @@ -1156,7 +1156,10 @@ item.ammo_standard.bmg50_equestrian.name=.50 BMG Zerstörer item.ammo_standard.bmg50_fmj.name=.50 BMG Patrone (Vollmantelgeschoss) item.ammo_standard.bmg50_jhp.name=.50 BMG Patrone (Hohlspitz) item.ammo_standard.bmg50_sp.name=.50 BMG Patrone (Teilmantelgeschoss) -item.ammo_standard.flame_diesel.name=Dieseltank +item.ammo_standard.flame_balefire.name=Flammenwerferbrennstoff, Balefire +item.ammo_standard.flame_diesel.name=Flammenwerferbrennstoff, Diesel +item.ammo_standard.flame_gas.name=Flammenwerferbrennstoff, Gas +item.ammo_standard.flame_napalm.name=Flammenwerferbrennstoff, Napalm item.ammo_standard.g12.name=Kaliber 12 Schrot item.ammo_standard.g12_anthrax.name=Kaliber 12 Anthrax item.ammo_standard.g12_bp.name=Kaliber 12 Schwarzpulver @@ -1168,8 +1171,11 @@ item.ammo_standard.g12_flechette.name=Kaliber 12 Flechett item.ammo_standard.g12_magnum.name=Kaliber 12 Magnum item.ammo_standard.g12_phosphorus.name=Kaliber 12 Phosphor item.ammo_standard.g12_slug.name=Kaliber 12 Laufgeschoss -item.ammo_standard.g40.name=40mm Granate -item.ammo_standard.g40_flare.name=Signalpatrone +item.ammo_standard.g26_flare.name=Signalpatrone +item.ammo_standard.g40_demo.name=40mm Abrissgranate +item.ammo_standard.g40_he.name=40mm Sprenggranate +item.ammo_standard.g40_heat.name=40mm Hohlladungsgranate +item.ammo_standard.g40_inc.name=40mm Brandgranate item.ammo_standard.m357_ap.name=.357 Magnumkugel (Panzerbrechend) item.ammo_standard.m357_express.name=.357 Magnumkugel (VMG Express) item.ammo_standard.m357_fmj.name=.357 Magnumkugel (Vollmantelgeschoss) @@ -1198,8 +1204,10 @@ item.ammo_standard.r762_du.name=7,62mm Patrone (Urangeschoss) item.ammo_standard.r762_fmj.name=7,62mm Patrone (Vollmantelgeschoss) item.ammo_standard.r762_jhp.name=7,62mm Patrone (Hohlspitz) item.ammo_standard.r762_sp.name=7,62mm Patrone (Teilmantelgeschoss) +item.ammo_standard.rocket_demo.name=Abrissrakete item.ammo_standard.rocket_he.name=Explosivrakete item.ammo_standard.rocket_heat.name=Hohlladungsrakete +item.ammo_standard.rocket_inc.name=Brandrakete item.ammo_standard.stone.name=Kugel und Pulver item.ammo_standard.stone_ap.name=Feuerstein und Pulver item.ammo_standard.stone_iron.name=Eisenkugel und Pulver @@ -1583,11 +1591,20 @@ item.card_qos.name=Pik-Königin item.cart.crate.name=Stahlkistenlore item.cart.destroyer.name=Schuttzerstörende Lore item.cart.empty.name=Lore +item.cart.powder.name=Pulverwagen +item.cart.semtex.name=Semtex Wagen item.casing_357.name=.357 Magnum-Hülsen item.casing_44.name=.44 Magnum-Hülsen item.casing_50.name=Großkaliberhülsen item.casing_9.name=Kleinkaliberhülsen item.casing_buckshot.name=Schrothülsen +item.casing.small.name=Kleine Rotgussgehäuse +item.casing.small_steel.name=Stahlhülsen für kleine Waffen +item.casing.large.name=Large Rotgussgehäuse +item.casing.large_steel.name=Große Waffenstahlhülsen +item.casing.shotshell.name=Schrotpatronenhülsen +item.casing.buckshot.name=Schrothülsen +item.casing.buckshot_advanced.name=Fortschrittliche Schrothülsen item.catalyst_clay.name=Tonerde-Katalysator item.catalytic_converter.name=Katalytischer Konverter item.cbt_device.name=CBT-Gerät @@ -1897,6 +1914,7 @@ item.dnt_boots.name=dienautronium stiefel item.dnt_legs.name=dineuterium beine item.dnt_helmet.name=dinotroniumu helme item.dnt_plate.name=dineutrom brustplatte +item.dnt_sword.name=dinuatureum schwert item.door_bunker.name=Bunkertür item.door_metal.name=Metalltür item.door_office.name=Bürotür @@ -2102,7 +2120,10 @@ item.grenade_smart.name=Smart-Granate item.grenade_strong.name=Verbesserte Handgranate item.grenade_tau.name=Taugranate item.grenade_zomg.name=Negativenergie-Paarvernichtungsgranate +item.gun_am180.name=Schallgedämpfte Maschinenpistole item.gun_ar15.name=Josh +item.gun_autoshotgun.name=Auto-Flinte +item.gun_autoshotgun_sexy.name=Sexy item.gun_avenger.name=CZ57 Avenger-Minigun item.gun_b92.name=§9B92 Energiepistole§r item.gun_b92_ammo.name=§9B92-Energiezelle§r @@ -2119,6 +2140,7 @@ item.gun_bolter_digamma.name=Digammagewehr item.gun_calamity.name=Knochensäge item.gun_calamity_ammo.name=.50 BMG Patrone (LEGACY) item.gun_calamity_dual.name=Sattelkanone +item.gun_carbine.name=Karabiner item.gun_chemthrower.name=Chemowerfer item.gun_coilgun.name=Gaußpistole item.gun_cryocannon.name=Kyro-Kanone @@ -2137,9 +2159,15 @@ item.gun_euthanasia_ammo.name=Spritze item.gun_fatman.name=M42 Nukleares Katapult "Fat Man" item.gun_fatman_ammo.name=Miniatombombe (LEGACY) item.gun_fireext.name=Feuerlöscher -item.gun_flamer.name=Herr Topaz +item.gun_flamer.name=Flammenwerfer +item.gun_flaregun.name=Signalpistole item.gun_flechette.name=Flechet-Gewehr item.gun_folly.name=Prototyp Digamma "Irrsinn" +item.gun_g3.name=Sturmgewehr +item.gun_greasegun.name=Grease Gun +item.gun_heavy_revolver.name=Schwerer Revolver +item.gun_heavy_revolver_lilmac.name=Little Macintosh +item.gun_henry.name=Repetiergewehr item.gun_hk69.name=Granatenpistole item.gun_hp.name=HPP Lazerjet item.gun_hp_ammo.name=Tintenpatrone @@ -2153,16 +2181,24 @@ item.gun_kit_2.name=Waffenreparatursatz item.gun_ks23.name=Samuel die dicke Flinte item.gun_lacunae.name=CZ33 Abaddon item.gun_lacunae_ammo.name=5mm Patrone (LEGACY) +item.gun_lag.name=Komisch lange Pistole item.gun_lever_action.name=Mare's Leg (Original) item.gun_lever_action_ammo.name=12x74 Schrotmunition (LEGACY) item.gun_lever_action_dark.name=Mare's Leg (Dunkel) item.gun_lever_action_sonata.name=Verkehrter Mare's Leg item.gun_lever_action_sonata_2.name=§cSonatas Mikrophon§r +item.gun_liberator.name=Liberator +item.gun_light_revolver.name=Kipplaufrevolver +item.gun_light_revolver_dani.name=Tag und Nacht item.gun_lunatic_marksman.name=Lunatic-Scharfschützengewehr item.gun_m2.name=üsMG -item.gun_minigun.name=CZ53 Persönliche Minigun +item.gun_maresleg.name=Repetierflinte +item.gun_maresleg_akimbo.name=Repetierflinten +item.gun_maresleg_broken.name=Broken +item.gun_minigun.name=Minigun item.gun_mirv.name=M42 Nukleares Katapult "Experimentelles MIRV" item.gun_mirv_ammo.name=Achtfaches MIRV (LEGACY) +item.gun_missile_launcher.name=Raketenwerfer item.gun_moist_nugget.name=Mosin-Nagant item.gun_mp.name=Maschinengewehr des Pazifisten item.gun_mp40.name=Maschinenpistole @@ -2175,7 +2211,7 @@ item.gun_osipr_ammo.name=Dunkler Energiepuls-Plug item.gun_osipr_ammo2.name=Combine Ball item.gun_panzerschreck.name=Panzerschreck item.gun_proto.name=M42 Nukleares Katapult "Proto MIRV" -item.gun_quadro.name=Quattro Formaggi +item.gun_quadro.name=Vierfachraketenwerfer item.gun_remington.name=バイデン ブラスト [BIDEN BLAST] item.gun_revolver.name=Verbesserter Revolver item.gun_revolver_ammo.name=Bleipatrone @@ -2208,6 +2244,7 @@ item.gun_sauer.name=Stan Sauers Schrotflinte item.gun_skystinger.name=The One Sky Stinger item.gun_spark.name=Die Zündkerze item.gun_spark_ammo.name=Elektromagnetische Katusche +item.gun_spas12.name=SPAS-12 item.gun_stinger.name=FIM-92 Stinger item.gun_stinger_ammo.name=Stinger-Rakete (LEGACY) item.gun_super_shotgun.name=Super Shotgun @@ -2216,7 +2253,7 @@ item.gun_thompson.name=Thompson Maschinenpistole item.gun_uac_pistol.name=UAC .45 Pistole item.gun_uboinik.name=Ubojnik item.gun_uboinik_ammo.name=12x70 Schrotmunition (LEGACY) -item.gun_uzi.name=IMI Uzi +item.gun_uzi.name=Uzi item.gun_uzi_ammo.name=.22 lfB Patrone (LEGACY) item.gun_uzi_saturnite.name=Saturnit-Uzi item.gun_uzi_saturnite_silencer.name=Saturnit-Uzi mit Schalldämpfer @@ -2321,6 +2358,7 @@ item.ingot_firebrick.name=Schamottstein item.ingot_gh336.name=Ghiorsium-336-Barren item.ingot_gh336.desc=Seaborgiums Kollege. item.ingot_graphite.name=Graphitbarren +item.ingot_gunmetal.name=Rotgussbarren item.ingot_hes.name=Stark angereicherter Schrabidiumkernbrennstoffbarren item.ingot_lanthanium.name=Semistabiler Lanthanbarren item.ingot_lead.name=Bleibarren @@ -2380,6 +2418,7 @@ item.ingot_unobtainium.name=Unobtainiumbarren item.ingot_uranium.name=Uranbarren item.ingot_uranium_fuel.name=Urankernbrennstoffbarren item.ingot_verticium.name=Verticiumbarren +item.ingot_weaponsteel.name=Waffenstahlbarren item.ingot_weidanium.name=Weidaniumbarren item.ingot_zirconium.name=Zirkoniumwürfel item.injector_5htp.name=5-HTP-Autoinjektor @@ -2938,6 +2977,7 @@ item.plate_dineutronium.name=Dineutronium-Verbundplatte item.plate_dura_steel.name=Schnellarbeitsstahlplatte item.plate_euphemium.name=Euphemium-Verbundplatte item.plate_gold.name=Goldplatte +item.plate_gunmetal.name=Rotgussplatte item.plate_iron.name=Eisenplatte item.plate_kevlar.name=Kevlar-Keramik-Verbund item.plate_lead.name=Bleiplatte @@ -2948,6 +2988,7 @@ item.plate_saturnite.name=Saturnitplatte item.plate_schrabidium.name=Schrabidiumplatte item.plate_steel.name=Stahlplatte item.plate_titanium.name=Titanplatte +item.plate_weaponsteel.name=Waffenstahlplatte item.plate_welded.name=Geschweißte %splatte item.polaroid.name=Das Polaroid item.pollution_detector.name=Verschmutzungsdetektor @@ -3148,8 +3189,6 @@ item.rbmk_pellet_ueu.name=NU-Kernbrennstoffpellet item.rbmk_pellet_zfb_am_mix.name=Reaktorfähiges Americium ZFB-Pellet item.rbmk_pellet_zfb_bismuth.name=Bismut ZFB-Pellet item.rbmk_pellet_zfb_pu241.name=Pu-241 ZFB-Pellet -item.rbmk_lid.name=RBMK-Abdeckplatte -item.rbmk_lid_glass.name=RBMK-Glasabdeckung item.rbmk_tool.name=RBMK-Konsolen-Verlinkungsgerät item.rbmk_tool.desc=Schleichen und Rechtsclick auf RBMK um Position zu speichern,$Schleichen und Rechtsclick auf Konsole um zu verlinken! item.rbmk_tool.linked=Position gespeichert! @@ -3912,7 +3951,6 @@ tile.brick_concrete_cracked.name=Rissige Betonziegel tile.brick_concrete_cracked_stairs.name=Rissige Betonziegeltreppe tile.brick_concrete_marked.name=Beschriebene Betonziegel tile.brick_concrete_mossy.name=Bemooste Betonziegel -tile.brick_concrete_mossy.name=Bemooste Betonziegeltreppe tile.brick_ducrete.name=Ducreteziegel tile.brick_ducrete_stairs.name=Ducreteziegeltreppe tile.brick_dungeon.name=Berzelianitziegel @@ -4240,7 +4278,7 @@ tile.gravel_diamond.name=Diamantkies tile.gravel_obsidian.name=Gebrochener Obsidian tile.hadron_access.name=Teilchenbeschleuniger-Zugriffskonsole tile.hadron_analysis.name=Teilchenbeschleuniger-Analysekammernwand -tile.hadron_analysis.name=Teilchenbeschleuniger-Analysekammernfenster +tile.hadron_analysis_glass.name=Teilchenbeschleuniger-Analysekammernfenster tile.hadron_coil_alloy.name=Dichte Supraleiterspule tile.hadron_coil_chlorophyte.name=Dichte Grünalgenspule tile.hadron_coil_gold.name=Dichte Goldspule @@ -4654,7 +4692,6 @@ tile.pwr_port.name=PWR Zugangsport tile.pwr_port.desc=Erlaubt IO für Items und Flüssigkeiten$Platzierung: Hülle tile.pwr_reflector.name=PWR Neutronenreflektor tile.pwr_reflector.desc=Reflektier Neutronen auf Brennstäbe zurück$Platzierung: Hülle, für höhere Reaktivität$Gültiger Block für Hülle -tile.volcanic_lava_block.name=Vulkanische Lava tile.radar_screen.name=Radarbildschirm tile.radio_telex.name=Telex-Maschine tile.radio_torch_counter.name=Redstone-over-Radio Itemzähler @@ -4915,7 +4952,7 @@ trait.rbmx.coreTemp=Kernentropie: %s trait.rbmx.depletion=Verkrustungsgraad: %s trait.rbmx.diffusion=Fluss: %s trait.rbmx.fluxFunc=Zerstörungsfunktion: %s -trait.rbmk.funcType=Funktionsspezifikation: %s +trait.rbmx.funcType=Funktionsspezifikation: %s trait.rbmx.heat=Verkrustung pro Tick bei voller Kraft: %s trait.rbmx.melt=Kollapstiefe: %s trait.rbmk.neutron.any.x=Alle nicht-euklidischen Formen diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 543b8e67e..c62535a91 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1879,7 +1879,10 @@ item.ammo_standard.bmg50_equestrian.name=.50 BMG Demolisher item.ammo_standard.bmg50_fmj.name=.50 BMG Round (Full Metal Jacket) item.ammo_standard.bmg50_jhp.name=.50 BMG Round (Jacketed Hollow Point) item.ammo_standard.bmg50_sp.name=.50 BMG Round (Soft Point) -item.ammo_standard.flame_diesel.name=Diesel Tank +item.ammo_standard.flame_balefire.name=Flamer Fuel, Balefire +item.ammo_standard.flame_diesel.name=Flamer Fuel, Diesel +item.ammo_standard.flame_gas.name=Flamer Fuel, Gas +item.ammo_standard.flame_napalm.name=Flamer Fuel, Napalm item.ammo_standard.g12.name=12 Gauge Buckshot item.ammo_standard.g12_anthrax.name=12 Gauge Anthrax Shell item.ammo_standard.g12_bp.name=12 Gauge Black Powder Buckshot @@ -1891,8 +1894,11 @@ item.ammo_standard.g12_flechette.name=12 Gauge Flechette Shell item.ammo_standard.g12_magnum.name=12 Gauge Magnum Shell item.ammo_standard.g12_phosphorus.name=12 Gauge Phosphorus Shell item.ammo_standard.g12_slug.name=12 Gauge Slug -item.ammo_standard.g40.name=40mm Grenade -item.ammo_standard.g40_flare.name=Signal Flare +item.ammo_standard.g26_flare.name=Signal Flare +item.ammo_standard.g40_demo.name=40mm Grenade, Demolition +item.ammo_standard.g40_he.name=40mm Grenade, High-Explosive +item.ammo_standard.g40_heat.name=40mm Grenade, Shaped Charge +item.ammo_standard.g40_inc.name=40mm Grenade, Incendiary item.ammo_standard.m357_ap.name=.357 Magnum Round (Armor Piercing) item.ammo_standard.m357_express.name=.357 Magnum Round (FMJ Express) item.ammo_standard.m357_fmj.name=.357 Magnum Round (Full Metal Jacket) @@ -1921,8 +1927,10 @@ item.ammo_standard.r762_du.name=7.62mm Round (Depleted Uranium) item.ammo_standard.r762_fmj.name=7.62mm Round (Full Metal Jacket) item.ammo_standard.r762_jhp.name=7.62mm Round (Jacketed Hollow Point) item.ammo_standard.r762_sp.name=7.62mm Round (Soft Point) +item.ammo_standard.rocket_demo.name=Rocket, Demolition item.ammo_standard.rocket_he.name=Rocket, High-Explosive item.ammo_standard.rocket_heat.name=Rocket, Shaped Charge +item.ammo_standard.rocket_inc.name=Rocket, Incendiary item.ammo_standard.stone.name=Ball and Powder item.ammo_standard.stone_ap.name=Flint and Powder item.ammo_standard.stone_iron.name=Iron Ball and Powder @@ -2353,11 +2361,20 @@ item.card_qos.name=Queen of Spades item.cart.crate.name=Crate Cart item.cart.destroyer.name=Scrap Destroying Cart item.cart.empty.name=Minecart +item.cart.powder.name=Powder Cart +item.cart.semtex.name=Semtex Cart item.casing_357.name=.357 Magnum Casings item.casing_44.name=.44 Magnum Casings item.casing_50.name=Large Caliber Casings item.casing_9.name=Small Caliber Casings item.casing_buckshot.name=Buckshot Casings +item.casing.small.name=Small Gunmetal Casings +item.casing.small_steel.name=Small Weapon Steel Casings +item.casing.large.name=Large Gunmetal Casings +item.casing.large_steel.name=Large Weapon Steel Casings +item.casing.shotshell.name=Shotshell Casings +item.casing.buckshot.name=Buckshot Casings +item.casing.buckshot_advanced.name=Advanced Buckshot Casings item.catalyst_clay.name=Clay Catalyst item.catalytic_converter.name=Catalytic Converter item.cbt_device.name=CBT Device @@ -2678,6 +2695,7 @@ item.dnt_boots.name=dienautronium boots item.dnt_legs.name=dineuterium legs item.dnt_helmet.name=dinotroniumu helmet item.dnt_plate.name=dineutrom chestplate +item.dnt_sword.name=dinuatureum sword item.door_bunker.name=Bunker Door item.door_metal.name=Metal Door item.door_office.name=Office Door @@ -2908,7 +2926,10 @@ item.grenade_tau.name=Tau Grenade item.grenade_zomg.name=Negative Energy Pair Annihilation Grenade item.glyphid_gland.name= Gland item.glyphid_gland_empty.name= Glyphid's Fluid Gland +item.gun_am180.name=Silenced Submachine Gun item.gun_ar15.name=Josh +item.gun_autoshotgun.name=Auto Shotgun +item.gun_autoshotgun_sexy.name=Sexy item.gun_avenger.name=CZ57 Avenger Minigun item.gun_b92.name=§9B92 Energy Pistol§r item.gun_b92_ammo.name=§9B92 Energy Cell§r @@ -2926,6 +2947,7 @@ item.gun_bolter_digamma.name=Digamma Gun item.gun_calamity.name=Buzzsaw item.gun_calamity_ammo.name=.50 BMG Round (LEGACY) item.gun_calamity_dual.name=Saddle Gun +item.gun_carbine.name=Carbine item.gun_chemthrower.name=Chemthrower item.gun_coilgun.name=Coilgun item.gun_congolake.name=Congo Lake @@ -2945,10 +2967,16 @@ item.gun_euthanasia_ammo.name=Syringe item.gun_fatman.name=M42 Nuclear Catapult "Fat Man" item.gun_fatman_ammo.name=Mini Nuke (LEGACY) item.gun_fireext.name=Fire Extinguisher -item.gun_flamer.name=Mister Topaz +item.gun_flamer.name=Flamethrower +item.gun_flaregun.name=Flare Gun item.gun_flechette.name=Flechette Rifle item.gun_folly.name=Prototype Digamma "Folly" +item.gun_g3.name=Assault Rifle item.gun_glass_cannon.name=The Glass Cannon +item.gun_greasegun.name=Grease Gun +item.gun_heavy_revolver.name=Heavy Revolver +item.gun_heavy_revolver_lilmac.name=Little Macintosh +item.gun_henry.name=Lever Action Rifle item.gun_hk69.name=Grenade Pistol item.gun_hp.name=HPP Lazerjet item.gun_hp_ammo.name=Ink Cartridge @@ -2962,16 +2990,24 @@ item.gun_kit_2.name=Gun Repair Kit item.gun_ks23.name=Samuel the Big Shotgun item.gun_lacunae.name=CZ33 Abaddon item.gun_lacunae_ammo.name=5mm Round (LEGACY) +item.gun_lag.name=Comically Long Pistol item.gun_lever_action.name=Mare's Leg (Original) item.gun_lever_action_ammo.name=12x74 Buckshot (LEGACY) item.gun_lever_action_dark.name=Mare's Leg (Dark) item.gun_lever_action_sonata.name=Flipped Mare's Leg item.gun_lever_action_sonata_2.name=§cSonata's Microphone§r +item.gun_liberator.name=Liberator +item.gun_light_revolver.name=Break-Action Revolver +item.gun_light_revolver_dani.name=Day And Night item.gun_lunatic_marksman.name=Lunatic Sniper Rifle item.gun_m2.name=Ma Deuce -item.gun_minigun.name=CZ53 Personal Minigun +item.gun_maresleg.name=Lever Action Shotgun +item.gun_maresleg_akimbo.name=Lever Action Shotguns +item.gun_maresleg_broken.name=Broken +item.gun_minigun.name=Minigun item.gun_mirv.name=M42 Nuclear Catapult "Experimental MIRV" item.gun_mirv_ammo.name=Eightfold MIRV (LEGACY) +item.gun_missile_launcher.name=Missile Launcher item.gun_moist_nugget.name=Mosin-Nagant item.gun_mp.name=Pacifist's Machine Gun item.gun_mp40.name=Submachine Gun @@ -2984,7 +3020,7 @@ item.gun_osipr_ammo.name=Dark Energy Pulse Plug item.gun_osipr_ammo2.name=Combine Ball item.gun_panzerschreck.name=Panzerschreck item.gun_proto.name=M42 Nuclear Catapult "Proto MIRV" -item.gun_quadro.name=Quattro Formaggi +item.gun_quadro.name=Quad Rocket Launcher item.gun_remington.name=バイデン ブラスト [BIDEN BLAST] item.gun_revolver.name=Enhanced Revolver item.gun_revolver_ammo.name=Lead Bullet @@ -3017,7 +3053,7 @@ item.gun_sauer.name=Stan Sauer's Shotgun item.gun_skystinger.name=The One Sky Stinger item.gun_spark.name=Spark Plug item.gun_spark_ammo.name=Electromagnetic Cartridge -item.gun_spas12.name=SPAS-12 Shotgun +item.gun_spas12.name=SPAS-12 item.gun_stinger.name=FIM-92 Stinger item.gun_stinger_ammo.name=Stinger Rocket (LEGACY) item.gun_super_shotgun.name=Super Shotgun @@ -3027,7 +3063,7 @@ item.gun_thompson.name=Thompson Submachine Gun item.gun_uac_pistol.name=UAC .45 Pistol item.gun_uboinik.name=Uboinik item.gun_uboinik_ammo.name=12x70 Buckshot (LEGACY) -item.gun_uzi.name=IMI Uzi +item.gun_uzi.name=Uzi item.gun_uzi_ammo.name=.22 LR Round (LEGACY) item.gun_uzi_saturnite.name=Saturnite Uzi item.gun_uzi_saturnite_silencer.name=Saturnite Uzi with Silencer @@ -3138,6 +3174,7 @@ item.ingot_firebrick.name=Firebrick item.ingot_gh336.name=Ghiorsium-336 Ingot item.ingot_gh336.desc=Seaborgium's colleague. item.ingot_graphite.name=Graphite Ingot +item.ingot_gunmetal.name=Gunmetal Ingot item.ingot_hes.name=Highly Enriched Schrabidium Fuel Ingot item.ingot_lanthanium.name=Semi-Stable Lanthanium Ingot item.ingot_lanthanium.desc='Lanthanum' @@ -3205,6 +3242,7 @@ item.ingot_unobtainium.name=Unobtainium Ingot item.ingot_uranium.name=Uranium Ingot item.ingot_uranium_fuel.name=Ingot of Uranium Fuel item.ingot_verticium.name=Verticium Ingot +item.ingot_weaponsteel.name=Weapon Steel Ingot item.ingot_weidanium.name=Weidanium Ingot item.ingot_zirconium.name=Zirconium Cube item.injector_5htp.name=5-HTP Autoinjector @@ -3553,7 +3591,7 @@ item.nugget_daffergon.name=Daffergon Nugget item.nugget_desh.name=Desh Nugget item.nugget_dineutronium.name=Dineutronium Nugget item.nugget_euphemium.name=Euphemium Nugget -item.nugget_euphemium.desc=A small piece of a pink metal.$It's properties are still unknown,$DEAL WITH IT carefully. +item.nugget_euphemium.desc=A small piece of a pink metal.$Its properties are still unknown,$DEAL WITH IT carefully. item.nugget_gh336.name=Ghiorsium-336 Nugget item.nugget_gh336.desc=Seaborgium's colleague. item.nugget_hes.name=Highly Enriched Schrabidium Fuel Nugget @@ -3834,6 +3872,7 @@ item.plate_fuel_sa326.name=HES-326 Plate Fuel item.plate_fuel_u233.name=HEU-233 Plate Fuel item.plate_fuel_u235.name=HEU-235 Plate Fuel item.plate_gold.name=Gold Plate +item.plate_gunmetal.name=Gunmetal Plate item.plate_iron.name=Iron Plate item.plate_kevlar.name=Kevlar-Ceramic Compound item.plate_lead.name=Lead Plate @@ -3844,6 +3883,7 @@ item.plate_saturnite.name=Saturnite Plate item.plate_schrabidium.name=Schrabidium Plate item.plate_steel.name=Steel Plate item.plate_titanium.name=Titanium Plate +item.plate_weaponsteel.name=Weapon Steel Plate item.plate_welded.name=Welded %s Plate item.polaroid.name=The Polaroid item.pollution_detector.name=Pollution Detector @@ -4640,7 +4680,7 @@ item.waste_u233.name=Depleted Uranium-233 Fuel item.waste_uranium.name=Depleted Uranium Fuel item.waste_zfb_mox.name=Depleted ZFB MOX Fuel item.watch.name=Broken Pocket Watch -item.watch.desc=A small blue pocket watch.$It's glass has a few cracks in it,$and some shards are missing.$It stopped ticking at 2:34. +item.watch.desc=A small blue pocket watch.$Its glass has a few cracks in it,$and some shards are missing.$It stopped ticking at 2:34. item.watz_pellet.boron.name=Boron Absorber Pellet item.watz_pellet.du.name=Depleted Uranium Absorber Pellet item.watz_pellet.hes.name=HES Watz Pellet diff --git a/src/main/resources/assets/hbm/lang/it_IT.lang b/src/main/resources/assets/hbm/lang/it_IT.lang index 1143e0318..c3d83825d 100644 --- a/src/main/resources/assets/hbm/lang/it_IT.lang +++ b/src/main/resources/assets/hbm/lang/it_IT.lang @@ -3686,7 +3686,7 @@ item.nugget_daffergon.name=Daffergon Nugget item.nugget_desh.name=Desh Nugget item.nugget_dineutronium.name=Dineutronium Nugget item.nugget_euphemium.name=Euphemium Nugget -item.nugget_euphemium.desc=A small piece of a pink metal.$It's properties are still unknown,$DEAL WITH IT carefully. +item.nugget_euphemium.desc=A small piece of a pink metal.$Its properties are still unknown,$DEAL WITH IT carefully. item.nugget_gh336.name=Ghiorsium-336 Nugget item.nugget_gh336.desc=Seaborgium's colleague. item.nugget_hes.name=Highly Enriched Schrabidium Fuel Nugget @@ -4753,7 +4753,7 @@ item.waste_u233.name=Depleted Uranium-233 Fuel item.waste_uranium.name=Depleted Uranium Fuel item.waste_zfb_mox.name=Depleted ZFB MOX Fuel item.watch.name=Broken Pocket Watch -item.watch.desc=A small blue pocket watch.$It's glass has a few cracks in it,$and some shards are missing.$It stopped ticking at 2:34. +item.watch.desc=A small blue pocket watch.$Its glass has a few cracks in it,$and some shards are missing.$It stopped ticking at 2:34. item.watz_pellet.boron.name=Boron Absorber Pellet item.watz_pellet.du.name=Depleted Uranium Absorber Pellet item.watz_pellet.hes.name=HES Watz Pellet diff --git a/src/main/resources/assets/hbm/lang/pl_PL.lang b/src/main/resources/assets/hbm/lang/pl_PL.lang index 1307d0b8b..3e5e63745 100644 --- a/src/main/resources/assets/hbm/lang/pl_PL.lang +++ b/src/main/resources/assets/hbm/lang/pl_PL.lang @@ -3203,7 +3203,7 @@ item.nugget_daffergon.name=Daffergon Nugget item.nugget_desh.name=Desh Nugget item.nugget_dineutronium.name=Dineutronium Nugget item.nugget_euphemium.name=Euphemium Nugget -item.nugget_euphemium.desc=A small piece of a pink metal.$It's properties are still unknown,$DEAL WITH IT carefully. +item.nugget_euphemium.desc=A small piece of a pink metal.$Its properties are still unknown,$DEAL WITH IT carefully. item.nugget_gh336.name=Ghiorsium-336 Nugget item.nugget_gh336.desc=Seaborgium's colleague. item.nugget_hes.name=Highly Enriched Schrabidium Fuel Nugget @@ -4178,7 +4178,7 @@ item.waste_u233.name=Depleted Uranium-233 Fuel item.waste_uranium.name=Depleted Uranium Fuel item.waste_zfb_mox.name=Depleted ZFB MOX Fuel item.watch.name=Broken Pocket Watch -item.watch.desc=A small blue pocket watch.$It's glass has a few cracks in it, $and some shards are missing.$It stopped ticking at 2:34. +item.watch.desc=A small blue pocket watch.$Its glass has a few cracks in it, $and some shards are missing.$It stopped ticking at 2:34. item.watz_pellet.boron.name=Boron Absorber Pellet item.watz_pellet.du.name=Depleted Uranium Absorber Pellet item.watz_pellet.hes.name=HES Watz Pellet diff --git a/src/main/resources/assets/hbm/textures/items/ammo.png b/src/main/resources/assets/hbm/textures/items/ammo.png index f8d52e3b7..b899cb0fe 100644 Binary files a/src/main/resources/assets/hbm/textures/items/ammo.png and b/src/main/resources/assets/hbm/textures/items/ammo.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_balefire.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_balefire.png new file mode 100644 index 000000000..e52210024 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_balefire.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_gas.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_gas.png new file mode 100644 index 000000000..22624ac48 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_gas.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_napalm.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_napalm.png new file mode 100644 index 000000000..a8eea9e23 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.flame_napalm.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_flare.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g26_flare.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/ammo_standard.g40_flare.png rename to src/main/resources/assets/hbm/textures/items/ammo_standard.g26_flare.png diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_demo.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_demo.png new file mode 100644 index 000000000..72fb13e92 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_demo.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g40.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_he.png similarity index 100% rename from src/main/resources/assets/hbm/textures/items/ammo_standard.g40.png rename to src/main/resources/assets/hbm/textures/items/ammo_standard.g40_he.png diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_heat.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_heat.png new file mode 100644 index 000000000..298891567 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_heat.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_inc.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_inc.png new file mode 100644 index 000000000..d16f73b87 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_inc.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_phosphorus.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_phosphorus.png new file mode 100644 index 000000000..5ca95889b Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.g40_phosphorus.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_demo.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_demo.png new file mode 100644 index 000000000..a7d3428eb Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_demo.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_inc.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_inc.png new file mode 100644 index 000000000..b0633b4d9 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_inc.png differ diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_phosphorus.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_phosphorus.png new file mode 100644 index 000000000..9d6a8b794 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_phosphorus.png differ diff --git a/src/main/resources/assets/hbm/textures/models/weapons/tesla_cannon.png b/src/main/resources/assets/hbm/textures/models/weapons/tesla_cannon.png new file mode 100644 index 000000000..650db41b1 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/tesla_cannon.png differ