From a37dd9e639adb343aec5209b78d887d63dde0bcf Mon Sep 17 00:00:00 2001 From: Bob Date: Mon, 28 Oct 2024 22:15:34 +0100 Subject: [PATCH 01/12] 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 Date: Tue, 29 Oct 2024 12:52:21 +0300 Subject: [PATCH 02/12] implement configuration for forcefield emitter github desktop fucking sucks --- .../machine/TileEntityForceField.java | 194 +++++++++++------- 1 file changed, 118 insertions(+), 76 deletions(-) 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() From 4684058634f54dc353eaf77befa04ce2568068f1 Mon Sep 17 00:00:00 2001 From: Boblet Date: Tue, 29 Oct 2024 16:49:26 +0100 Subject: [PATCH 03/12] crocket --- .../hbm/items/weapon/sedna/BulletConfig.java | 21 +++++- .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 23 +----- .../weapon/sedna/factory/GunFactory.java | 5 +- .../sedna/factory/GunFactoryClient.java | 70 +++++++++++------- .../weapon/sedna/factory/XFactory40mm.java | 6 +- .../weapon/sedna/factory/XFactoryRocket.java | 39 ++++++---- .../assets/hbm/textures/items/ammo.png | Bin 13890 -> 14326 bytes .../textures/items/ammo_standard.g40_demo.png | Bin 0 -> 302 bytes ...ndard.g40.png => ammo_standard.g40_he.png} | Bin .../textures/items/ammo_standard.g40_heat.png | Bin 0 -> 340 bytes .../textures/items/ammo_standard.g40_inc.png | Bin 0 -> 336 bytes .../items/ammo_standard.g40_phosphorus.png | Bin 0 -> 372 bytes .../items/ammo_standard.rocket_demo.png | Bin 0 -> 332 bytes .../items/ammo_standard.rocket_inc.png | Bin 0 -> 329 bytes .../items/ammo_standard.rocket_phosphorus.png | Bin 0 -> 343 bytes 15 files changed, 97 insertions(+), 67 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.g40_demo.png rename src/main/resources/assets/hbm/textures/items/{ammo_standard.g40.png => ammo_standard.g40_he.png} (100%) create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.g40_heat.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.g40_inc.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.g40_phosphorus.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_demo.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_inc.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.rocket_phosphorus.png 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 705ca8add..45d0a9ab7 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 @@ -73,8 +73,9 @@ 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, + G40_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..cbb79bcae 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.*; @@ -57,25 +61,52 @@ public class GunFactoryClient { //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 +118,17 @@ 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); + + setRendererBulk(LegoClient.RENDER_GRENADE, + g40_he); + setRendererBulk(LegoClient.RENDER_RPZB, + rocket_rpzb_he, rocket_rpzb_heat); + setRendererBulk(LegoClient.RENDER_QD, + rocket_qd_he, rocket_qd_heat); + setRendererBulk(LegoClient.RENDER_ML, + rocket_ml_he, rocket_ml_heat); //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); @@ -148,4 +164,8 @@ public class GunFactoryClient { ((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/XFactory40mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java index 830bbf708..59b00e18b 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 @@ -29,7 +29,7 @@ import net.minecraft.util.MovingObjectPosition; public class XFactory40mm { public static BulletConfig g40_flare; - public static BulletConfig g40; + public static BulletConfig g40_he; public static BiConsumer LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { Lego.standardExplode(bullet, mop, 5F); bullet.setDead(); @@ -38,7 +38,7 @@ public class XFactory40mm { 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")); + g40_he = new BulletConfig().setItem(EnumAmmo.G40_HE).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")); ModItems.gun_flaregun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(100).draw(7).inspect(39).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE) @@ -55,7 +55,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_flare)) .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/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index bb905aeab..68eba398b 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 @@ -31,6 +31,9 @@ import net.minecraft.util.Vec3; public class XFactoryRocket { + public static BulletConfig rocket_he; //TODO: just make this a fucking array you moron + public static BulletConfig rocket_heat; //TODO: so the amount of lines increases linearly instead of exponentially + public static BulletConfig rocket_rpzb_he; public static BulletConfig rocket_rpzb_heat; public static BulletConfig rocket_qd_he; @@ -38,16 +41,16 @@ public class XFactoryRocket { public static BulletConfig rocket_ml_he; public static BulletConfig rocket_ml_heat; + // 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,34 +61,42 @@ 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 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) + rocket_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) + rocket_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); + + //not a great solution but it makes the entire ordeal a lot more bearable + rocket_rpzb_he = makeRPZB(rocket_he); + rocket_rpzb_heat = makeRPZB(rocket_heat); + + rocket_qd_he = makeQD(rocket_he); + rocket_qd_heat = makeQD(rocket_heat); + + rocket_ml_he = makeML(rocket_he); + rocket_ml_heat = makeML(rocket_heat); ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(7).inspect(40).crosshair(Crosshair.L_CIRCUMFLEX) diff --git a/src/main/resources/assets/hbm/textures/items/ammo.png b/src/main/resources/assets/hbm/textures/items/ammo.png index 7a9a0fb47d18012efa4f5fe020bcac90e65e90e5..7bbe059e5766d6b467dc814edfe58ca6586923e4 100644 GIT binary patch literal 14326 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 IRkjHFKas_PQ~&?~ literal 13890 zcmYj&2{=??`~Dg0*vBqn##Z(vOZJ&TC}qtO*~^lx>}i-W$W{?q%Pv&b$QomfEFsF4 zEZJopvJL*n_kGv(|GBPl&X_ar^SknQ{V zGqB;Af=D42FDlJj-#=3%9Vs}d$;rRH7kTrd<#1x|BRlTzQpT>`v<&OJl1%+^)9trj zugn+)h19&dB;QJ(JNBYQ5%J7X(BT=w7YzOEXJmnI$i|Okzi-K&Ul0C%s+O>EoA$lG zK7H759QcAPCIVjq$sI^uH>%UC*Ir17IucEk{+6mIGX}tPr1%rzaAf3u6$6hc6!^8* zDjdM|E?nsxc)UnS1~l7wDRjc!EGr!;zkdA+0X)V(My_EO{Zwdx5<5cH zG4|qK_-%P0AuE*;a4n;;H)gjp&0li4S!;jB^StnIJ4L#uD32QW@Pih3SbujbxalrN zEEv$sR3Q&3dXc|5^2l%fB%B^Ea&ACWLL#Dl7BsG@t4obr4x8~)xqj;w1CUc!m!=AB z)98r36u9Eymj%sPv*ZLcn0aEPoEj*B!N&psq5*oRdFZic{c$|XcXk0d55*o(X zba01_lam}!^!|NO7S_|-dmS9nLy;#oF0S%1aWM^@@V!Ddaz0gB`^j@%c5&DpQobka zOV8KQ&sI1_a$nx-y9rq!j}|>8?L@9V3Dyudv64EG0Bw@s{z^vX=2WS@lz?pK=0l~C zrR3z~`J=hBr=sG7D1&_svtOut+eKDd@$cjSTsH!WkHtXY3xz4c#4U@LvM} zY9_vp7}m?(Pd1y1PS0vQ#`8)nD>X}>X=V!#;SrQT+2e2gjbl&UvwVT0MzPxm;N;9S z&u3~m`Uv6Vj3hkj)qOfQAXUS!%GL6)^pT*GGp&ksdDQl}Z`D#RI@N|=-s=#WSvtzl zyEMDjtNXxchB1m9oaxg!X>oB=0=9V3V!9VHxTOAq{@Bs4VIKnJJbRTqZF-ow5wiLu z)i5)9xAB=s#T+td3jw%V0o?Sc3d)B{7so1{qGsy@)+gQqCvsZgmKa_l>0pdp~F2 zzk&{U$5U4^QK5LBG7a1xe;E+mgtMT!gI%&h5-IknO!LcwJ%JZrmPDu5_SzPFX2)H! zubG-A6&6yrb(S;XnoYZgR(?lqYMikB_Iw>ylSz>IOJ%&RzuW$2d!}jscY7e=*rqQV zIV}S#J_!6fmK%!{^3&R)3M=H^RQVbCmuqeyEgiquG`hWA17s-yZyl~<`6aTOsoFY6 z{Vy)7gl5Kh3!N@DwJwnxH@8FD0^EW+47=!{1_Cg#EztP3mo=jBU?5}*3jtE&6<-{j zo_%s39UK}8d-Uf^>w=F%*9%^UFaS}q7=J00HVdIwzm~jqgZu@Hm^|=wt|%|RE%&m_ zT-B0&_)~o9KrCTRiRvvTwfC*kMMg*YWy+(@0mj7EoABe%db6)!tYL8nN@7n(Xhbno zn@#&!J7Z4q?*#6X&sq?Ul2tCvlpgLyvs0|bEZ=tA_&)CX+m~(S@ybDvHI_4q{Wzt~qqKzsyUet*_c^$nE3;21`VAFkO>b74a%HlM2I$LkBqX z?xT&H5~2S7{$sl0Vq&|)8O(>KMFx~Wbrc^na~Sfd+5WJV$7_xxYFY>Y-RX=8a=dLA zFCm(2c5Gl^t(ZOE`6`|t5Kh*;^Q)`b6kkjJQ_f)Tte}LJcXmG5{3oW$H|;)p(YN#w z(FnpdI`{e0Rp9gC;_LU=sJy&9d?N|8=5Y8%c`IA}1D`tsMV?HxYe}8BCCy#SQoiFU zmebAYpFf|f!mVFa-As3huk|5D@f0`JH#YK2pZ=>gqoXjC{5>?3%S`BZ4xiq%SRbzZ z##~7^A2b<09U|!};_FdMcYF{zRlYsc9P6b}!3*og~Ff?#I7=Fmg}>L~ks+z`fFZv-8IyT=9ErJe6;okfgI zP4j=wIoNQOMYcJT=g7a8h;>GI>pk2Bj83Os8U^93^fsyzk3i0=06 z(Pw*B_dfjIO!Uv0;G)8gt(G#I##cv2!9i+#2PdHl(4ZsY`DXK((;f`gv?h!13eU*M zC|-)@0$5mLTI?y&&d!Ci%J%?0A>J_rn81xGOLPkmIW+%{e7gae7INvkt;x+A2f{{kbx% z_+*mO^}z!ZyHp0Zm9JqojRB&;f*1RlUMR>EKBm$kclvjcnH)v9(P7lS;3FI$!?Pss z{2Ba0tULF$q&2ah7_z-42MzrWYOT=*_!(3~0?$$BX3L+sW5I9o%*+9N(;(HjRHvpOUR=_57-K zs888We*v+QO6H@^%9-rb`fQE#gQ1=4eJO?(FHOg8AcxkfE@yaW@Mz|hpE=J}<#~^# zX?8zWwna>w10Si(QY!7itZ6%q5CTNkY*M4~bJ5VT!y#~4RodZC zzApq=Z@LQLI_Sx$!cYK@q6Yv}S62f-%moS+ONrJeOz~*VI5N z7v>xsM@l)WO(-&hu!H0kV{LP>bj{LYlv>&hT*cTCp zeMs@aNvhY(SJgG3W4AovK)&D(J;y*t0*In%N#9KaZO{wDSxsF7T6kLRnirGd#W%W8M z&=_AW4(PR(ybId-b~NM6^5?gv)Qvjr<$y+ZKnRJ1e;5vg62&K_#K!LE$GTX_Jed`B zXdYcN6B84QZl5(8-OHA9VGOaRLMP$_EJQ4~$#2iMBD$}o7U~prgU+z7XuOSl1oSil zZjAoV$0R?Bv{~V%bSIKIm#UL?)#$)T<52CXpfhbD$wt9G?v;3|;7jVMiR+n`{OsC* zDIfh%cUMXQiaRYqbR+bvqVMs3BrD80Ii?&~aBB5EY~6EUx~sd9$mTyOA()lR?r6;Z zN`(R%8%B?^jEGsRLZkS@5szC{JP8dy@#SToW~MwLc>!UHg~c{G70K6t{?%DOhx-%$ z&Yj-Xn!4K32``~;rY55kdXAn78LrL7FwlC06%~tHs%}g!rFFW3$4&m~*E>HxamZh! zGl*JEZ60O9kN2~Xkm2SJ;GO%0gby3i?ru&!H zynt|rg?JiqI6wG(Z>~23Sz;vbCnvpchFG*&jnaR|Gvh< zrCCBwuF{;vkXtnmmGrYx=WM-#m$r>;FeMa(Zt?%A3JtAq#(v*AQ`%6-iQwn8M2alv zBOB*0Gi2LrbgcNX&?<`BRtepBwUcRZIXB*Q!M*R{0DHf{uEXN-t5>gJM>6fTlj|K` zwMp5((j8*KDh3*oHmfhhXi$_?VqGic(GPF%2(BKe*sLn&WsGv(g9>J4FjaVXDSqv* zocS$UyKS9&0a-WYb(xZqG7X8n3AsMcZ${!4uSOl}n7fYia`RadLYqE5COQMHvDJlz zRE8RdLIE4UXb^QNhCl%L*DazJm6E@ASYhEMHM6}2 z51Pb_Yd=d(;eh-cHQsSANUdVrLj)|%`<=Bwps~8P_QMyvxygo|h8C}U>+g2=^?_Bp zQ9YZ3=u0pf%8ycvEHK!GHXG=HyLT9oGnK=HtuUi%l|kLQ_53J0a$;hl!pY3cEC^if zqpcYBDaj>)V%gLFt zV~vfOAGo`>Q?>pQ@F=5cshnaQ<*rSTl^nwSq_r_N4vUSY6+IQA5DyicH65I=g;TsT zJU**l)3RHdpXZ`N-@Gca{$ifPI-)a`9#f+#)S3NeFwSneKeyc1$0s2%1D#pSC~o1vB$(zY~375J@(HR^SzMwZh%^ zt@>(8=bSdd13+T~f4ny<+^5R9F6;b{3c#CYf~(nJkfBFE_mE)ZQ!CbRiS($xuGkCK z{`P4HkeuRTC{7V3AQkU*iJuBO&4Y><`2Xirty>WG&&G2%Kz_yYwf5u3%0mOYMxm~D zZd%|@>|aak&A&P$=*7&vKoPz5+=op2Kt~ypAlX_0+_KI6R2@qD>NjL@wrZ_)HP@Tn z@qAq9*uqdh1*B1}Asu0#s+)>VAmv;wEsneZCAeKJM|kBmnVj$eaUpFo?Uzs-fxkh4=s-?FJsFn zjp^owEf_{jQl_~!|9J4jd^YO0D&h#xCboO5u`~UOXvv!gONc*H!B~D0BUwpQIB>WUU0)IUI z%j4trQ2l$J5!pS~XeHV80M+pdhwxRZklmi%HcVV+UKz|YeJ>q0{oqsL>gt0Z468o% z5qQM!wN$RG!D^u7V8xs$AYk9=^mHJ0njS3ImN&`=8Onpo?b_7lZpF&d-2#lZuc3q{om6EKlUt5oL-Q{{IS3XCGraX+HQ zVF2HMOMi0JKdQ>#wl@{ri<@MmS-pYQz)otO*WB};Gvz_7VzIx(n*Sps=_LpsuHU(H z;azbt;v9a=K1=|^k7Kn}HSN36KmiZXc-vLQHf2*XWb{vjERbUty} zj=Xc?b^_`A6&gr(i29|5W~{)W2TUjrBd8ZTcc^(xKEjXc3*KSvFLENQQig!M?aMbt z^33g`T{8U0C;svH!U#Q;(5Xz)pa8O#va#^68~5qR99 zqVH6%!;VnnY{9NjWqq#7ngj~>zt`5*I{6AtCDNASlr$kx+!9>}z0>eEVWkBmeVy|-QRqM2(7rSZ+NJ>|5+Fn4x#f;o3SlE~BVDucN}jkXah^h(6^S51>UvTSf$+F6t66@Q zyia2J0?pxD8nRL)I$-4l78yKhDKpx{JtsT}Lj1q7@#*h^3$f0oouS870nL8DrEWKO z+`?-gAA&(G;=-%cRMrzgl4*O#zub|mP zWZog|9rBO=mL>LZ2@EQ!u$=@vyNmvamZstyYf$d{Jg`W=Jns7 zdZ#(t^%DKY2g(DVb9O=qzqnr_X#s-(+cq$jd_CWscBk{i-~pQ;^w_4J8G!v9UpkMVV?5Kd`>^NzMjZv%fq{7e+@$S{{6grG&I! zrThw)X&zn?3ZC2{9TI=Ub2km__+~v0yQfxXDY$ccjeaj*XEXl}jns?AW4%T)oP=na z^8;_7cCr*e#BoY1eyRz*KY5K(>3SB`&2$w3dyZNTP8;u3yi0te z1wLM&CG$eEtA-8JE2}&=#RU3@*)R~bBqk@b*BF9+sO#w|iP5kddDp)y9G^JyPEO|j z!v5gW`sUH#OdV#GLJICVvejjUl+=~y!Cz?SPFqB~TXT^c~ zi%0F#*zD5vBDE9s-At9T3rvGykM60;Dt0MKUBpe)@kQse!5Y}#tN9BIf8dM68GKp+=Ldtdrk zWgDtOC8Ih0?$7zUfE-Yd0);R^5878RAiL3G5!&89FPCp!5qio2)-Pbl82R}#ueexm zctI2ts60JAM}*SexY!~<9iq4j?U8!<+>=Q5@P>b$7R&gq1!D( z>d(6h3}jCFzGrI4(iOLLL%U&wp50FIQ@8>EltOLXe|1aSMT4XQew01kRfC6uot<4o zTwLq^ec`?aO<^kPT@66>$Mr^(N8*!euY}O|NmQ*1`Oj$?@LOJkGTZ02TA+!@3QSEv zph~90bqSr&(3F9n8{l?9eNR=pG3Mmtveb(K?hr3akDaQk$`nQ~Y`Prp|7}Ur#In*S zobSsvaL1x{bmi?9$<+$%ot@4YlK#LirXErVMuQt0xZ8wb|4>t^*?N^u=1=PdpI|=< zGz5Q44*K%bH@nueYYh?3cBo?EiplkR+jE^<$WXQ5;NXV`TMoG?IUYTp^DC6YGH#3V zZ`{;ljs({=CDE==sm(u_`G>_;Qz%C&&o_HdMQx{SFVpPKY!Tob?leMAB}Yym|M)cC z#bSx^T~JA?H86#Q9RGVahdri@hY>!m=k2^cxooyg*eXwoILO5SW~4mHu=3wUm>mMr zxbw_!X!uH%M+7R9YAU3_COzem_~9vX*S@;{>0OE>6F>v0aVz%mk}97mCWDQ*T3E^D z`C6o}X!y;@KU9(<(ER9pC;-9K|G1mY&M`>S7e4cRf@5L(W<*Ihnwfkiz@cHv>#g#n z+J9yesK9xP2y&a6-hM-GaIiZ1ht0v+b1G|B`ct_=p;ekjYv?D>sX;L>a~3#iNNiJE_HSnWW46RL^|+Gf>wo|YHvMP{K|EsnOO))b0Bbe@bcSe zTU6fRQ9)Yn;u`;9%o5!aIY^`^d2M1PSGx@4&oN}u^wyK5y6ZS#)D0f2vC!_94%n;A5KYd_K}wtPE39u@kTfGl^V zX6RjXPBJ`QaM-y!Bq87t`AztoX=r+~pO~1)0={S5*1vJ1+i;@~(PqAUSF^-i{9SqZ zWib6ir;B@pg^FaNJ_j5qTmc`h@wl~E^(f^mL{XXU_0!Hwl?FRYB))NSD zihypHnkRsXw=Z3e`u_dyOvj0m=~)K0UOBnPLpl930PI1V*qudAq*~L@?Y-TTuSvYK8MiH zmP!NY!h3ffovBf8WG~6EAv;fq7Y75QetFgUtX;<5KEooB$nh=TmlY6%vYQ(KoQ+p? zfBwVxD={N>-OcSTCVx7+_OG^95)**C*;~gxAffio%LEd=Kn`-hq=)}DBM;@__5l-I zY{((WJ|;>?rBx|lF9x@tt_iuni-G*^LUu^lF<}m69mT0@s5q+%Z~8XH;z7n{ z=Pg~fy9be(X2Fn_g7>)3x~dF*@5Hp)IX+bT=@PwBCCk50&1K(w0dzBcx3w)6!18mB zHwt!o9iF_l zd&du7!9Ohiq^9UKP8-!E#Q%cZ!w#G)R<~Vb@0-X#Iiy9*BL`wn3E2FbA*bJtlO3D@ z+7KAvs8DGPBOUbyJ{{1!hWonnoPuv%u4Fk^^$SD#dE_##aKe4WuGqOgV{bB^MzT;{ zf!gZ#w(Jx56)RrUVmcV9^7r>znOQ;92s`{d7!R?Geg@fn;uu@55bgAe* zOr?TjfsO)QK#&RQCtmRCxXU}C7x5lW_$0gdpg(4jCnoLau*ufD??>LB1>)T9h4LM6 ziVt9EyyRS&sj*v``{LUt*pe2*P@9*q<|B0qyz7?iO%h2^7;e8KBz}lJvogFvFxEML zT`~k8C10q}&8&N71F5d3ucgfrzb2Jz9~M*5w|5U9O?Du8F(7g3{6a(>>&A{+(mu84u&S^ikkYs_xZ0asR_|MI_C4U9pDK) zYbYkTuOu6bI%HvagdU6^Xjc5Q1b^5Zp?wkdjT%Voi_fx0)^}{_#D0k%s2>y;pNJri zinOa_qZhS=xVFofyayR#;*oDe~uSu7kcILmXx@Qk`4P<}UE9~QmdPn>c#aR8a2Akd1U&|I= zumGuzyy$m6B5}H7*+hmknwxNE_>$w#YI*?0fQoIB{U;K=a}ro^Hzw|^-7W;3b!UP( z3BDH+lg35aLC{bG5|fh10i}>5`DLcBHc62kOhA#wdh5vJKeG3KD{Z8-n9%RM-JK!E zJ#R(m_5Sguv5nGnwz^CPSQ!MITj|SCG%gSx#GIYf7(d#^)?x*GT%2c9pM1QhFVk)0 z4&$Z(BR&~!g5~bY8u?Oyve4zrx}~j`46~kr()6F*mEq`d7T^I$Z>Onvs~Ln$gx45K zBb@bdr=T^u=4MGG7kyI~E=>}06mI{s+8)uDkrI}YlirI9 zkk=OW40g7zLI)tcofY})9vVbQJCLn%*#keLEHD~ygKQ0k7H$2(l=AA3V2Ee7Er9sV zLh&GnWMN^ng$vT(Qj7k+sveb+v;?F*pn0{|JYaT8Ho!2HVs!Wuc|7=Q0s;hKT9vm` zZfkO7peyL{2YB30oE3gjEhhA=e*o>~wccVHM^<>iGAH9rLgl=y7ZYTz@)^?Msu@>P(%{9{UKknduuHOi8_5 zk8QKU+iBb$7`W<66S{qk>gsf{a5wnXCyj#nDKi%mg+JPujP1kaocoM+gq4^d`MU;$ z1WgJybxYTh|M|@_{_fiLA%+47CE^UJ8bZBm55HgX}2$U9BwzdxZr_?}%V z@{%#in_QnlbPzijRA>9gT=fF9#=8W;JT=S}= z1iKh;bba6FF)8;Jt}-3;5hr(&vHF>g8Svt;owrEq6_dqt^*&Xxi0+q8I}y=Sr6<=< zol{UyAe1OA3)8F42EBdg`=VfsG&2KOoG>xl5vmVwwWmh2p1cqi%h%K^D+Szwy0wnP{{z!8*B-5{bFT#TSTZW=+MLDg}nwoB0|)a3>RAq zwho$O<(bBnIoQ~~&2r@O6LN5INZ`6M3rpMJZq?ciG}s?Dvw~c7*icuzcxcGvJYKTA zMY-kRsXoe4$bH&XYWeXV4dX>6Tth=c8VRCzZdo&}n3i@aLE11gV!$x7_16;*uGhhI zQu{WoF^i^m(K$QT0}fvkh4l;#buBDX>B(XWB64$zqfJe{TgOH!=g>w*DCdE!=QOOB z>`4dPSD-?P9L$|U;V4HTL>}+a!;qw%!*_DaYmNBckkm)@o3vjFf8$r`O&=k<{(hTn zk4nzhjn4ynRMgegmseLcgM(Ezn)Yoatg1yWA+3T72j^^9Sd3u`@D>rMfqZt`?yq-u ztF&~`4`*5+H^05^?z~Ei|A_+RBsnfnu#l6Ll|_WwW9E_SN_VF_rWkUk_(2})>toi) z!)n#}we`-Mag?QDz`=QmAmBz zm=McLSUt2FCVlYAUvxL3;J%2;9eVQ%qQKyjN~S6g^JlksKcsX?I`W?Vs11#qCYz^J z)|bo6;rxrj#o8Lbf*_IV`ywHMn)A+_8SIe@grlF{FKO(Raiwav@=H#HS?Co6OUgH6 zgA=GA6jpe`^qugk+$DJ^!Wz#UX`HV!`{g;0LwP=Lk^M9^UO~QeZ+wY7w7&%y<6C|G z$_j7+-cZiyVqp(I39(#durwyloL}GC;wW=;Dlx)=@N-GQJYE&r>jxj#(38seHSO2o z3hJVcFOth8bjrI_Wh}&GCG2nixhyAteftREx*harnw*#rU@c~05zT-fHRqrs3VShX ze;C@!$#x=t8t`~*0$b65W(I5GVmVbOQ*ZR}tkVN`SZ^1rw4I}6n9-w*3*>`;{`%$v z098O?ObWAUx4f{A0XnN9`p<$sJzWPq@b9tE&}A{eaU$1R&Gz1c<)GgI*CN|I|9Xu* zo;HPz_m_qDFT?7mrQ*v^{F(AEp`cweZW-TkXY+EsZ--Q>70Rl%-%h3=7al2r>WPWo5#F10Tw63simQ* z5L*c-RSrkN0yP=LFECK>>Q&BOmv0?A>2l0+&@>E13U+@g@Xto$rcNIsx&@A9k~!r= zIK#Tl0n~0paxNnjY+GD2D{t7EZPaU>A`VW4@Bv#|y;*eukD0Hb(U5c*2eRLUhY+Xr z0HEc5Ef2xdv$Kbevo6K)4fsjuZa&=MdqGb6CRm9btl6E#g8i00MAdA+*_4u*N^xG) z0G6!i%#3j)A2G*;+FWsAmb8E70aH`UALwjQ{J~&#)-c1q97@$za6RduK?^9W*+=5+5x){U$9WT@ z#a#2Ht{03BHQZ2JivBWc=QQ@b;+mOJhC7*S`8L35?z9{7LyLt1N%qRBoU=%Cu6%Q~ zZ7h%x!c*i!+4`Zp`8{c`9Bbx|1)~(T+n|94h)Ml|%fiGcq0O5h8YB^u=Fte$Ewbf~!5 zi0Xma`ogdzSVKaeJ)s-b5JiKuYq*B$?iG~tGZ0d)tN^&S!Rg8X)ls$;ed#9cD{^u_ z#?RZAf!1;UEKw7E+3qxn;^91}kKtJFuZgAw^m$hN0(--In?oCP#}-(=6PLV9!?Ua* z|IR)r`7>+$qPp%&P*z{PL0!u+5>K;RrB#^&XI*xQazrC94Gu6~*QUA^5HG*Qp8hVz zPvYlckk#w7LjVUVpCIj6?%HyCm3y{MeeuvqQ0H(6KXVXCCkq~NMI=`=!h!xI7WR3H z8G#X#pTIOTYxj^T5g{O6?3S!)*?Ywh_x@?wic9#+?PZNtLndC$PHqj5y>$8ZCTx1M zt2yL&>(|hyyP(Kg=0_2ZsNiws;q6LoxXvuTncC>hm)poXpv+L8_w#py39M!@esVzC z=(M*lIR7?D;1DX^w3~P|3(v-yrFn~PNKYdbZa4S2$lPVeUxj2fnR+*U}S0n`(K^X9n9ftL}Z-YMA>Pt|S#%b+%;rl5YU0Kpvgg-+;h+z>W+IZ96+yFPTM z`@h{RkX&-sqV&VN?u}iV2Ix@>HLk?{#RuK+Mej-&H>M+{G5vxrvEG$d` zy#Meas=zsTzTHDY6dFqa8`yk&CARDu!k#|A9J4IH?t86jT zZ%<`M>(x+J2%v|_D99in4;I$U_WtX7K%>~{e_QK79h3Qet2oDpQ{@QdSkdADza*5EqwC!$#DJkG2*op-f)i1Dn{kOeN=KkxPr65qW*2L5-UUi?6@wi4&md#FB zR{lTTFkK1*$|WaTkokp$*?*JXASUAkdE<)Uz14zM;+pJ(5t07z{j}vQGVBFh1r^QLVuYL=+9gG;95~0>J6{m(u6IeLg=5EvvmPf^v{wbP-hph_v< z)zH}ZGBuU+dCKjo=41)-4eo9;O#4V%RhWDbsddjz=NoCE@^!<;lZcTzLm?eN3B8ssP(8c#QAC#c?}k-mWH-i z<00kAQ8kp&?MA{!lgC=g1%ZA zY4xo2M^U!yQqp#l3kqyTKP)CQ0Lm5rs^mZr!^`oKuva3N&k(^)lkA@{tUL02SGCY6 z0)2v-NhF@{DlpYOytzjbfjXf64HD;^;BB{FRjjitV0NWmt@WQ3B$1>~$RkM?_y*>{ z6lep3(BS!Q@;_;UYN1gg*p>vQdLJC;A^5NS0+*U+cZRt@761SM07*qoM6N<$f+;9_ AssI20 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2988915675bfb337c05ab4526eff184a726223e3 GIT binary patch literal 340 zcmV-a0jvIrP)YU6vy#zBtzR-N@;~akw~b9O336OxcUSg+;z@_Z;Cx4V+Y%CeCz+Q$Z;?h}vR0{{m{b|ta|B*Wo-$mz{K?X4z#yH|=VopU%q zHn&wyE_X03gUQInv<$qN&-InF@=kKizTK0K)*|rdn3h4kQ6rAt3lTNj7&}u1kdD?O zj$#1njT&8D1CT6|1F}exB4j174pImdA>PcVt82V1A{jeVd3AIb3l=@PO3|KHpH|9MR3 zKeA!?024At%3G7+*Y&pyZ|=QfU|?Wiuy!&fXb6e{FwO67zGKKZYRDiZBgU}GP!+Es zDE{0Z$?#u9g@qw@hdP6vu_lAh$%_njcE1@eUSwu)KX4aom|zGRm}>u*mX~0Nzx#;6 z&h9sZfWUu-4<8tD8iLi-Rfekn<>mh}@bmv?5D@r}*ASdhMXVusVNML i=l?L9$pRE<#svVT@qb8pyBECx0000d3AIb3l=@PO3|KHpH|9MR3 zKeA!?024At%3G7+*Y&pyZ|=QfU|?Wiuy!&fXb6e{FwO67zGKKZYRDiZBgW8OT#VNc z78t{EIRoQ%g@qa3zJ1GZ{P=MOY=$tQ3tTvTmC-@ofI(GFjp6Ovw+wIJzGV;=7G|)t zv}Bmu)`sC7oKe+XT>M{EO^rcVSQw76xdd-q6JrR57mz_|Z!hERTesj|foVSY=p2KA zsrG+@EAs=7>1vSLlfd^5rj&?ie!mHaIuSPS7(2O_!qhfUHcDQ zoE>1uH3avk&}rbjN~yWDZd``q!p-v@Wf02mBCkv&}bfl(Gv0Z0!= z8qGS-FHg+_n*}RPt`meozDP^UM%k>-q(C)S{EfdpvAPP66ha&)C5E+Gl zEU4XW@%{CK<93t~ZNumw6^$ReX0eSE8qGRUxWREd*fr|{*8++lrG6miA`g)&Jv1^( eRT8D8>W4p!Q+jj}n`<%v0000 zYxDW>g>*W(h;m?5h@rSowPq0pE1InazPCg=9jY}e#g#x2qLm=oi!73q_R=J+%Eak- z(VLvGK)}Grz`)>!#ms;1Vm6!Jn<#H&GcW{-)cpL@>lozLY`)C8bnjk?wkzk~C;s^KQ#wvOp{1<6@MC?bscG9%cXPu#`~Ec?ymM{B!&j}d zEt1(*FKAr(tsZC&Tc|H9o1dN^5c9RI7SB5rTm0}#sM{Vk1?eTLRv!59=cG1UE_3Oc zHUS@l7M?_<1@jx*r*}X6_LZGyl2H;*xc;4#3uXc74<0^klJ>j6P}3&xlqurHVreF3 mmvpI!rbA-FF3dSAg&58$_QpO86+Z|JDF#nhKbLh*2~7Y>%7wH5 literal 0 HcmV?d00001 From acfb786e1a077184572def8ba745577a64e31bac Mon Sep 17 00:00:00 2001 From: Bob Date: Tue, 29 Oct 2024 21:47:14 +0100 Subject: [PATCH 04/12] we spiked your explosives with napalm --- .../entity/effect/EntityFireLingering.java | 20 ++--- .../weapon/sedna/factory/GunFactory.java | 2 +- .../sedna/factory/GunFactoryClient.java | 15 ++-- .../weapon/sedna/factory/XFactory40mm.java | 48 ++++++++++-- .../weapon/sedna/factory/XFactoryRocket.java | 72 ++++++++++++------ src/main/resources/assets/hbm/lang/de_DE.lang | 9 ++- src/main/resources/assets/hbm/lang/en_US.lang | 9 ++- ..._flare.png => ammo_standard.g26_flare.png} | Bin 8 files changed, 124 insertions(+), 51 deletions(-) rename src/main/resources/assets/hbm/textures/items/{ammo_standard.g40_flare.png => ammo_standard.g26_flare.png} (100%) diff --git a/src/main/java/com/hbm/entity/effect/EntityFireLingering.java b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java index e785b7d44..2c101d471 100644 --- a/src/main/java/com/hbm/entity/effect/EntityFireLingering.java +++ b/src/main/java/com/hbm/entity/effect/EntityFireLingering.java @@ -79,15 +79,17 @@ public class EntityFireLingering extends Entity { } } 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); + 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); + } } } 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 45d0a9ab7..7950fdc69 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 @@ -73,7 +73,7 @@ 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, + 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, 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 cbb79bcae..bb59ffa04 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 @@ -119,16 +119,13 @@ public class GunFactoryClient { g12_anthrax.setRenderer(LegoClient.RENDER_STANDARD_BULLET); g12_equestrian.setRenderer(LegoClient.RENDER_LEGENDARY_BULLET); - g40_flare.setRenderer(LegoClient.RENDER_FLARE); + g26_flare.setRenderer(LegoClient.RENDER_FLARE); - setRendererBulk(LegoClient.RENDER_GRENADE, - g40_he); - setRendererBulk(LegoClient.RENDER_RPZB, - rocket_rpzb_he, rocket_rpzb_heat); - setRendererBulk(LegoClient.RENDER_QD, - rocket_qd_he, rocket_qd_heat); - setRendererBulk(LegoClient.RENDER_ML, - rocket_ml_he, rocket_ml_heat); + 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); 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 59b00e18b..0e7a9d3f7 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,14 @@ 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.items.ModItems; import com.hbm.items.weapon.sedna.BulletConfig; import com.hbm.items.weapon.sedna.Crosshair; @@ -28,23 +35,54 @@ import net.minecraft.util.MovingObjectPosition; public class XFactory40mm { - public static BulletConfig g40_flare; + 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_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; + Lego.standardExplode(bullet, mop, 3F); + EntityFireLingering fire = new EntityFireLingering(bullet.worldObj).setArea(5, 2).setDuration(200).setType(EntityFireLingering.TYPE_DIESEL); + fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); + bullet.worldObj.spawnEntityInWorld(fire); + bullet.setDead(); + }; 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_he = new BulletConfig().setItem(EnumAmmo.G40_HE).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).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 +93,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_he, 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/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index 68eba398b..89b02a1fd 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; @@ -31,15 +38,11 @@ import net.minecraft.util.Vec3; public class XFactoryRocket { - public static BulletConfig rocket_he; //TODO: just make this a fucking array you moron - public static BulletConfig rocket_heat; //TODO: so the amount of lines increases linearly instead of exponentially + public static BulletConfig[] rocket_template; - 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_rpzb; + public static BulletConfig[] rocket_qd; + public static BulletConfig[] rocket_ml; // FLYING public static Consumer LAMBDA_STANDARD_ACCELERATE = (bullet) -> { @@ -75,6 +78,25 @@ public class XFactoryRocket { 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; + Lego.standardExplode(bullet, mop, 3F); + EntityFireLingering fire = new EntityFireLingering(bullet.worldObj).setArea(6, 2).setDuration(300).setType(EntityFireLingering.TYPE_DIESEL); + fire.setPosition(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord); + bullet.worldObj.spawnEntityInWorld(fire); + bullet.setDead(); + }; public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); } public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); } @@ -83,26 +105,30 @@ public class XFactoryRocket { //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_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_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]; - //not a great solution but it makes the entire ordeal a lot more bearable - rocket_rpzb_he = makeRPZB(rocket_he); - rocket_rpzb_heat = makeRPZB(rocket_heat); + BulletConfig baseRocket = new BulletConfig().setLife(300).setSelfDamageDelay(10).setVel(0F).setGrav(0D).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STANDARD_ACCELERATE); - rocket_qd_he = makeQD(rocket_he); - rocket_qd_heat = makeQD(rocket_heat); + 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]; - rocket_ml_he = makeML(rocket_he); - rocket_ml_heat = makeML(rocket_heat); + 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() @@ -113,7 +139,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) @@ -124,7 +150,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() @@ -135,7 +161,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/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index c11015608..7bfc90e24 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1168,8 +1168,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.g23_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 +1201,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 diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 543b8e67e..98e5e209d 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1891,8 +1891,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.g23_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 +1924,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 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 From 2ddb61e5a47718fc9fa6b87fe721e5ad739499fb Mon Sep 17 00:00:00 2001 From: Boblet Date: Wed, 30 Oct 2024 16:50:20 +0100 Subject: [PATCH 05/12] clearly you don't own an M47 WP aerial bomb --- .../com/hbm/inventory/OreDictManager.java | 36 ++-- .../java/com/hbm/inventory/material/Mats.java | 178 +++++++++--------- .../hbm/inventory/material/NTMMaterial.java | 6 +- .../inventory/recipes/AssemblerRecipes.java | 2 +- .../hbm/inventory/recipes/PressRecipes.java | 3 +- .../inventory/recipes/anvil/AnvilRecipes.java | 6 +- .../com/hbm/items/special/ItemAutogen.java | 4 +- .../weapon/sedna/factory/XFactory40mm.java | 23 ++- .../weapon/sedna/factory/XFactoryFlamer.java | 2 +- .../weapon/sedna/factory/XFactoryRocket.java | 23 ++- .../java/com/hbm/main/CraftingManager.java | 2 +- .../assets/hbm/textures/items/ammo.png | Bin 14326 -> 14417 bytes .../items/ammo_standard.g40_phosphorus.png | Bin 372 -> 417 bytes .../items/ammo_standard.rocket_phosphorus.png | Bin 343 -> 381 bytes 14 files changed, 162 insertions(+), 123 deletions(-) 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/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/sedna/factory/XFactory40mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java index 0e7a9d3f7..14afbffe1 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 @@ -30,8 +30,11 @@ import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.HbmAnimations.AnimType; +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 { @@ -61,11 +64,27 @@ public class XFactory40mm { }; 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(bullet.worldObj).setArea(5, 2).setDuration(200).setType(EntityFireLingering.TYPE_DIESEL); + 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); - bullet.worldObj.spawnEntityInWorld(fire); + 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() { 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 e839142c3..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 @@ -72,7 +72,7 @@ public class XFactoryFlamer { 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(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; 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 89b02a1fd..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 @@ -32,9 +32,12 @@ 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 { @@ -91,11 +94,27 @@ public class XFactoryRocket { }; 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(bullet.worldObj).setArea(6, 2).setDuration(300).setType(EntityFireLingering.TYPE_DIESEL); + 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); - bullet.worldObj.spawnEntityInWorld(fire); + 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(); } 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/resources/assets/hbm/textures/items/ammo.png b/src/main/resources/assets/hbm/textures/items/ammo.png index 7bbe059e5766d6b467dc814edfe58ca6586923e4..b899cb0fed298dd394d69f59eed4a1be58fe971d 100644 GIT binary patch literal 14417 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 Xpd?=tWYP!TBM7J}X)2b=TLk_;gb~29 literal 14326 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 IRkjHFKas_PQ~&?~ 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 index 3158cbea59e46fd42047ad644c480698d2f2d7c8..5ca95889b901d70585ee0337fa6e22f96a09864f 100644 GIT binary patch delta 374 zcmV-+0g3+f0-*ztG=Er0L_t(Ijm42aNCHtD$G=Zbh!PwkNsEkvN>n%pml`D3hMOCL zg9clop}DEKA)FkdC1?z{H|3OzL`N#-A{5BI{@jI7Sf25k-f?w!76g5!_a49BhwtzA zfd7U#FV#JXi*s_nPu%4ml-9x9Cn3(CGyJ`r;7*wrKIbK}7JoypVc@Ct003CYriV(t z2t>2lG_iG&LS#AwMNvE@wqW%Xq@1t8Y?|1hiJ1MK~OWuIq@M?_w$6a@G63KWLRYk*ok@Sq5Vax~^mS{tSWHByP6nTuEF404NrV zMAI}d#*nHW!f$%*z&{p5BYWT)$Mdgio8x?BVg}M^5Ld|^dmKtB3WWk0m_U#?GRWKG z9gaUT_BfPMbcq2u9p^(62oy!(Vkcc<;QF!wtx_jH76?h-|AO`{vzvd7i2bL00%}x? U^iaZcWdHyG07*qoM6N<$f*V|{D*ylh delta 329 zcmV-P0k;031M~urG=D2eL_t(IjbmUKXuycfxm?TgAI8>g{=%g@qa3zJ1GZ{P=MOY=$tQ3tTvTmC-@ofI(GFjp6Ovw+wIJ zzGV;=7G|)tv}Bmu)`sC7oKe+XT>M{EO^rcVSQw76xdd-q6JrR57mz_|Z!hERTesj| zfoVSY=p2KAsY3RDf-XRJ$=kPY84f-=$8hQFb%qP4uQC#C0L+jB4=*r0efR>dnPdQS bHdO%tZ@Gj*Vm0{sGzG=DTnL_t(Ijir;ZO2YsYMNa~PjVW%GK*3t5rB)#Yiy(^7#crX4 zlONEjlbiqGAUG;+uKfciafw4f(pWlJq>!jMgtkGj5~q}E(zW{-1hsW%`Hh+;bTd^Tyz{c7(rN?u= zhAsh*dgLO=T^f8qN30LO8# zZJV3sC4;^<*TGcUnx^@xs?vIXpksB}*)L%l?U|Pe9jfJ`50EQlNJt41(junO9=kDg zQ`UGoMKvD^i7ZSMM2y%+PD*sFE=oFuX|yS-dE}%thDQSCL1H-w(*Fwy k6#Hp{LWNx-w!&KZ1N3K#G(K$ztpET307*qoM6N<$f^3PNH2?qr delta 300 zcmV+{0n`5d0@nhNG=C0BL_t(IjbmV-5HK<@FfiCSnf^x>JhJaJBe4cBF)%PNeEIy1 zK~hGHK}k)XVODJy!`!yE|AaK67yttm;n@tr!om!emX<^t0yiMq+K=Jw+qVpF-@YZu z5GDo&28Ii#uQJ}gbqj6)vLWc`11K1UVj&0gm!mv@qbk{HHM`} zH!FhK!0`OZD+X-?b*zREOfZBDVIrWPfrpoi;r8_h43aWp3|BAQWY9KHXW-%Gf*VfI y0DOiJ Date: Wed, 30 Oct 2024 18:33:47 -0400 Subject: [PATCH 06/12] Fixed localization duplicates for German lang --- src/main/resources/assets/hbm/lang/de_DE.lang | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7bfc90e24..1f8048a33 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. @@ -3153,8 +3153,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! @@ -3917,7 +3915,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 @@ -4245,7 +4242,6 @@ 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_coil_alloy.name=Dichte Supraleiterspule tile.hadron_coil_chlorophyte.name=Dichte Grünalgenspule tile.hadron_coil_gold.name=Dichte Goldspule @@ -4659,7 +4655,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 @@ -4920,12 +4915,12 @@ 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 -trait.rbmk.neutron.fast.x=Elliptische nicht-euklidische Formen -trait.rbmk.neutron.slow.x=Hyperbolische nicht-euklidische Formen +trait.rbmx.neutron.any.x=Alle nicht-euklidischen Formen +trait.rbmx.neutron.fast.x=Elliptische nicht-euklidische Formen +trait.rbmx.neutron.slow.x=Hyperbolische nicht-euklidische Formen trait.rbmx.skinTemp=Außenentropie: %s trait.rbmx.source=Selbstverbrennend trait.rbmx.splitsInto=Verlässt nach: %s From f6911c77301cbe157bf116002bebd7c6acf9ee82 Mon Sep 17 00:00:00 2001 From: Wolf Date: Wed, 30 Oct 2024 21:34:15 -0400 Subject: [PATCH 07/12] changes --- src/main/resources/assets/hbm/lang/de_DE.lang | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 1f8048a33..9e4af5001 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -4242,6 +4242,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_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 @@ -4918,9 +4919,9 @@ trait.rbmx.fluxFunc=Zerstörungsfunktion: %s trait.rbmx.funcType=Funktionsspezifikation: %s trait.rbmx.heat=Verkrustung pro Tick bei voller Kraft: %s trait.rbmx.melt=Kollapstiefe: %s -trait.rbmx.neutron.any.x=Alle nicht-euklidischen Formen -trait.rbmx.neutron.fast.x=Elliptische nicht-euklidische Formen -trait.rbmx.neutron.slow.x=Hyperbolische nicht-euklidische Formen +trait.rbmk.neutron.any.x=Alle nicht-euklidischen Formen +trait.rbmk.neutron.fast.x=Elliptische nicht-euklidische Formen +trait.rbmk.neutron.slow.x=Hyperbolische nicht-euklidische Formen trait.rbmx.skinTemp=Außenentropie: %s trait.rbmx.source=Selbstverbrennend trait.rbmx.splitsInto=Verlässt nach: %s From beb221af14ae618efc652dd671ddeba717173e36 Mon Sep 17 00:00:00 2001 From: Wolf Date: Wed, 30 Oct 2024 23:17:24 -0400 Subject: [PATCH 08/12] new stuff --- src/main/resources/assets/hbm/lang/de_DE.lang | 14 ++++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9e4af5001..8e2a9d91f 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1588,11 +1588,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 @@ -1902,6 +1911,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 @@ -2326,6 +2336,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 @@ -2385,6 +2396,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 @@ -2943,6 +2955,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 @@ -2953,6 +2966,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 diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 98e5e209d..bc9a242c2 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -2358,11 +2358,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 @@ -2683,6 +2692,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 @@ -3143,6 +3153,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' @@ -3210,6 +3221,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 @@ -3839,6 +3851,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 @@ -3849,6 +3862,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 From 2f0c25daf8f483365cb6ef3398ce338b4360f9af Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 1 Nov 2024 01:11:05 +0300 Subject: [PATCH 09/12] Allow harvesting statue_elb with a red key --- src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java b/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java index 4e7d7657f..8beda5f7a 100644 --- a/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java +++ b/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java @@ -153,6 +153,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; From 6cc1c09253e5bdae5a430527f550c9deb24c7815 Mon Sep 17 00:00:00 2001 From: abel1502 Date: Fri, 1 Nov 2024 01:24:21 +0300 Subject: [PATCH 10/12] Fix drops --- .../com/hbm/blocks/generic/DecoBlockAlt.java | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java b/src/main/java/com/hbm/blocks/generic/DecoBlockAlt.java index 8beda5f7a..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(){ From 6f309f533643393a84ce3d7418105bb685abb89d Mon Sep 17 00:00:00 2001 From: abel1502 Date: Sat, 2 Nov 2024 02:23:07 +0300 Subject: [PATCH 11/12] Fix some "it's" vs "its" typos --- src/main/java/com/hbm/items/weapon/GunB92Cell.java | 2 +- src/main/java/com/hbm/main/MainRegistry.java | 2 +- src/main/resources/assets/hbm/lang/en_US.lang | 4 ++-- src/main/resources/assets/hbm/lang/it_IT.lang | 4 ++-- src/main/resources/assets/hbm/lang/pl_PL.lang | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) 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/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index bd76ac048..3058b4ea8 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -969,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 " diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 98e5e209d..30023474c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -3558,7 +3558,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 @@ -4645,7 +4645,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 From a0f6f562798a0da68cad46b3f3769121510f4966 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 2 Nov 2024 14:16:44 +0100 Subject: [PATCH 12/12] yet more gun crap --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 +- .../com/hbm/handler/EntityEffectHandler.java | 2 + src/main/java/com/hbm/items/ModItems.java | 2 + .../weapon/sedna/factory/GunFactory.java | 3 +- .../sedna/factory/GunFactoryClient.java | 2 + .../weapon/sedna/factory/Orchestras.java | 23 ++++++ .../weapon/sedna/factory/XFactory40mm.java | 14 +++- .../sedna/factory/XFactoryBlackPowder.java | 1 + .../weapon/sedna/factory/XFactoryEnergy.java | 66 ++++++++++++++++++ .../weapon/sedna/ItemRenderTeslaCannon.java | 26 +++++++ .../com/hbm/render/util/RenderInfoSystem.java | 9 +-- src/main/resources/assets/hbm/lang/de_DE.lang | 34 +++++++-- src/main/resources/assets/hbm/lang/en_US.lang | 35 ++++++++-- .../textures/models/weapons/tesla_cannon.png | Bin 0 -> 3749 bytes 14 files changed, 196 insertions(+), 23 deletions(-) create mode 100644 src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java create mode 100644 src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderTeslaCannon.java create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/tesla_cannon.png diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 08d328ce0..6b4b0992c 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -1758,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); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index 6f2382d20..c6597b3f5 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -578,6 +578,8 @@ public class EntityEffectHandler { double y = living.posY; double z = living.posZ; + if(living.isInWater() || living.isWet()) props.fire = 0; + 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); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index dd6f08b6e..ba95331c0 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1619,6 +1619,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; @@ -6965,6 +6966,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/weapon/sedna/factory/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactory.java index 7950fdc69..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(); 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 bb59ffa04..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 @@ -58,6 +58,7 @@ 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); @@ -155,6 +156,7 @@ 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); 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 14afbffe1..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 @@ -11,6 +11,7 @@ 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; @@ -30,6 +31,7 @@ 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; @@ -43,7 +45,15 @@ public class XFactory40mm { 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(); }; @@ -89,7 +99,7 @@ public class XFactory40mm { public static void init() { - g26_flare = new BulletConfig().setItem(EnumAmmo.G26_FLARE).setLife(100).setVel(2F).setGrav(0.035D).setRenderRotations(false).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x9E1616).setScale(2F).register("G40Flare")); + 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")); 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/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/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 7bfc90e24..95432b90a 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -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,7 +1171,7 @@ 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.g23_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 @@ -2107,7 +2110,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 @@ -2124,6 +2130,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 @@ -2142,9 +2149,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 @@ -2158,16 +2171,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 @@ -2180,7 +2201,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 @@ -2213,6 +2234,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 @@ -2221,7 +2243,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 diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 98e5e209d..95c7ccc9a 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,7 +1894,7 @@ 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.g23_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 @@ -2913,7 +2916,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 @@ -2931,6 +2937,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 @@ -2950,10 +2957,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 @@ -2967,16 +2980,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 @@ -2989,7 +3010,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 @@ -3022,7 +3043,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 @@ -3032,7 +3053,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 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 0000000000000000000000000000000000000000..650db41b168d008a184292e5fa3ee4d884b17333 GIT binary patch literal 3749 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 literal 0 HcmV?d00001