From a37dd9e639adb343aec5209b78d887d63dde0bcf Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 28 Oct 2024 22:15:34 +0100 Subject: [PATCH] better afterburn mechanics --- changelog | 3 + src/main/java/com/hbm/blocks/ModBlocks.java | 6 - .../blocks/generic/BlockMotherOfAllOres.java | 319 ------------------ src/main/java/com/hbm/config/WorldConfig.java | 6 - .../java/com/hbm/entity/EntityMappings.java | 1 + .../entity/effect/EntityFireLingering.java | 99 ++++++ .../com/hbm/entity/effect/EntityMist.java | 1 - .../hbm/entity/projectile/EntityChemical.java | 9 - .../java/com/hbm/extprop/HbmLivingProps.java | 37 +- .../com/hbm/handler/EntityEffectHandler.java | 46 ++- .../weapon/sedna/factory/GunFactory.java | 2 +- .../weapon/sedna/factory/XFactoryFlamer.java | 90 ++++- src/main/java/com/hbm/lib/HbmWorldGen.java | 7 - src/main/java/com/hbm/main/ClientProxy.java | 1 + src/main/java/com/hbm/main/MainRegistry.java | 4 +- src/main/java/com/hbm/main/NEIConfig.java | 26 -- .../hbm/particle/ParticleFlamethrower.java | 10 +- .../com/hbm/particle/helper/FlameCreator.java | 20 +- .../render/block/RenderBlockMultipass.java | 12 +- .../java/com/hbm/tileentity/TileMappings.java | 2 - .../machine/TileEntityCoreEmitter.java | 19 +- .../assets/hbm/textures/items/ammo.png | Bin 13234 -> 13890 bytes .../items/ammo_standard.flame_balefire.png | Bin 0 -> 364 bytes .../items/ammo_standard.flame_gas.png | Bin 0 -> 343 bytes .../items/ammo_standard.flame_napalm.png | Bin 0 -> 352 bytes 25 files changed, 243 insertions(+), 477 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockMotherOfAllOres.java create mode 100644 src/main/java/com/hbm/entity/effect/EntityFireLingering.java create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.flame_balefire.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.flame_gas.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.flame_napalm.png 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..08d328ce0 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); @@ -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/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..e785b7d44 --- /dev/null +++ b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java @@ -0,0 +1,99 @@ +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 { + + 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 18c6a73fa..e295d64bd 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -25,7 +25,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; @@ -47,9 +46,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) { @@ -267,31 +265,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) { } @@ -308,6 +283,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()); @@ -331,6 +308,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 2ce39d4ce..6f2382d20 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; @@ -47,6 +48,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; @@ -567,34 +569,28 @@ public class EntityEffectHandler { if(entity.worldObj.isRemote) return; EntityLivingBase living = (EntityLivingBase) entity; - int temp = HbmLivingProps.getTemperature(living); - - if(temp < 0) HbmLivingProps.setTemperature(living, temp + Math.min(-temp, 5)); - if(temp > 0) HbmLivingProps.setTemperature(living, temp - Math.min(temp, 5)); + HbmLivingProps props = HbmLivingProps.getData(living); + Random rand = living.getRNG(); - if(HbmLivingProps.isFrozen(living)) { - living.motionX = 0; - living.motionZ = 0; - living.motionY = Math.min(living.motionY, 0); - - 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(entity instanceof EntityPlayerMP) { - NBTTagCompound nbt1 = new NBTTagCompound(); - nbt1.setString("type", "frozen"); - PacketDispatcher.wrapper.sendTo(new AuxParticlePacketNT(nbt1, 0, 0, 0), (EntityPlayerMP) entity); - } - } + if(living.isImmuneToFire()) props.fire = 0; + + double x = living.posX; + double y = living.posY; + double z = living.posZ; + + 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/items/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 907942666..705ca8add 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 @@ -75,7 +75,7 @@ public class GunFactory { 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, + 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/XFactoryFlamer.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java index e98eb9637..e839142c3 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)) { + 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/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/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 1d48f0720..bd76ac048 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(); @@ -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/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 eae41a14a..edcca5f2f 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityCoreEmitter.java @@ -96,7 +96,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++) { @@ -110,20 +110,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/resources/assets/hbm/textures/items/ammo.png b/src/main/resources/assets/hbm/textures/items/ammo.png index f8d52e3b784f0aedfd2127f34a28a18e906e9e40..7a9a0fb47d18012efa4f5fe020bcac90e65e90e5 100644 GIT binary patch literal 13890 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 Sf&YX9JXU=VY0M!Q&J2x-TMca2s z!7YokK7pWxEOxVWwizNMQ{LcQnviOmRPf-qJC5&n-}nC?{MV3DDk-J8N_a^E{>NI`@x0wq*j4q#1ATAFWQR zi*YzqH>1nFOWQI#AzJ;gO|xp24s6S8jZ*=lAQsEjnq(*5rWvv~#|bvAkUa-c5R2q1 zuOI+ovA_v7$lkmW(wJ);4wZdsU|S})7Y_(PO(uMX=f7&AH38~QUH}EWPEQ(Z()v;A zP5{n!YrQ*-4i44iXLk-pI2O_wp(#!oVYylp1+h39P(td?0KNgsdZEO8p(u|40000< KMNUMnLSTXr&6M>3 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..22624ac48d4c29bb8c4794d8a484e3034676c49e GIT binary patch literal 343 zcmV-d0jU0oP)xs9|yI(y?Vt~2H`v>?}cz(H!_GI;=%uN8Kl)&1uKg=A}RI7n4+%2o)(SI8>6&fN&1S^;*-U7W}3!mweB?@B0P*tCUhkDP@kG6K+^aiPoC3Ecv)x z0q{1n@4Kq!8aJFI34;s<8Jyp9P|@awG)+wuMZDk631fTqwT9}sTS?zF#p#Og8$SqG zPzHc$gY>r_>caQI(1H#@d1s+Cw`a1WK<5ZKwja41#K{EnIR!mo zL{mwRU!`+Iy|zk{2QaS|g50m9HC;Kz1Tie`;NlEMkM=x_cem5|qd17O6AYV>hJ`je y;J38d&b|zefj~zFZFZc6YH8tr1~|yJGJqdf@^{$T!H_Qi0000