From cf9f837c202085b07a9bb198b40f5d3ba707b06e Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 5 Aug 2021 15:23:18 +0200 Subject: [PATCH] new satellite designator, cancer medication, funny darts --- .../com/hbm/crafting/ConsumableRecipes.java | 1 + .../com/hbm/explosion/ExplosionNukeSmall.java | 4 -- .../java/com/hbm/extprop/HbmLivingProps.java | 59 +++++++++++++++++- .../com/hbm/handler/BobmazonOfferFactory.java | 5 ++ .../hbm/handler/BulletConfigSyncingUtil.java | 2 + .../com/hbm/handler/EntityEffectHandler.java | 13 +++- .../hbm/handler/guncfg/GunDartFactory.java | 42 +++++++++++++ .../java/com/hbm/inventory/AnvilRecipes.java | 8 +-- .../java/com/hbm/inventory/MagicRecipes.java | 5 ++ .../com/hbm/inventory/gui/GUIRBMKConsole.java | 3 +- src/main/java/com/hbm/items/ModItems.java | 9 +++ .../java/com/hbm/items/food/ItemPill.java | 7 +++ .../com/hbm/items/tool/ItemSatDesignator.java | 46 ++++++++++++++ .../com/hbm/items/tool/ItemSatInterface.java | 2 +- .../java/com/hbm/main/ModEventHandler.java | 14 ++--- .../entity/effect/RenderDeathBlast.java | 14 +++-- .../machine/rbmk/TileEntityRBMKConsole.java | 19 ++++++ src/main/resources/assets/hbm/lang/de_DE.lang | 3 + src/main/resources/assets/hbm/lang/en_US.lang | 3 + .../gui/reactors/gui_rbmk_console.png | Bin 5798 -> 5783 bytes .../hbm/textures/items/ammo_dart_nuclear.png | Bin 0 -> 203 bytes .../hbm/textures/items/sat_designator.png | Bin 0 -> 231 bytes .../assets/hbm/textures/items/siox.png | Bin 0 -> 284 bytes 23 files changed, 233 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/hbm/items/tool/ItemSatDesignator.java create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_dart_nuclear.png create mode 100644 src/main/resources/assets/hbm/textures/items/sat_designator.png create mode 100644 src/main/resources/assets/hbm/textures/items/siox.png diff --git a/src/main/java/com/hbm/crafting/ConsumableRecipes.java b/src/main/java/com/hbm/crafting/ConsumableRecipes.java index 85e6c5e13..44b11b6ad 100644 --- a/src/main/java/com/hbm/crafting/ConsumableRecipes.java +++ b/src/main/java/com/hbm/crafting/ConsumableRecipes.java @@ -112,6 +112,7 @@ public class ConsumableRecipes { GameRegistry.addRecipe(new ItemStack(ModItems.pill_iodine, 8), new Object[] { "IF", 'I', ModItems.powder_iodine, 'F', ModItems.fluorite }); GameRegistry.addRecipe(new ItemStack(ModItems.plan_c, 1), new Object[] { "PFP", 'P', ModItems.powder_poison, 'F', ModItems.fluorite }); GameRegistry.addRecipe(new ItemStack(ModItems.radx, 1), new Object[] { "P", "F", 'P', ModItems.powder_coal, 'F', ModItems.fluorite }); + GameRegistry.addRecipe(new ItemStack(ModItems.siox, 8), new Object[] { "PNF", 'P', ModItems.powder_coal, 'F', ModItems.powder_asbestos, 'N', ModItems.nugget_bismuth }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.xanax, 1), new Object[] { ModItems.powder_coal, ModItems.niter, ModItems.powder_bromine }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.fmn, 1), new Object[] { ModItems.powder_coal, ModItems.powder_polonium, ModItems.powder_strontium }); GameRegistry.addShapelessRecipe(new ItemStack(ModItems.five_htp, 1), new Object[] { ModItems.powder_coal, ModItems.powder_euphemium, ModItems.canteen_fab }); diff --git a/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java b/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java index 3f0882e3a..c572ce6ef 100644 --- a/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java +++ b/src/main/java/com/hbm/explosion/ExplosionNukeSmall.java @@ -50,10 +50,6 @@ public class ExplosionNukeSmall { ExplosionNukeGeneric.dealDamage(world, posX, posY, posZ, 45); break; case 3: new ExplosionNT(world, null, posX, posY, posZ, 20F).addAllAttrib(ExplosionNT.nukeAttribs).overrideResolution(64).explode(); - /*new ExplosionNT(world, null, posX + 7, posY, posZ, 10F).addAllAttrib(ExplosionNT.nukeAttribs).explode(); - new ExplosionNT(world, null, posX - 7, posY, posZ, 10F).addAllAttrib(ExplosionNT.nukeAttribs).explode(); - new ExplosionNT(world, null, posX, posY, posZ + 7, 10F).addAllAttrib(ExplosionNT.nukeAttribs).explode(); - new ExplosionNT(world, null, posX, posY, posZ - 7, 10F).addAllAttrib(ExplosionNT.nukeAttribs).explode();*/ ExplosionNukeGeneric.dealDamage(world, posX, posY, posZ, 55); break; } diff --git a/src/main/java/com/hbm/extprop/HbmLivingProps.java b/src/main/java/com/hbm/extprop/HbmLivingProps.java index 7b0d0b710..b2dde9059 100644 --- a/src/main/java/com/hbm/extprop/HbmLivingProps.java +++ b/src/main/java/com/hbm/extprop/HbmLivingProps.java @@ -1,5 +1,7 @@ package com.hbm.extprop; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; import com.hbm.lib.ModDamageSource; @@ -32,6 +34,8 @@ public class HbmLivingProps implements IExtendedEntityProperties { private int asbestos; private float radEnv; private float radBuf; + private int bombTimer; + private List contamination = new ArrayList(); public HbmLivingProps(EntityLivingBase entity) { this.entity = entity; @@ -89,6 +93,15 @@ public class HbmLivingProps implements IExtendedEntityProperties { getData(entity).radBuf = rad; } + /// CONTAMINATION /// + public static List getCont(EntityLivingBase entity) { + return getData(entity).contamination; + } + + public static void addCont(EntityLivingBase entity, ContaminationEffect cont) { + getData(entity).contamination.add(cont); + } + /// DIGAMA /// public static float getDigamma(EntityLivingBase entity) { return getData(entity).digamma; @@ -160,7 +173,7 @@ public class HbmLivingProps implements IExtendedEntityProperties { public static void setAsbestos(EntityLivingBase entity, int asbestos) { getData(entity).asbestos = asbestos; - if(asbestos >= 30 * 60 * 20) { + if(asbestos >= 60 * 60 * 20) { getData(entity).asbestos = 0; entity.attackEntityFrom(ModDamageSource.asbestos, 1000); } @@ -169,6 +182,15 @@ public class HbmLivingProps implements IExtendedEntityProperties { public static void incrementAsbestos(EntityLivingBase entity, int asbestos) { setAsbestos(entity, getAsbestos(entity) + asbestos); } + + /// TIME BOMB /// + public static int getTimer(EntityLivingBase entity) { + return getData(entity).bombTimer; + } + + public static void setTimer(EntityLivingBase entity, int bombTimer) { + getData(entity).bombTimer = bombTimer; + } @Override public void init(Entity entity, World world) { } @@ -181,6 +203,13 @@ public class HbmLivingProps implements IExtendedEntityProperties { props.setFloat("hfr_radiation", radiation); props.setFloat("hfr_digamma", digamma); props.setInteger("hfr_asbestos", asbestos); + props.setInteger("hfr_bomb", bombTimer); + + props.setInteger("hfr_cont_count", this.contamination.size()); + + for(int i = 0; i < this.contamination.size(); i++) { + this.contamination.get(i).save(props, i); + } nbt.setTag("HbmLivingProps", props); } @@ -194,6 +223,13 @@ public class HbmLivingProps implements IExtendedEntityProperties { radiation = props.getFloat("hfr_radiation"); digamma = props.getFloat("hfr_digamma"); asbestos = props.getInteger("hfr_asbestos"); + bombTimer = props.getInteger("hfr_bomb"); + + int cont = props.getInteger("hfr_cont_count"); + + for(int i = 0; i < cont; i++) { + this.contamination.add(ContaminationEffect.load(props, i)); + } } } @@ -213,5 +249,26 @@ public class HbmLivingProps implements IExtendedEntityProperties { public float getRad() { return maxRad * ((float)time / (float)maxTime); } + + public void save(NBTTagCompound nbt, int index) { + NBTTagCompound me = new NBTTagCompound(); + me.setFloat("maxRad", this.maxRad); + me.setInteger("maxTime", this.maxTime); + me.setInteger("time", this.time); + me.setBoolean("ignoreArmor", ignoreArmor); + nbt.setTag("cont_" + index, me); + } + + public static ContaminationEffect load(NBTTagCompound nbt, int index) { + NBTTagCompound me = (NBTTagCompound) nbt.getTag("cont_" + index); + float maxRad = me.getFloat("maxRad"); + int maxTime = nbt.getInteger("maxTime"); + int time = nbt.getInteger("time"); + boolean ignoreArmor = nbt.getBoolean("ignoreArmor"); + + ContaminationEffect effect = new ContaminationEffect(maxRad, maxTime, ignoreArmor); + effect.time = time; + return effect; + } } } diff --git a/src/main/java/com/hbm/handler/BobmazonOfferFactory.java b/src/main/java/com/hbm/handler/BobmazonOfferFactory.java index 57ebce044..8ae71460c 100644 --- a/src/main/java/com/hbm/handler/BobmazonOfferFactory.java +++ b/src/main/java/com/hbm/handler/BobmazonOfferFactory.java @@ -164,6 +164,8 @@ public class BobmazonOfferFactory { special.add(new Offer(new ItemStack(ModItems.ingot_titanium, 64), Requirement.STEEL, 1)); special.add(new Offer(new ItemStack(ModItems.ingot_tungsten, 64), Requirement.STEEL, 1)); special.add(new Offer(new ItemStack(ModItems.ingot_cobalt, 64), Requirement.STEEL, 1)); + special.add(new Offer(new ItemStack(ModItems.ingot_tantalium, 64), Requirement.STEEL, 5)); + special.add(new Offer(new ItemStack(ModItems.ingot_bismuth, 16), Requirement.STEEL, 5)); special.add(new Offer(new ItemStack(ModItems.ingot_schrabidium, 16), Requirement.STEEL, 5)); special.add(new Offer(new ItemStack(ModItems.ingot_euphemium, 8), Requirement.STEEL, 16)); special.add(new Offer(new ItemStack(ModItems.ingot_dineutronium, 1), Requirement.STEEL, 16)); @@ -192,6 +194,9 @@ public class BobmazonOfferFactory { special.add(new Offer(new ItemStack(ModBlocks.crate_can, 1), Requirement.STEEL, 1)); special.add(new Offer(new ItemStack(ModBlocks.crate_ammo, 1), Requirement.STEEL, 2)); special.add(new Offer(new ItemStack(ModItems.crucible, 1, 3), Requirement.STEEL, 10)); + special.add(new Offer(new ItemStack(ModItems.spawn_chopper, 1), Requirement.STEEL, 10)); + special.add(new Offer(new ItemStack(ModItems.spawn_worm, 1), Requirement.STEEL, 10)); + special.add(new Offer(new ItemStack(ModItems.spawn_ufo, 1), Requirement.STEEL, 10)); special.add(new Offer(new ItemStack(ModItems.sat_laser, 1), Requirement.HIDDEN, 8)); special.add(new Offer(new ItemStack(ModItems.sat_gerald, 1), Requirement.HIDDEN, 32)); special.add(new Offer(new ItemStack(ModItems.billet_yharonite, 4), Requirement.HIDDEN, 16)); diff --git a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java index d06ba78ac..e139cffae 100644 --- a/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java +++ b/src/main/java/com/hbm/handler/BulletConfigSyncingUtil.java @@ -165,6 +165,7 @@ public class BulletConfigSyncingUtil { public static int B75_HE = i++; public static int NEEDLE_GPS = i++; + public static int NEEDLE_NUKE = i++; public static int DART_NORMAL = i++; public static int G20_NORMAL_FIRE = i++; @@ -398,6 +399,7 @@ public class BulletConfigSyncingUtil { configSet.put(B75_HE, Gun75BoltFactory.get75BoltHEConfig()); configSet.put(NEEDLE_GPS, GunDartFactory.getGPSConfig()); + configSet.put(NEEDLE_NUKE, GunDartFactory.getNukeConfig()); configSet.put(DART_NORMAL, GunDartFactory.getNERFConfig()); configSet.put(G20_NORMAL_FIRE, Gun20GaugeFactory.get20GaugeConfig().setToFire(3)); diff --git a/src/main/java/com/hbm/handler/EntityEffectHandler.java b/src/main/java/com/hbm/handler/EntityEffectHandler.java index ab98d2e67..721d651b9 100644 --- a/src/main/java/com/hbm/handler/EntityEffectHandler.java +++ b/src/main/java/com/hbm/handler/EntityEffectHandler.java @@ -3,6 +3,7 @@ package com.hbm.handler; import java.util.Random; import com.hbm.config.RadiationConfig; +import com.hbm.explosion.ExplosionNukeSmall; import com.hbm.extprop.HbmLivingProps; import com.hbm.main.MainRegistry; import com.hbm.packet.AuxParticlePacketNT; @@ -38,12 +39,22 @@ public class EntityEffectHandler { HbmLivingProps.setRadEnv(entity, 0); } + if(entity instanceof EntityPlayerMP) { - NBTTagCompound data = new NBTTagCompound(); HbmLivingProps props = HbmLivingProps.getData(entity); + NBTTagCompound data = new NBTTagCompound(); props.saveNBTData(data); PacketDispatcher.wrapper.sendTo(new ExtPropPacket(data), (EntityPlayerMP) entity); } + + int timer = HbmLivingProps.getTimer(entity); + if(timer > 0) { + HbmLivingProps.setTimer(entity, timer - 1); + + if(timer == 1) { + ExplosionNukeSmall.explode(entity.worldObj, entity.posX, entity.posY, entity.posZ, ExplosionNukeSmall.medium); + } + } } handleRadiation(entity); diff --git a/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java b/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java index a54261550..b4f4b9cd8 100644 --- a/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java +++ b/src/main/java/com/hbm/handler/guncfg/GunDartFactory.java @@ -3,15 +3,18 @@ package com.hbm.handler.guncfg; import java.util.ArrayList; import com.hbm.entity.projectile.EntityBulletBase; +import com.hbm.extprop.HbmLivingProps; import com.hbm.handler.BulletConfigSyncingUtil; import com.hbm.handler.BulletConfiguration; import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IBulletHurtBehavior; import com.hbm.items.ModItems; import com.hbm.items.weapon.ItemGunDart; +import com.hbm.main.MainRegistry; import com.hbm.render.util.RenderScreenOverlay.Crosshair; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.potion.Potion; import net.minecraft.potion.PotionEffect; @@ -44,6 +47,7 @@ public class GunDartFactory { config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.NEEDLE_GPS); + config.config.add(BulletConfigSyncingUtil.NEEDLE_NUKE); return config; } @@ -74,6 +78,7 @@ public class GunDartFactory { config.config = new ArrayList(); config.config.add(BulletConfigSyncingUtil.DART_NORMAL); + config.config.add(BulletConfigSyncingUtil.NEEDLE_NUKE); return config; } @@ -124,6 +129,43 @@ public class GunDartFactory { return bullet; } + public static BulletConfiguration getNukeConfig() { + + BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); + + bullet.ammo = ModItems.ammo_dart_nuclear; + bullet.velocity = 5.0F; + bullet.spread = 0; + bullet.dmgMin = 1; + bullet.dmgMax = 2; + bullet.doesRicochet = true; + bullet.doesPenetrate = false; + bullet.style = bullet.STYLE_FLECHETTE; + bullet.leadChance = 0; + + bullet.bHurt = new IBulletHurtBehavior() { + + @Override + public void behaveEntityHurt(EntityBulletBase bullet, Entity hit) { + + if(bullet.worldObj.isRemote) + return; + + if(hit instanceof EntityLivingBase) { + + EntityLivingBase e = (EntityLivingBase) hit; + + if(HbmLivingProps.getRadiation(e) < 250) + HbmLivingProps.setRadiation(e, 250); + if(HbmLivingProps.getTimer(e) <= 0) + HbmLivingProps.setTimer(e, MainRegistry.polaroidID * 60 * 20); + } + } + }; + + return bullet; + } + public static BulletConfiguration getNERFConfig() { BulletConfiguration bullet = BulletConfigFactory.standardBulletConfig(); diff --git a/src/main/java/com/hbm/inventory/AnvilRecipes.java b/src/main/java/com/hbm/inventory/AnvilRecipes.java index 583344aec..f520aa6fa 100644 --- a/src/main/java/com/hbm/inventory/AnvilRecipes.java +++ b/src/main/java/com/hbm/inventory/AnvilRecipes.java @@ -296,18 +296,16 @@ public class AnvilRecipes { constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModItems.circuit_raw), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.plate_steel, 2)), - new AnvilOutput(new ItemStack(ModItems.wire_aluminium, 4)), + new AnvilOutput(new ItemStack(ModItems.plate_steel, 1)), + new AnvilOutput(new ItemStack(ModItems.wire_aluminium, 1)), new AnvilOutput(new ItemStack(Items.redstone, 1)) } ).setTier(1)); constructionRecipes.add(new AnvilConstructionRecipe( new ComparableStack(ModItems.circuit_aluminium), new AnvilOutput[] { - new AnvilOutput(new ItemStack(ModItems.plate_steel, 2)), - new AnvilOutput(new ItemStack(ModItems.wire_aluminium, 2)), + new AnvilOutput(new ItemStack(ModItems.plate_steel, 1)), new AnvilOutput(new ItemStack(ModItems.wire_aluminium, 1), 0.5F), - new AnvilOutput(new ItemStack(ModItems.wire_aluminium, 1), 0.25F), new AnvilOutput(new ItemStack(Items.redstone, 1), 0.25F) } ).setTier(1)); diff --git a/src/main/java/com/hbm/inventory/MagicRecipes.java b/src/main/java/com/hbm/inventory/MagicRecipes.java index 87a80939d..4ca74cb5e 100644 --- a/src/main/java/com/hbm/inventory/MagicRecipes.java +++ b/src/main/java/com/hbm/inventory/MagicRecipes.java @@ -89,6 +89,11 @@ public class MagicRecipes { new OreDictStack("plateSteel"), new ComparableStack(ModItems.ingot_polymer), new OreDictStack("plateGold"))); + + recipes.add(new MagicRecipe(new ItemStack(ModItems.ammo_dart_nuclear, 4), + new ComparableStack(ModItems.plate_polymer), + new ComparableStack(ModItems.nugget_pu239), + new ComparableStack(ModItems.circuit_aluminium))); } public static List getRecipes() { diff --git a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java index 352d32f5b..3a8d1b72d 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java +++ b/src/main/java/com/hbm/inventory/gui/GUIRBMKConsole.java @@ -91,8 +91,7 @@ public class GUIRBMKConsole extends GuiScreen { this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 61, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select all control rods" } ); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 72, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Deselect all" } ); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 8, 76, 60, mouseX, mouseY, new String[]{ "ignore all this for now" } ); - this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 96, 76, 38, mouseX, mouseY, new String[]{ "and this too" } ); - + this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 6, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select red group" } ); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 17, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select yellow group" } ); this.drawCustomInfoStat(mouseX, mouseY, guiLeft + 28, guiTop + 70, 10, 10, mouseX, mouseY, new String[]{ "Select green group" } ); diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 26070329d..1bfea42ef 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -799,6 +799,7 @@ public class ModItems { public static Item radaway_strong; public static Item radaway_flush; public static Item radx; + public static Item siox; public static Item xanax; public static Item fmn; public static Item five_htp; @@ -1340,6 +1341,7 @@ public class ModItems { public static Item sat_chip; public static Item sat_interface; public static Item sat_coord; + public static Item sat_designator; public static Item ammo_12gauge; public static Item ammo_12gauge_incendiary; @@ -1484,6 +1486,7 @@ public class ModItems { public static Item ammo_fireext_sand; public static Item ammo_cell; public static Item ammo_dart; + public static Item ammo_dart_nuclear; public static Item ammo_dart_nerf; public static Item gun_rpg; @@ -3103,6 +3106,7 @@ public class ModItems { radaway_strong = new ItemSyringe().setUnlocalizedName("radaway_strong").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_strong"); radaway_flush = new ItemSyringe().setUnlocalizedName("radaway_flush").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radaway_flush"); radx = new ItemPill(0).setUnlocalizedName("radx").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":radx"); + siox = new ItemPill(0).setUnlocalizedName("siox").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":siox"); xanax = new ItemPill(0).setUnlocalizedName("xanax").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":xanax_2"); fmn = new ItemPill(0).setUnlocalizedName("fmn").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":tablet"); five_htp = new ItemPill(0).setUnlocalizedName("five_htp").setCreativeTab(MainRegistry.consumableTab).setTextureName(RefStrings.MODID + ":5htp"); @@ -3697,6 +3701,7 @@ public class ModItems { sat_chip = new ItemSatChip().setUnlocalizedName("sat_chip").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_chip"); sat_interface = new ItemSatInterface().setUnlocalizedName("sat_interface").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_interface"); sat_coord = new ItemSatInterface().setUnlocalizedName("sat_coord").setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_coord"); + sat_designator = new ItemSatDesignator().setUnlocalizedName("sat_designator").setFull3D().setMaxStackSize(1).setCreativeTab(MainRegistry.missileTab).setTextureName(RefStrings.MODID + ":sat_designator"); mp_thruster_10_kerosene = new ItemMissile().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(10F) .setUnlocalizedName("mp_thruster_10_kerosene"); mp_thruster_10_kerosene_tec = new ItemMissile().makeThruster(FuelType.KEROSENE, 1F, 1.5F, PartSize.SIZE_10).setHealth(15F).setRarity(Rarity.COMMON).setUnlocalizedName("mp_thruster_10_kerosene_tec"); @@ -3990,6 +3995,7 @@ public class ModItems { ammo_fireext_sand = new ItemAmmo().setUnlocalizedName("ammo_fireext_sand").setCreativeTab(MainRegistry.weaponTab).setMaxStackSize(1).setTextureName(RefStrings.MODID + ":ammo_fireext_sand"); ammo_cell = new ItemAmmo().setUnlocalizedName("ammo_cell").setCreativeTab(MainRegistry.weaponTab).setMaxStackSize(16).setTextureName(RefStrings.MODID + ":ammo_cell"); ammo_dart = new ItemAmmo().setUnlocalizedName("ammo_dart").setCreativeTab(MainRegistry.weaponTab).setMaxStackSize(16).setTextureName(RefStrings.MODID + ":ammo_dart"); + ammo_dart_nuclear = new ItemAmmo().setUnlocalizedName("ammo_dart_nuclear").setCreativeTab(MainRegistry.weaponTab).setMaxStackSize(16).setTextureName(RefStrings.MODID + ":ammo_dart_nuclear"); ammo_dart_nerf = new ItemAmmo().setUnlocalizedName("ammo_dart_nerf").setCreativeTab(MainRegistry.weaponTab).setMaxStackSize(16).setTextureName(RefStrings.MODID + ":ammo_dart_nerf"); gun_rpg = new ItemGunBase(GunRocketFactory.getGustavConfig()).setUnlocalizedName("gun_rpg").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_rpg"); @@ -6620,6 +6626,7 @@ public class ModItems { GameRegistry.registerItem(sat_chip, sat_chip.getUnlocalizedName()); GameRegistry.registerItem(sat_interface, sat_interface.getUnlocalizedName()); GameRegistry.registerItem(sat_coord, sat_coord.getUnlocalizedName()); + GameRegistry.registerItem(sat_designator, sat_designator.getUnlocalizedName()); //Guns GameRegistry.registerItem(gun_revolver_iron, gun_revolver_iron.getUnlocalizedName()); @@ -6837,6 +6844,7 @@ public class ModItems { GameRegistry.registerItem(ammo_fireext_sand, ammo_fireext_sand.getUnlocalizedName()); GameRegistry.registerItem(ammo_cell, ammo_cell.getUnlocalizedName()); GameRegistry.registerItem(ammo_dart, ammo_dart.getUnlocalizedName()); + GameRegistry.registerItem(ammo_dart_nuclear, ammo_dart_nuclear.getUnlocalizedName()); GameRegistry.registerItem(ammo_dart_nerf, ammo_dart_nerf.getUnlocalizedName()); GameRegistry.registerItem(ammo_rocket, ammo_rocket.getUnlocalizedName()); GameRegistry.registerItem(ammo_rocket_he, ammo_rocket_he.getUnlocalizedName()); @@ -7105,6 +7113,7 @@ public class ModItems { GameRegistry.registerItem(radaway_strong, radaway_strong.getUnlocalizedName()); GameRegistry.registerItem(radaway_flush, radaway_flush.getUnlocalizedName()); GameRegistry.registerItem(radx, radx.getUnlocalizedName()); + GameRegistry.registerItem(siox, siox.getUnlocalizedName()); GameRegistry.registerItem(pill_iodine, pill_iodine.getUnlocalizedName()); GameRegistry.registerItem(xanax, xanax.getUnlocalizedName()); GameRegistry.registerItem(fmn, fmn.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/food/ItemPill.java b/src/main/java/com/hbm/items/food/ItemPill.java index b30ff82b1..dc241935d 100644 --- a/src/main/java/com/hbm/items/food/ItemPill.java +++ b/src/main/java/com/hbm/items/food/ItemPill.java @@ -51,6 +51,10 @@ public class ItemPill extends ItemFood { if(this == ModItems.radx) { player.addPotionEffect(new PotionEffect(HbmPotion.radx.id, 3 * 60 * 20, 0)); } + + if(this == ModItems.siox) { + HbmLivingProps.setAsbestos(player, 0); + } if(this == ModItems.xanax) { float digamma = HbmLivingProps.getDigamma(player); @@ -81,6 +85,9 @@ public class ItemPill extends ItemFood { if(this == ModItems.radx) { list.add("Increases radiation resistance by 0.2 (37%) for 3 minutes"); } + if(this == ModItems.siox) { + list.add("Reverses mesothelioma with the power of Asbestos!"); + } if(this == ModItems.xanax) { list.add("Removes 500mDRX"); } diff --git a/src/main/java/com/hbm/items/tool/ItemSatDesignator.java b/src/main/java/com/hbm/items/tool/ItemSatDesignator.java new file mode 100644 index 000000000..2c0e5612d --- /dev/null +++ b/src/main/java/com/hbm/items/tool/ItemSatDesignator.java @@ -0,0 +1,46 @@ +package com.hbm.items.tool; + +import com.hbm.blocks.bomb.LaunchPad; +import com.hbm.items.machine.ItemSatChip; +import com.hbm.lib.Library; +import com.hbm.saveddata.SatelliteSavedData; +import com.hbm.saveddata.satellites.Satellite; +import com.hbm.saveddata.satellites.Satellite.Interfaces; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.util.MovingObjectPosition; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + +public class ItemSatDesignator extends ItemSatChip { + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + + if(!world.isRemote) { + + Satellite sat = SatelliteSavedData.getData(world).getSatFromFreq(this.getFreq(stack)); + + if(sat != null) { + MovingObjectPosition pos = Library.rayTrace(player, 300, 1); + + ForgeDirection dir = ForgeDirection.getOrientation(pos.sideHit); + int x = pos.blockX + dir.offsetX; + int y = pos.blockY + dir.offsetY; + int z = pos.blockZ + dir.offsetZ; + + if(sat.satIface == Interfaces.SAT_COORD) { + sat.onCoordAction(world, player, x, y, z); + } else if(sat.satIface == Interfaces.SAT_PANEL) { + sat.onClick(world, x, z); + } + } + } + + return stack; + } + +} diff --git a/src/main/java/com/hbm/items/tool/ItemSatInterface.java b/src/main/java/com/hbm/items/tool/ItemSatInterface.java index 29c79b003..43b79733f 100644 --- a/src/main/java/com/hbm/items/tool/ItemSatInterface.java +++ b/src/main/java/com/hbm/items/tool/ItemSatInterface.java @@ -46,7 +46,7 @@ public class ItemSatInterface extends ItemSatChip { Satellite sat = SatelliteSavedData.getData(world).getSatFromFreq(this.getFreq(stack)); if(sat != null && entity.ticksExisted % 2 == 0) { - PacketDispatcher.wrapper.sendTo(new SatPanelPacket(sat), (EntityPlayerMP) entity); + PacketDispatcher.wrapper.sendTo(new SatPanelPacket(sat), (EntityPlayerMP) entity); //making this one sat that is static might not have been a good idea } } diff --git a/src/main/java/com/hbm/main/ModEventHandler.java b/src/main/java/com/hbm/main/ModEventHandler.java index 641f6d0b9..44af008c9 100644 --- a/src/main/java/com/hbm/main/ModEventHandler.java +++ b/src/main/java/com/hbm/main/ModEventHandler.java @@ -240,7 +240,7 @@ public class ModEventHandler { event.entity.worldObj.spawnEntityInWorld(foeq); } - if(event.entity.getUniqueID().toString().equals(Library.HbMinecraft)) { + if(event.entity.getUniqueID().toString().equals(Library.HbMinecraft) || event.entity.getCommandSenderName().equals("HbMinecraft")) { event.entity.dropItem(ModItems.book_of_, 1); } @@ -751,13 +751,11 @@ public class ModEventHandler { ArmorUtil.resetFlightTime(player); - if(!player.isSneaking()) { - if(player.fallDistance > 0) - player.fallDistance = 0; - - if(player.motionY < -0.4D) - player.motionY = -0.4D; - } + if(player.fallDistance > 0) + player.fallDistance = 0; + + if(player.motionY < -0.4D) + player.motionY = -0.4D; HbmPlayerProps props = HbmPlayerProps.getData(player); diff --git a/src/main/java/com/hbm/render/entity/effect/RenderDeathBlast.java b/src/main/java/com/hbm/render/entity/effect/RenderDeathBlast.java index faabf3266..80e017dad 100644 --- a/src/main/java/com/hbm/render/entity/effect/RenderDeathBlast.java +++ b/src/main/java/com/hbm/render/entity/effect/RenderDeathBlast.java @@ -83,8 +83,9 @@ public class RenderDeathBlast extends Render { GL11.glDisable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glAlphaFunc(GL11.GL_GEQUAL, 0); - double scale = 15 - 15D * (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge)); + double scale = 10 - 10D * (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge)); double alpha = (((double)entity.ticksExisted) / ((double)EntityDeathBlast.maxAge)); if(scale < 0) @@ -97,15 +98,20 @@ public class RenderDeathBlast extends Render { OpenGlHelper.glBlendFunc(770, 771, 1, 0); sphere.renderAll(); - GL11.glColor4d(1.0, 0, 0, alpha); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); - GL11.glScaled(1.5, 1.5, 1.5); - sphere.renderAll(); + GL11.glScaled(1.25, 1.25, 1.25); + GL11.glColor4d(1.0, 0, 0, alpha * 0.125); + + for(int i = 0; i < 8; i++) { + sphere.renderAll(); + GL11.glScaled(1.05, 1.05, 1.05); + } GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glAlphaFunc(GL11.GL_GEQUAL, 0.1F); GL11.glColor4d(1.0, 1.0, 1.0, 1.0); GL11.glPopMatrix(); diff --git a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java index c17b80123..228fcafeb 100644 --- a/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java +++ b/src/main/java/com/hbm/tileentity/machine/rbmk/TileEntityRBMKConsole.java @@ -26,6 +26,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon private int targetY; private int targetZ; + public int[] fluxBuffer = new int[20]; + //made this one-dimensional because it's a lot easier to serialize public RBMKColumn[] columns = new RBMKColumn[15 * 15]; @@ -52,6 +54,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon private void rescan() { + double flux = 0; + for(int i = -7; i <= 7; i++) { for(int j = -7; j <= 7; j++) { @@ -67,11 +71,22 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon columns[index].data.setDouble("maxHeat", rbmk.maxHeat()); if(rbmk.isModerated()) columns[index].data.setBoolean("moderated", true); //false is the default anyway and not setting it when we don't need to reduces cruft + if(te instanceof TileEntityRBMKRod) { + TileEntityRBMKRod fuel = (TileEntityRBMKRod) te; + flux += fuel.fluxFast + fuel.fluxSlow; + } + } else { columns[index] = null; } } } + + for(int i = 0; i < this.fluxBuffer.length - 1; i++) { + this.fluxBuffer[i] = this.fluxBuffer[i + 1]; + } + + this.fluxBuffer[19] = (int) flux; } private void prepareNetworkPack() { @@ -86,6 +101,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon } } + data.setIntArray("flux", this.fluxBuffer); + this.networkPack(data, 50); } @@ -100,6 +117,8 @@ public class TileEntityRBMKConsole extends TileEntityMachineBase implements ICon this.columns[i] = new RBMKColumn(ColumnType.values()[data.getShort("type_" + i)], (NBTTagCompound)data.getTag("column_" + i)); } } + + this.fluxBuffer = data.getIntArray("flux"); } @Override diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 9b447952b..e909a8faa 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -555,6 +555,7 @@ item.ammo_cell.name=Energiezelle item.ammo_container.name=Munitionsbehälter item.ammo_dart.name=Plastikdart (Withernd) item.ammo_dart_nerf.name=NERF-Dart +item.ammo_dart_nuclear.name=Plastikdart (Zeitbombe) item.ammo_dgk.name=Goalkeeper-Zwilling CIWS 200er Gürtel item.ammo_fireext.name=Feuerlöscher-Wassertank item.ammo_fireext_foam.name=Feuerlöscher-Schaumtank @@ -2221,6 +2222,7 @@ item.rune_thurisaz.name=Additive Catalyst Matrix item.sat_base.name=Satellitenkörper item.sat_chip.name=Satelliten-ID-Chip item.sat_coord.name=Satelliten-Zielmarkierer +item.sat_designator.name=atelliten-Laserzielmarkierer item.sat_foeq.name=PEAF - Mk.I FOEQ Dunasonde mit experimenter nuklearer Schubdüse item.sat_gerald.name=Gerald der Konstruktionsandroid item.sat_head_laser.name=Todesstrahl @@ -2269,6 +2271,7 @@ item.singularity.name=Singularität item.singularity_counter_resonant.name=Eingefasste nicht-resonante Singularität item.singularity_spark.name=Spark'sche Singularität item.singularity_super_heated.name=Supererhitzte resonante Singularität +item.siox.name=SiOX-Krebsmedikament item.siren_track.name=Sirenentrack item.smashing_hammer.name=Zerschmetterungshammer item.solid_fuel.name=Festbrennstoff diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 7dad8f73a..a0227286c 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -623,6 +623,7 @@ item.ammo_cell.name=Energy Cell item.ammo_container.name=Ammo Container item.ammo_dart.name=Plastic Dart (Withering) item.ammo_dart_nerf.name=NERF Dart +item.ammo_dart_nuclear.name=Plastic Dart (Timed Explosive) item.ammo_dgk.name=Goalkeeper Twin CIWS 200 Round Belt item.ammo_fireext.name=Fire Extinguisher Water Tank item.ammo_fireext_foam.name=Fire Extinguisher Foam Tank @@ -2287,6 +2288,7 @@ item.rune_thurisaz.name=Additive Catalyst Matrix item.sat_base.name=Satellite Base item.sat_chip.name=Satellite ID-Chip item.sat_coord.name=Satellite Designator +item.sat_designator.name=Satellite Laser Designator item.sat_foeq.name=PEAF - Mk.I FOEQ Duna Probe with experimental Nuclear Propulsion item.sat_gerald.name=Gerald The Construction Android item.sat_head_laser.name=Death Ray @@ -2335,6 +2337,7 @@ item.singularity.name=Singularity item.singularity_counter_resonant.name=Contained Counter-Resonant Singularity item.singularity_spark.name=Spark Singularity item.singularity_super_heated.name=Superheated Resonating Singularity +item.siox.name=SiOX Cancer Medication item.siren_track.name=Siren Track item.smashing_hammer.name=Smashing Hammer item.solid_fuel.name=Solid Fuel diff --git a/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_console.png b/src/main/resources/assets/hbm/textures/gui/reactors/gui_rbmk_console.png index 9ce02d4539b775768c4534e20f7079bdcc5699a3..70c13876606d257137ba39919dec821894c09578 100644 GIT binary patch literal 5783 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 S(a_NyxPDDdAx}=<`+oqB-kB-@ literal 5798 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
  • |*|RG_4+UV!`Ckk#*J^8AXur`I)FU)mrv!kvfT|;Ckt1*xR!n8wbVQ#1!Za zhuUM)=fCU)&_NdQe+;oadXTaI&mei# zn#?60D?9tiCGEo^=F&Oi6KIK=v7E3Ojv-YQmDq??rg}SPO=me~;C}G>Qa^Nj;;|6g zxwE;Gq$x_H)?5&TlxO<``5MtLW@dUR1!ZOJHq=TdgrT8fWdO|tdn+o>!Nvi)Yo;-{Qc1Jiy#^@!h6yvs_|>b^o!hT;I|R3iY5fQInbVI z!XyOIz)ImeLmmx>UKpb9i&9#L{HZqDw3X=>xV(%&^_QI3$@MOT(Bf3?Zzql4t9?Iy z5Gu-8^4!E=nkX2kFKpf1d4h2sOX5_xU&}&dqc{Z$5og&p!k@EbGAF+rx&xD{lN>JX zaCJ@m3-xg*E};v~BY7()Cx>!zhQ6^KMsJzA37L0#zPer(f&H_lA{EuuCyFLSMMZ<> zDKOA+>QHAKEoj1_t z2*eF!T7QBAPTt<{Y}}!lkcEZC_lXG((rcsQl9DzKcmo%nbwYq*eo)<5XVQPl$SD3M kN&)alVwVqx*8GSvIa&DuLo9?|Gy`z_n2AA!o@4a?0N_WH;Q#;t diff --git a/src/main/resources/assets/hbm/textures/items/ammo_dart_nuclear.png b/src/main/resources/assets/hbm/textures/items/ammo_dart_nuclear.png new file mode 100644 index 0000000000000000000000000000000000000000..a57398711b18958752c81044bb4f0d0590c9b221 GIT binary patch literal 203 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf%gzA4}^lQ=v;qZf9uh*OPf5rI78PO xWvmkZTgb++itB+<%JRg2ciSfO@LkN$U=lu;$YTCqeJ0Q~44$rjF6*2UngEnBLt+2` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/sat_designator.png b/src/main/resources/assets/hbm/textures/items/sat_designator.png new file mode 100644 index 0000000000000000000000000000000000000000..ff44ff244b269f22f71d0a7399fecc39fba64fd8 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf*&$*%6!djxfZu z2|N{YY7=0+!29#R&+GrQm-0N3{*F# z=^_u0|9m^uTSX$_dm>MLnBU0Qr1^>IVkTqc=h;hJOdsGPkpVZX6w==t*rrK3z8YrPBN`=aP~aN)4>^`!0YvTeUpHN(2K9vZ|<}{ zp8mjnPZ57;=*Nw6ZH`a6&Tg)_ZN_lG#8>=Zw9$;`mEvk2H|ad`->fZ>9HH4Np*$rh z;(F+lx+1o7mKkduT{sjERO^2_B06hX;@Yoq!h*N9rFLpd*)(Pt^gUjB{rlbw1-8jd zHp=2lGA0Cwuo@dnC%;R7FsFH|*tMu55`oiHU+ofWPdz__#f61|L$PDe|CoiZcX>zL f`(4dwcU1iKZJ!PA5@c=xy~p6`>gTe~DWM4ff!b|; literal 0 HcmV?d00001