From 6cc0003312776a2568ce2116973112b292fdc800 Mon Sep 17 00:00:00 2001 From: HbmMods Date: Fri, 4 Jan 2019 17:43:40 +0100 Subject: [PATCH] gunbase framework, gun and bullet config classes --- assets/hbm/lang/de_DE.lang | 27 +++ assets/hbm/lang/en_US.lang | 27 +++ assets/hbm/textures/items/folly_bullet.png | Bin 0 -> 162 bytes assets/hbm/textures/items/folly_shell.png | Bin 0 -> 210 bytes assets/hbm/textures/items/gun_folly_ammo.png | Bin 0 -> 296 bytes assets/hbm/textures/models/TsarBomba.png | Bin 17150 -> 17287 bytes com/hbm/blocks/fluid/ToxicBlock.java | 12 +- .../entity/projectile/EntityBulletBase.java | 39 ++++ com/hbm/handler/BulletConfiguration.java | 15 ++ com/hbm/handler/GunConfiguration.java | 15 +- com/hbm/items/special/ItemBattery.java | 6 +- com/hbm/items/special/ItemCustomLore.java | 13 -- com/hbm/items/weapon/GunLacunae.java | 22 ++- com/hbm/items/weapon/GunRevolver.java | 4 +- com/hbm/items/weapon/ItemGunBase.java | 184 ++++++++++++++++++ com/hbm/lib/Library.java | 18 +- com/hbm/main/CraftingManager.java | 17 +- com/hbm/packet/AuxButtonPacket.java | 118 +++++------ com/hbm/render/item/ItemRenderOverkill.java | 6 +- com/hbm/render/item/ItemRenderUZI.java | 40 +++- 20 files changed, 454 insertions(+), 109 deletions(-) create mode 100644 assets/hbm/textures/items/folly_bullet.png create mode 100644 assets/hbm/textures/items/folly_shell.png create mode 100644 assets/hbm/textures/items/gun_folly_ammo.png create mode 100644 com/hbm/entity/projectile/EntityBulletBase.java diff --git a/assets/hbm/lang/de_DE.lang b/assets/hbm/lang/de_DE.lang index cca1edc95..96dba76af 100644 --- a/assets/hbm/lang/de_DE.lang +++ b/assets/hbm/lang/de_DE.lang @@ -489,6 +489,9 @@ tile.machine_rtg_cyan.name=Schrabidium-Zerfallsenergie-Generator (WIP) tile.machine_rtg_blue.name=Konvektionsgenerator tile.machine_rtg_purple.name=Paarvernichtungsgenerator +tile.machine_waste_drum.name=Abklingbecken-Trommel +container.wasteDrum=Abklingbecken-Trommel + tile.machine_spp_bottom.name=NPE-Potentialgenerator (Unterteil) tile.machine_spp_top.name=NPE-Potentialgenerator (Oberteil) @@ -598,6 +601,8 @@ item.plate_saturnite.name=Saturnitplatte item.solid_fuel.name=Festbrennstoff +item.nugget_th232.name=Th232-Nugget +item.nugget_u233.name=U233-Nugget item.nugget_u235.name=U235-Nugget item.nugget_u238.name=U238-Nugget item.nugget_pu238.name=Pu238-Nugget @@ -669,6 +674,7 @@ tile.block_sulfur.name=Schwefelblock tile.block_titanium.name=Titanblock tile.block_tungsten.name=Wolframblock tile.block_uranium.name=Uranblock +tile.block_thorium.name=Thoriumblock tile.block_trinitite.name=Trinititblock tile.block_beryllium.name=Berylliumblock tile.block_waste.name=Atommüllblock @@ -694,6 +700,7 @@ tile.ore_sulfur.name=Schwefelerz tile.ore_titanium.name=Titanerz tile.ore_tungsten.name=Wolframerz tile.ore_uranium.name=Uranerz +tile.ore_thorium.name=Thoriumerz tile.ore_schrabidium.name=Schrabidiumerz tile.ore_beryllium.name=Berylliumerz @@ -995,7 +1002,9 @@ item.fluid_barrel_full.name=Flüssigkeitsfass: item.fluid_barrel_infinite.name=Unendliches Fass item.rod_empty.name=Leerer Brennstab +item.rod_th232.name=Th232-Brennstab item.rod_uranium.name=Uranbrennstab +item.rod_u233.name=U233-Brennstab item.rod_u235.name=U235-Brennstab item.rod_u238.name=U238-Brennstab item.rod_plutonium.name=Plutoniumbrennstab @@ -1015,7 +1024,9 @@ item.rod_daffergon.name=Daffergonbrennstab item.rod_verticium.name=Verticiumbrennstab item.rod_dual_empty.name=Leerer Doppelbrennstab +item.rod_dual_th232.name=Th232-Doppelbrennstab item.rod_dual_uranium.name=Urandoppelbrennstab +item.rod_dual_u233.name=U233-Doppelbrennstab item.rod_dual_u235.name=U235-Doppelbrennstab item.rod_dual_u238.name=U238-Doppelbrennstab item.rod_dual_plutonium.name=Plutoniumdoppelbrennstab @@ -1028,7 +1039,9 @@ item.rod_dual_schrabidium.name=Sa326-Doppelbrennstab item.rod_dual_solinium.name=Sa327-Doppelbrennstab item.rod_quad_empty.name=Leerer Vierfachbrennstab +item.rod_quad_th232.name=Th232-Vierfachbrennstab item.rod_quad_uranium.name=Uranvierfachbrennstab +item.rod_quad_u233.name=U233-Vierfachbrennstab item.rod_quad_u235.name=U235-Vierfachbrennstab item.rod_quad_u238.name=U238-Vierfachbrennstab item.rod_quad_plutonium.name=Plutoniumvierfachbrennstab @@ -1043,6 +1056,9 @@ item.rod_quad_solinium.name=Sa327-Vierfachbrennstab item.rod_uranium_fuel_depleted.name=Erschöpfte Urankernbrennstoffzelle item.rod_dual_uranium_fuel_depleted.name=Erschöpfte Urandoppelkernbrennstoffzelle item.rod_quad_uranium_fuel_depleted.name=Erschöpfte Uranvierfachkernbrennstoffzelle +item.rod_thorium_fuel_depleted.name=Erschöpfte Thoriumkernbrennstoffzelle +item.rod_dual_thorium_fuel_depleted.name=Erschöpfte Thoriumdoppelkernbrennstoffzelle +item.rod_quad_thorium_fuel_depleted.name=Erschöpfte Thoriumvierfachkernbrennstoffzelle item.rod_plutonium_fuel_depleted.name=Erschöpfte Plutoniumkernbrennstoffzelle item.rod_dual_plutonium_fuel_depleted.name=Erschöpfte Plutoniumdoppelkernbrennstoffzelle item.rod_quad_plutonium_fuel_depleted.name=Erschöpfte Plutoniumvierfachkernbrennstoffzelle @@ -1107,6 +1123,7 @@ tile.waste_planks.name=Verkohlte Holzbretter item.trinitite.name=Trinitit item.nuclear_waste.name=Atommüll +item.nuclear_waste_tiny.name=Kleiner Haufen Atommüll item.waste_uranium.name=Erschöpfter Urankernbrennstoff item.waste_thorium.name=Erschöpfter Thoriumkernbrennstoff item.waste_plutonium.name=Erschöpfter Plutoniumkernbrennstoff @@ -1126,6 +1143,7 @@ item.ingot_mox_fuel.name=MOX-Kernbrennstoffbarren item.ingot_schrabidium_fuel.name=Schrabidiumkernbrennstoffbarren item.nugget_uranium_fuel.name=Urankernbrennstoffnugget +item.nugget_thorium_fuel.name=Thoriumkernbrennstoffnugget item.nugget_plutonium_fuel.name=Plutoniumkernbrennstoffnugget item.nugget_mox_fuel.name=MOX-Kernbrennstoffnugget item.nugget_schrabidium_fuel.name=Schrabidiumkernbrennstoffnugget @@ -1177,6 +1195,9 @@ item.grenade_if_null.name=IF - Null-Granate item.rod_uranium_fuel.name=Urankernbrennstoffzelle item.rod_dual_uranium_fuel.name=Doppelte Urankernbrennstoffzelle item.rod_quad_uranium_fuel.name=Vierfache Urankernbrennstoffzelle +item.rod_thorium_fuel.name=Thoriumkernbrennstoffzelle +item.rod_dual_thorium_fuel.name=Doppelte Thoriumkernbrennstoffzelle +item.rod_quad_thorium_fuel.name=Vierfache Thoriumkernbrennstoffzelle item.rod_plutonium_fuel.name=Plutoniumkernbrennstoffzelle item.rod_dual_plutonium_fuel.name=Doppelte Plutoniumkernbrennstoffzelle item.rod_quad_plutonium_fuel.name=Vierfache Plutoniumkernbrennstoffzelle @@ -1358,6 +1379,7 @@ item.clip_emp.name=Magnetsteifen mit Energiezellen item.clip_revolver_nightmare.name=Sack voll Kugeln item.clip_revolver_nightmare2.name=Munitionsgürtel mit Laserschrot item.clip_revolver_pip.name=Speedloader mit verdorbenen Patronen +item.clip_revolver_nopip.name=.44 Magnum Patronen item.clip_stinger.name=Dreierpack Stinger-Raketen item.clip_jack.name=12x70 Vierfache Schrotpatronenbox item.clip_spark.name=Große Elektromagnetische Katusche @@ -1679,6 +1701,11 @@ tile.vent_chlorine.name=Chlorgas-Auslass tile.vent_cloud.name=Wolken-Auslass tile.vent_pink_cloud.name=Pinker Wolken-Auslass +tile.absorber.name=Strahlungs-Absorber +tile.absorber_red.name=Verbesserter Strahlungs-Absorber +tile.absorber_green.name=Fortgeschrittener Strahlungs-Absorber +tile.absorber_pink.name=Elite Strahlungs-Absorber + item.schrabidium_hammer.name=Schrabidiumhammer item.shimmer_sledge.name=Shimmer Sledge item.shimmer_axe.name=Shimmer Axe diff --git a/assets/hbm/lang/en_US.lang b/assets/hbm/lang/en_US.lang index fff2093f3..3e98defc0 100644 --- a/assets/hbm/lang/en_US.lang +++ b/assets/hbm/lang/en_US.lang @@ -489,6 +489,9 @@ tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP) tile.machine_rtg_blue.name=Convection Generator tile.machine_rtg_purple.name=Antimatter Annihilation Generator +tile.machine_waste_drum.name=Spent Fuel Pool Drum +container.wasteDrum=Spent Fuel Pool Drum + tile.machine_spp_bottom.name=ZPE Potential Generator (Bottom) tile.machine_spp_top.name=ZPE Potential Generator (Top) @@ -598,6 +601,8 @@ item.plate_saturnite.name=Saturnite Plate item.solid_fuel.name=Solid Fuel +item.nugget_th232.name=Th232 Nugget +item.nugget_u233.name=U233 Nugget item.nugget_u235.name=U235 Nugget item.nugget_u238.name=U238 Nugget item.nugget_pu238.name=Pu238 Nugget @@ -669,6 +674,7 @@ tile.block_sulfur.name=Block of Sulfur tile.block_titanium.name=Block of Titanium tile.block_tungsten.name=Block of Tungsten tile.block_uranium.name=Block of Uranium +tile.block_thorium.name=Block of Thorium tile.block_trinitite.name=Block of Trinitite tile.block_beryllium.name=Block of Beryllium tile.block_waste.name=Block of Nuclear Waste @@ -694,6 +700,7 @@ tile.ore_sulfur.name=Sulfur Ore tile.ore_titanium.name=Titanium Ore tile.ore_tungsten.name=Tungsten Ore tile.ore_uranium.name=Uranium Ore +tile.ore_thorium.name=Thorium Ore tile.ore_schrabidium.name=Schrabidium Ore tile.ore_beryllium.name=Beryllium Ore @@ -995,7 +1002,9 @@ item.fluid_barrel_full.name=Fluid Barrel: item.fluid_barrel_infinite.name=Infinite Fluid Barrel item.rod_empty.name=Empty Rod +item.rod_th232.name=Th232 Rod item.rod_uranium.name=Uranium Rod +item.rod_u233.name=U233 Rod item.rod_u235.name=U235 Rod item.rod_u238.name=U238 Rod item.rod_plutonium.name=Plutonium Rod @@ -1015,7 +1024,9 @@ item.rod_daffergon.name=Daffergon Rod item.rod_verticium.name=Verticium Rod item.rod_dual_empty.name=Empty Dual Rod +item.rod_dual_th232.name=Th232 Dual Rod item.rod_dual_uranium.name=Uranium Dual Fuel Rod +item.rod_dual_u233.name=U233 Dual Rod item.rod_dual_u235.name=U235 Dual Rod item.rod_dual_u238.name=U238 Dual Rod item.rod_dual_plutonium.name=Plutonium Dual Rod @@ -1028,7 +1039,9 @@ item.rod_dual_schrabidium.name=Sa326 Dual Rod item.rod_dual_solinium.name=Sa327 Dual Rod item.rod_quad_empty.name=Empty Quad Rod +item.rod_quad_th232.name=Th232 Quad Rod item.rod_quad_uranium.name=Uranium Quad Rod +item.rod_quad_u233.name=U233 Quad Rod item.rod_quad_u235.name=U235 Quad Rod item.rod_quad_u238.name=U238 Quad Rod item.rod_quad_plutonium.name=Plutonium Quad Rod @@ -1043,6 +1056,9 @@ item.rod_quad_solinium.name=Sa327 Quad Rod item.rod_uranium_fuel_depleted.name=Depleted Uranium Fuel Rod item.rod_dual_uranium_fuel_depleted.name=Depleted Uranium Dual Fuel Rod item.rod_quad_uranium_fuel_depleted.name=Depleted Uranium Quad Fuel Rod +item.rod_thorium_fuel_depleted.name=Depleted Thorium Fuel Rod +item.rod_dual_thorium_fuel_depleted.name=Depleted Thorium Dual Fuel Rod +item.rod_quad_thorium_fuel_depleted.name=Depleted Thorium Quad Fuel Rod item.rod_plutonium_fuel_depleted.name=Depleted Plutonium Fuel Rod item.rod_dual_plutonium_fuel_depleted.name=Depleted Plutonium Dual Fuel Rod item.rod_quad_plutonium_fuel_depleted.name=Depleted Plutonium Quad Fuel Rod @@ -1107,6 +1123,7 @@ tile.waste_planks.name=Charred Wooden Planks item.trinitite.name=Trinitite item.nuclear_waste.name=Nuclear Waste +item.nuclear_waste_tiny.name=Tiny Pile of Nuclear Waste item.waste_uranium.name=Depleted Uranium Fuel item.waste_thorium.name=Depleted Thorium Fuel item.waste_plutonium.name=Depleted Plutonium Fuel @@ -1126,6 +1143,7 @@ item.ingot_mox_fuel.name=Ingot of MOX Fuel item.ingot_schrabidium_fuel.name=Ingot of Schrabidium Fuel item.nugget_uranium_fuel.name=Nugget of Uranium Fuel +item.nugget_thorium_fuel.name=Nugget of Thorium Fuel item.nugget_plutonium_fuel.name=Nugget of Plutonium Fuel item.nugget_mox_fuel.name=Nugget of MOX Fuel item.nugget_schrabidium_fuel.name=Nugget of Schrabidium Fuel @@ -1177,6 +1195,9 @@ item.grenade_if_null.name=IF - Null Grenade item.rod_uranium_fuel.name=Uranium Fuel Rod item.rod_dual_uranium_fuel.name=Uranium Dual Fuel Rod item.rod_quad_uranium_fuel.name=Uranium Quad Fuel Rod +item.rod_thorium_fuel.name=Thorium Fuel Rod +item.rod_dual_thorium_fuel.name=Thorium Dual Fuel Rod +item.rod_quad_thorium_fuel.name=Thorium Quad Fuel Rod item.rod_plutonium_fuel.name=Plutonium Fuel Rod item.rod_dual_plutonium_fuel.name=Plutonium Dual Fuel Rod item.rod_quad_plutonium_fuel.name=Plutonium Quad Fuel Rod @@ -1358,6 +1379,7 @@ item.clip_emp.name=Small Pack of Energy Cells item.clip_revolver_nightmare.name=Bag of Bullets item.clip_revolver_nightmare2.name=Belt with Laser Buckshot item.clip_revolver_pip.name=Speedloader with Tainted Bullets +item.clip_revolver_nopip.name=Box of .44 Rounds item.clip_stinger.name=Pack of Stinger Rockets item.clip_jack.name=Box of Quadruple 12x70 Buckshot Rounds item.clip_spark.name=Large Electromagnetic Cartridge @@ -1679,6 +1701,11 @@ tile.vent_chlorine.name=Chlorine Vent tile.vent_cloud.name=Cloud Vent tile.vent_pink_cloud.name=Pink Cloud Vent +tile.absorber.name=Radiation Absorber +tile.absorber_red.name=Enhanced Radiation Absorber +tile.absorber_green.name=Advanced Radiation Absorber +tile.absorber_pink.name=Elite Radiation Absorber + item.schrabidium_hammer.name=Schrabidium Hammer item.shimmer_sledge.name=Shimmer Sledge item.shimmer_axe.name=Shimmer Axe diff --git a/assets/hbm/textures/items/folly_bullet.png b/assets/hbm/textures/items/folly_bullet.png new file mode 100644 index 0000000000000000000000000000000000000000..10d877115cf4fa94cde81ec7e8bc325b1ee9b124 GIT binary patch literal 162 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf z>L}#Vq~fJnDplYve&FXXpRVV^d$=>c%Kv?sELz7EagEXUv)smS^*TBhK-=Sgny=~)6iwmVy$8&+StrJ^JtI73p2 zDYSLfp)=o3S+-yO{DtBEnKL_r`=gitYlvr;QR+3^Rv9if>!zu~v5Ff%%9{K`?#*9x z&8n7(;W!6FpP`p#B6HRI%g5t(cf8ph;lS^u*}6XdAuCf+LS(_ct;s+~F?hQAxvX)= literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/items/gun_folly_ammo.png b/assets/hbm/textures/items/gun_folly_ammo.png new file mode 100644 index 0000000000000000000000000000000000000000..47c65ad3d4b8fb5e342cdb63245e852132178ab0 GIT binary patch literal 296 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK^6z`PIEF;D zzMX!Mw?#q3CEZ+FVAV!W?*-!C8`w`TWc~Gk?NqC6ra|Q59UG45Ocv1p@xR#4M=2np zf3<$!;}_2>+lu+lS$?UlUwQ3wRaoji9L;5#jZv9T;8%Shas`}TxG~&TTyvOR-nQK z77if-nQN~80=+^~ChS`D)H+md73Ritw>FcE_e`}vj rui@*+hz6$#>t6G{7T?c$^eda!tLhk&`@HLbUS;rf^>bP0l+XkKxukVy literal 0 HcmV?d00001 diff --git a/assets/hbm/textures/models/TsarBomba.png b/assets/hbm/textures/models/TsarBomba.png index d1b8db01c8af4c989a7f6a0a46c5900bc44c947d..ff12919c1a439af288ee4b47b3c712ebea430fa2 100644 GIT binary patch literal 17287 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 literal 17150 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 ZU`NR7|JuH*>wu$Tdh(Rv1AR*3{{j97_u2pe diff --git a/com/hbm/blocks/fluid/ToxicBlock.java b/com/hbm/blocks/fluid/ToxicBlock.java index da4dc3c50..168df42cd 100644 --- a/com/hbm/blocks/fluid/ToxicBlock.java +++ b/com/hbm/blocks/fluid/ToxicBlock.java @@ -120,17 +120,17 @@ public class ToxicBlock extends BlockFluidClassic { super.onNeighborBlockChange(world, x, y, z, block); if(reactToBlocks(world, x + 1, y, z)) - world.setBlock(x, y, z, ModBlocks.sellafield_0); + world.setBlock(x, y, z, ModBlocks.sellafield_slaked); if(reactToBlocks(world, x - 1, y, z)) - world.setBlock(x, y, z, ModBlocks.sellafield_0); + world.setBlock(x, y, z, ModBlocks.sellafield_slaked); if(reactToBlocks(world, x, y + 1, z)) - world.setBlock(x, y, z, ModBlocks.sellafield_0); + world.setBlock(x, y, z, ModBlocks.sellafield_slaked); if(reactToBlocks(world, x, y - 1, z)) - world.setBlock(x, y, z, ModBlocks.sellafield_0); + world.setBlock(x, y, z, ModBlocks.sellafield_slaked); if(reactToBlocks(world, x, y, z + 1)) - world.setBlock(x, y, z, ModBlocks.sellafield_0); + world.setBlock(x, y, z, ModBlocks.sellafield_slaked); if(reactToBlocks(world, x, y, z - 1)) - world.setBlock(x, y, z, ModBlocks.sellafield_0); + world.setBlock(x, y, z, ModBlocks.sellafield_slaked); } public boolean reactToBlocks(World world, int x, int y, int z) { diff --git a/com/hbm/entity/projectile/EntityBulletBase.java b/com/hbm/entity/projectile/EntityBulletBase.java new file mode 100644 index 000000000..0b20a6151 --- /dev/null +++ b/com/hbm/entity/projectile/EntityBulletBase.java @@ -0,0 +1,39 @@ +package com.hbm.entity.projectile; + +import net.minecraft.entity.Entity; +import net.minecraft.entity.IProjectile; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; + +public class EntityBulletBase extends Entity implements IProjectile { + + public EntityBulletBase(World p_i1582_1_) { + super(p_i1582_1_); + } + + @Override + public void setThrowableHeading(double p_70186_1_, double p_70186_3_, double p_70186_5_, float p_70186_7_, + float p_70186_8_) { + // TODO Auto-generated method stub + + } + + @Override + protected void entityInit() { + // TODO Auto-generated method stub + + } + + @Override + protected void readEntityFromNBT(NBTTagCompound p_70037_1_) { + // TODO Auto-generated method stub + + } + + @Override + protected void writeEntityToNBT(NBTTagCompound p_70014_1_) { + // TODO Auto-generated method stub + + } + +} diff --git a/com/hbm/handler/BulletConfiguration.java b/com/hbm/handler/BulletConfiguration.java index 5754d8420..7637aaea2 100644 --- a/com/hbm/handler/BulletConfiguration.java +++ b/com/hbm/handler/BulletConfiguration.java @@ -4,6 +4,21 @@ import net.minecraft.item.Item; public class BulletConfiguration { + //what item this specific configuration consumes public Item ammo; + + //damage bounds + public float dmgMin; + public float dmgMax; + + //whether the projectile should be able to bounce off of blocks + public boolean doesRicochet; + //the maximum angle at which the projectile should bounce + public double ricochetAngle; + + //whether or not the bullet should penetrate mobs + public boolean doesPenetrate; + //whether or not the bullet should break glass + public boolean doesBreakGlass; } diff --git a/com/hbm/handler/GunConfiguration.java b/com/hbm/handler/GunConfiguration.java index 8c043d9dd..d3195c52f 100644 --- a/com/hbm/handler/GunConfiguration.java +++ b/com/hbm/handler/GunConfiguration.java @@ -6,22 +6,25 @@ public class GunConfiguration { //amount of ticks between each bullet public int rateOfFire; - public int rateOfFireAlt; //greatest amount of pellets created each shot public int bulletsMin; - public int bulletsMinAlt; //least amount of pellets created each shot public int bulletsMax; - public int bulletsMaxAlt; //0 = normal, 1 = release, 2 = both public int gunMode; //0 = manual, 1 = automatic public int firingMode; + //spread of bullets in gaussian range + public float spread; //whether or not there is a reload delay animation public boolean hasReloadAnim; //whether or not there is a firing delay with animation public boolean hasFiringAnim; + //whether there is a warmup duration for spinup + public boolean hasSpinup; + //whether there is a cooldown duration for spindown + public boolean hasSpindown; //how long the reload animation will play public int reloadDuration; @@ -32,8 +35,10 @@ public class GunConfiguration { public int ammoCap; //0 does not allow direct reload, 1 is full clip, 2 is single bullet public int reloadType; + //whether or not the infinity enchantment should work + public boolean allowsInfinity; - public List bConfig; - public List altConfig; + //bullet configs for main and alt fire + public List config; } diff --git a/com/hbm/items/special/ItemBattery.java b/com/hbm/items/special/ItemBattery.java index 72a6b0cb9..4d2f97cfd 100644 --- a/com/hbm/items/special/ItemBattery.java +++ b/com/hbm/items/special/ItemBattery.java @@ -74,7 +74,7 @@ public class ItemBattery extends Item { return EnumRarity.common; } - public void chargeBattery(ItemStack stack, int i) { + public void chargeBattery(ItemStack stack, long i) { if(stack.getItem() instanceof ItemBattery) { if(stack.hasTagCompound()) { stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") + i); @@ -85,7 +85,7 @@ public class ItemBattery extends Item { } } - public void setCharge(ItemStack stack, int i) { + public void setCharge(ItemStack stack, long i) { if(stack.getItem() instanceof ItemBattery) { if(stack.hasTagCompound()) { stack.stackTagCompound.setLong("charge", i); @@ -96,7 +96,7 @@ public class ItemBattery extends Item { } } - public void dischargeBattery(ItemStack stack, int i) { + public void dischargeBattery(ItemStack stack, long i) { if(stack.getItem() instanceof ItemBattery) { if(stack.hasTagCompound()) { stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i); diff --git a/com/hbm/items/special/ItemCustomLore.java b/com/hbm/items/special/ItemCustomLore.java index 450b44ecd..51cf9da9e 100644 --- a/com/hbm/items/special/ItemCustomLore.java +++ b/com/hbm/items/special/ItemCustomLore.java @@ -674,19 +674,6 @@ public class ItemCustomLore extends ItemRadioactive { if(this == ModItems.key_red) { if(MainRegistry.polaroidID == 11) { - list.add("ard lock is ~10%5Success ra"); - list.add("Antimatter +15"); - list.add("ced resource scanner.27Production x4 / Co"); - list.add("this == ModItems.watch || this == ModI"); - list.add("list.add(\"Woo, scary!\");"); - list.add(EnumChatFormatting.OBFUSCATED + "//list.add(\"Blue horse beats yellow horse, look it up!\");"); - list.add("ion -60 / Delay +1019All hail"); - list.add("bank angle bank angle bank angle"); - list.add("'M"); - list.add(""); - list.add("bank angle bank angle bank angle"); - list.add("bank angle bank angle bank angle"); - list.add(""); list.add(EnumChatFormatting.DARK_RED + "" + EnumChatFormatting.BOLD + "e"); } else { list.add("Explore the other side."); diff --git a/com/hbm/items/weapon/GunLacunae.java b/com/hbm/items/weapon/GunLacunae.java index 8e77d3ba4..8aca078a1 100644 --- a/com/hbm/items/weapon/GunLacunae.java +++ b/com/hbm/items/weapon/GunLacunae.java @@ -7,6 +7,7 @@ import com.google.common.collect.Multimap; import com.hbm.entity.projectile.EntityBullet; import com.hbm.interfaces.IHoldableWeapon; import com.hbm.items.ModItems; +import com.hbm.main.MainRegistry; import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.EnchantmentHelper; @@ -17,6 +18,7 @@ import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumChatFormatting; +import net.minecraft.util.StatCollector; import net.minecraft.world.World; import net.minecraftforge.event.entity.player.ArrowNockEvent; @@ -31,7 +33,7 @@ public class GunLacunae extends Item implements IHoldableWeapon { @Override public EnumAction getItemUseAction(ItemStack par1ItemStack) { - return EnumAction.bow; + return EnumAction.none; } @Override @@ -100,14 +102,28 @@ public class GunLacunae extends Item implements IHoldableWeapon { list.add("The perfect gift for the man who has everything."); if(this == ModItems.gun_avenger) list.add("Interloper! No quarter shall be shown hither, fiend!"); - if(this == ModItems.gun_lacunae) - list.add("Auntie Lacunae to the rescue!"); + + if(this == ModItems.gun_lacunae) { + list.add("Whoa, wait, what's that sound? Do you hear that?"); + list.add("I think that's silence! That's the sound people make"); + list.add("when everyone trying to kill me is dead!"); + list.add("And I have a minigun!"); + } list.add(""); list.add("Ammo: 5mm Round"); list.add("Damage: 5"); } + public String getItemStackDisplayName(ItemStack stack) + { + + if(this == ModItems.gun_lacunae && MainRegistry.polaroidID == 11) + return "CZ97 Lacunae"; + + return super.getItemStackDisplayName(stack); + } + @Override public Multimap getItemAttributeModifiers() { Multimap multimap = super.getItemAttributeModifiers(); diff --git a/com/hbm/items/weapon/GunRevolver.java b/com/hbm/items/weapon/GunRevolver.java index 295c7ae04..390ceb33b 100644 --- a/com/hbm/items/weapon/GunRevolver.java +++ b/com/hbm/items/weapon/GunRevolver.java @@ -278,7 +278,9 @@ public class GunRevolver extends Item { list.add("Damage: 25 - 35"); } if (this == ModItems.gun_revolver_blackjack) { - list.add("Hol on-"); + list.add("Contents under pressure."); + list.add("Extremely volatile."); + list.add("Handle with care!"); list.add(""); list.add("Ammo: .44 Magnum"); list.add("Damage: 35 - 45"); diff --git a/com/hbm/items/weapon/ItemGunBase.java b/com/hbm/items/weapon/ItemGunBase.java index d43c8c652..03c86688b 100644 --- a/com/hbm/items/weapon/ItemGunBase.java +++ b/com/hbm/items/weapon/ItemGunBase.java @@ -1,9 +1,193 @@ package com.hbm.items.weapon; +import java.util.List; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +import com.hbm.handler.GunConfiguration; import com.hbm.interfaces.IHoldableWeapon; +import cpw.mods.fml.common.FMLCommonHandler; +import cpw.mods.fml.relauncher.Side; +import net.minecraft.entity.Entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.world.World; public class ItemGunBase extends Item implements IHoldableWeapon { + private GunConfiguration mainConfig; + private GunConfiguration altConfig; + + @Override + public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) { + return stack; + } + + @Override + public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) { + + if (FMLCommonHandler.instance().getEffectiveSide() == Side.CLIENT) { + + boolean left = getIsMouseDown(stack); + boolean right = getIsAltDown(stack); + + if(left && right) { + //TODO: stop both with packet + setIsMouseDown(stack, false); + setIsAltDown(stack, false); + } + + if(!left && !right) { + if(Mouse.isButtonDown(0)) { + //TODO: start with packet + setIsMouseDown(stack, true); + } else if(Mouse.isButtonDown(0)) { + //TODO: start with packet + setIsAltDown(stack, true); + } + } + + if(left && !Mouse.isButtonDown(0)) { + //TODO: stop with packet + setIsMouseDown(stack, false); + } + + if(right && !Mouse.isButtonDown(1)) { + //TODO: stop with packet + setIsAltDown(stack, false); + } + + if(mainConfig.reloadType != 0 || (altConfig != null && altConfig.reloadType != 0)) { + + if(Keyboard.isKeyDown(Keyboard.KEY_R)) { + + } + //TODO: reload with packet + } + + } else { + + } + + } + + //called every time the gun shoots + private void fire(ItemStack stack, World world, EntityPlayer player) { + + } + + //called on right click + private void startAction(ItemStack stack, World world, EntityPlayer player, boolean main) { + + } + + //called on right click release + private void endAction(ItemStack stack, World world, EntityPlayer player, boolean main) { + + } + + //reload action, if existent + private void reload(ItemStack stack, World world, EntityPlayer player) { + + } + + //item mouseover text + @Override + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) { + + } + + /// if reloading routine is active /// + public static void setIsReloading(ItemStack stack, boolean b) { + writeNBT(stack, "isReloading", b ? 1 : 0); + } + + public static boolean getIsReloading(ItemStack stack) { + return readNBT(stack, "isReloading") == 1; + } + + /// if left mouse button is down /// + public static void setIsMouseDown(ItemStack stack, boolean b) { + writeNBT(stack, "isMouseDown", b ? 1 : 0); + } + + public static boolean getIsMouseDown(ItemStack stack) { + return readNBT(stack, "isMouseDown") == 1; + } + + /// if alt mouse button is down /// + public static void setIsAltDown(ItemStack stack, boolean b) { + writeNBT(stack, "isMouseDown", b ? 1 : 0); + } + + public static boolean getIsAltDown(ItemStack stack) { + return readNBT(stack, "isMouseDown") == 1; + } + + /// RoF cooldown /// + public static void setDelay(ItemStack stack, int i) { + writeNBT(stack, "dlay", i); + } + + public static int getDelay(ItemStack stack) { + return readNBT(stack, "dlay"); + } + + /// R/W cycle animation timer /// + public static void setCycleAnim(ItemStack stack, int i) { + writeNBT(stack, "cycle", i); + } + + public static int getCycleAnim(ItemStack stack) { + return readNBT(stack, "cycle"); + } + + /// R/W reload animation timer /// + public static void setReloadAnim(ItemStack stack, int i) { + writeNBT(stack, "reload", i); + } + + public static int getReloadAnim(ItemStack stack) { + return readNBT(stack, "reload"); + } + + /// magazine capacity /// + public static void setMag(ItemStack stack, int i) { + writeNBT(stack, "magazine", i); + } + + public static int getMag(ItemStack stack) { + return readNBT(stack, "magazine"); + } + + /// magazine type (int specified by index in bullet config list) /// + public static void setMagType(ItemStack stack, int i) { + writeNBT(stack, "magazineType", i); + } + + public static int getMagType(ItemStack stack) { + return readNBT(stack, "magazineType"); + } + + /// NBT utility /// + private static void writeNBT(ItemStack stack, String key, int value) { + + if(!stack.hasTagCompound()) + stack.stackTagCompound = new NBTTagCompound(); + + stack.stackTagCompound.setInteger(key, value); + } + + private static int readNBT(ItemStack stack, String key) { + + if(!stack.hasTagCompound()) + return 0; + + return stack.stackTagCompound.getInteger(key); + } + } diff --git a/com/hbm/lib/Library.java b/com/hbm/lib/Library.java index 503ab7c93..14776d171 100644 --- a/com/hbm/lib/Library.java +++ b/com/hbm/lib/Library.java @@ -656,13 +656,15 @@ public class Library { if(slots[index] != null && slots[index].getItem() instanceof ItemBattery) { long dR = ((ItemBattery)slots[index].getItem()).getChargeRate(); + + System.out.println(dR + ""); while(dR >= 1000000000000L) { if(power - 100000000000000L >= 0 && ItemBattery.getCharge(slots[index]) < ((ItemBattery)slots[index].getItem()).getMaxCharge()) { power -= 100000000000000L; dR -= 1000000000000L; - ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1000000000000L); } else break; } while(dR >= 1000000000) { @@ -670,7 +672,7 @@ public class Library { { power -= 100000000000L; dR -= 1000000000; - ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1000000000); } else break; } while(dR >= 1000000) { @@ -678,7 +680,7 @@ public class Library { { power -= 100000000; dR -= 1000000; - ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1000000); } else break; } while(dR >= 1000) { @@ -686,7 +688,7 @@ public class Library { { power -= 100000; dR -= 1000; - ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).chargeBattery(slots[index], 1000); } else break; } while(dR >= 1) { @@ -768,7 +770,7 @@ public class Library { { power += 100000000000000L; dR -= 1000000000000L; - ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1000000000000L); } else break; } while(dR >= 1000000000) { @@ -776,7 +778,7 @@ public class Library { { power += 100000000000L; dR -= 1000000000L; - ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1000000000); } else break; } while(dR >= 1000000) { @@ -784,7 +786,7 @@ public class Library { { power += 100000000L; dR -= 1000000; - ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1000000); } else break; } while(dR >= 1000) { @@ -792,7 +794,7 @@ public class Library { { power += 100000L; dR -= 1000; - ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1); + ((ItemBattery)slots[index].getItem()).dischargeBattery(slots[index], 1000); } else break; } while(dR >= 1) { diff --git a/com/hbm/main/CraftingManager.java b/com/hbm/main/CraftingManager.java index f1b73feb0..7e4a8272c 100644 --- a/com/hbm/main/CraftingManager.java +++ b/com/hbm/main/CraftingManager.java @@ -605,9 +605,10 @@ public class CraftingManager { //GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_well), 1), new Object[] { "TPM", "GPG", "GDG", 'T', ModItems.tank_steel, 'P', ModItems.pipes_steel, 'M', ModItems.motor, 'G', ModBlocks.steel_scaffold, 'D', ModItems.drill_titanium }); //GameRegistry.addRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_flare), 1), new Object[] { "UHU", "GPG", "GTG", 'U', ModItems.thermo_element, 'H', ModItems.hull_small_steel, 'G', ModBlocks.steel_scaffold, 'P', ModItems.pipes_steel, 'T', ModItems.tank_steel }); //GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.machine_refinery), 1), new Object[] { "PTP", "CTC", "WFW", 'P', "plateTitanium", 'T', ModItems.tank_steel, 'C', ModItems.coil_tungsten, 'W', ModBlocks.red_wire_coated, 'F', ModBlocks.machine_electric_furnace_off })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.crate_iron), 1), new Object[] { "PPP", "I I", "III", 'P', "plateIron", 'I', "ingotIron" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.crate_steel), 1), new Object[] { "PPP", "I I", "III", 'P', "plateSteel", 'I', "ingotSteel" })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(Item.getItemFromBlock(ModBlocks.safe), 1), new Object[] { "LAL", "ACA", "LAL", 'L', "plateLead", 'A', "plateAdvanced", 'C', ModBlocks.crate_steel })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.crate_iron, 1), new Object[] { "PPP", "I I", "III", 'P', "plateIron", 'I', "ingotIron" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.crate_steel, 1), new Object[] { "PPP", "I I", "III", 'P', "plateSteel", 'I', "ingotSteel" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.safe, 1), new Object[] { "LAL", "ACA", "LAL", 'L', "plateLead", 'A', "plateAdvanced", 'C', ModBlocks.crate_steel })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_waste_drum, 1), new Object[] { "LRL", "BRB", "LRL", 'L', "ingotLead", 'B', Blocks.iron_bars, 'R', ModItems.rod_quad_empty })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_press, 1), new Object[] { "IRI", "IPI", "IBI", 'I', "ingotIron", 'R', Blocks.furnace, 'B', "blockIron", 'P', Blocks.piston })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_siren, 1), new Object[] { "SIS", "ICI", "SRS", 'S', "plateSteel", 'I', ModItems.plate_polymer, 'C', ModItems.circuit_copper, 'R', "dustRedstone" })); @@ -840,7 +841,7 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_lead, 16), new Object[] { " I", "GC", " P", 'I', ModItems.ingot_u235, 'G', Items.gunpowder, 'C', "paneGlassColorless", 'P', ModItems.primer_357 })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_lead, 16), new Object[] { " I", "GC", " P", 'I', ModItems.ingot_pu239, 'G', Items.gunpowder, 'C', "paneGlassColorless", 'P', ModItems.primer_357 })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_lead, 16), new Object[] { " I", "GC", " P", 'I', ModItems.trinitite, 'G', Items.gunpowder, 'C', "paneGlassColorless", 'P', ModItems.primer_357 })); - GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_lead, 16), new Object[] { " I", "GC", " P", 'I', ModItems.nuclear_waste, 'G', Items.gunpowder, 'C', "paneGlassColorless", 'P', ModItems.primer_357 })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_lead, 16), new Object[] { " I", "GC", " P", 'I', ModItems.nuclear_waste_tiny, 'G', Items.gunpowder, 'C', "paneGlassColorless", 'P', ModItems.primer_357 })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_gold, 16), new Object[] { " I", "GC", " P", 'I', "ingotGold", 'G', Items.gunpowder, 'C', ModItems.casing_357, 'P', ModItems.primer_357 })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_schrabidium, 16), new Object[] { " I ", "GCN", " P ", 'I', "ingotSchrabidium", 'G', Items.gunpowder, 'C', ModItems.casing_357, 'P', ModItems.primer_357, 'N', Items.nether_star })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.assembly_nightmare, 16), new Object[] { " I", "GC", " P", 'I', "ingotTungsten", 'G', Items.gunpowder, 'C', ModItems.casing_357, 'P', ModItems.primer_357 })); @@ -1430,6 +1431,14 @@ public class CraftingManager { GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.custom_fall, 1), new Object[] { "IIP", "CHW", "IIP", 'I', ModItems.plate_polymer, 'P', "plateSaturnite", 'C', ModItems.circuit_red_copper, 'H', ModItems.hull_small_steel, 'W', ModItems.coil_copper })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.reactor_sensor, 1), new Object[] { "WPW", "CMC", "PPP", 'W', ModItems.wire_tungsten, 'P', "plateLead", 'C', ModItems.circuit_targeting_tier3, 'M', ModItems.magnetron })); GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.machine_controller, 1), new Object[] { "PGP", "ICI", "PRP", 'P', "plateDesh", 'G', "paneGlass", 'I', "ingotPolymer", 'R', "blockRedstone", 'C', ModItems.circuit_targeting_tier4 })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_minigun, 1), new Object[] { "PIB", "PCM", "PIB", 'P', ModItems.pipes_steel, 'B', "blockSteel", 'I', "ingotPolymer", 'C', ModItems.mechanism_rifle_2, 'M', ModItems.motor })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModItems.gun_avenger, 1), new Object[] { "PIB", "PCM", "PIB", 'P', ModItems.pipes_steel, 'B', "blockBeryllium", 'I', "ingotDesh", 'C', ModItems.mechanism_rifle_2, 'M', ModItems.motor })); + GameRegistry.addRecipe(new ItemStack(ModItems.gun_lacunae, 1), new Object[] { "TIT", "ILI", "PRP", 'T', ModItems.syringe_taint, 'I', ModItems.ingot_starmetal, 'L', ModItems.gun_minigun, 'P', ModItems.pellet_rtg, 'R', ModBlocks.machine_rtg_grey }); + + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.absorber, 1), new Object[] { "ICI", "CPC", "ICI", 'I', "ingotCopper", 'C', "dustCoal", 'P', "dustLead" })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.absorber_red, 1), new Object[] { "ICI", "CPC", "ICI", 'I', "ingotTitanium", 'C', "dustCoal", 'P', ModBlocks.absorber })); + GameRegistry.addRecipe(new ShapedOreRecipe(new ItemStack(ModBlocks.absorber_green, 1), new Object[] { "ICI", "CPC", "ICI", 'I', "ingotPolymer", 'C', ModItems.powder_desh_mix, 'P', ModBlocks.absorber_red })); + GameRegistry.addRecipe(new ItemStack(ModBlocks.absorber_pink, 1), new Object[] { "ICI", "CPC", "ICI", 'I', ModItems.ingot_saturnite, 'C', ModItems.powder_nitan_mix, 'P', ModBlocks.absorber_green }); GameRegistry.addShapelessRecipe(new ItemStack(Items.paper, 1), new Object[] { new ItemStack(ModItems.assembly_template, 1, OreDictionary.WILDCARD_VALUE) }); GameRegistry.addShapelessRecipe(new ItemStack(Items.paper, 1), new Object[] { new ItemStack(ModItems.chemistry_template, 1, OreDictionary.WILDCARD_VALUE) }); diff --git a/com/hbm/packet/AuxButtonPacket.java b/com/hbm/packet/AuxButtonPacket.java index 948d66927..d722ee67d 100644 --- a/com/hbm/packet/AuxButtonPacket.java +++ b/com/hbm/packet/AuxButtonPacket.java @@ -128,49 +128,75 @@ public class AuxButtonPacket implements IMessage { if(m.id == 1) control.auto = m.value == 1; - TileEntity reac = p.worldObj.getTileEntity(control.linkX, control.linkY, control.linkZ); + if(control.linkY > -1) { + TileEntity reac = p.worldObj.getTileEntity(control.linkX, control.linkY, control.linkZ); + + if (reac instanceof TileEntityMachineReactorSmall) { + TileEntityMachineReactorSmall reactor = (TileEntityMachineReactorSmall)reac; + + System.out.println(m.id + "/" + m.value); + + if(m.id == 0) + reactor.retracting = m.value == 0; + + if(m.id == 2) { + FluidType type = FluidType.STEAM; + int fill = reactor.tanks[2].getFill(); + + switch(m.value) { + case 0: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; + case 1: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 2: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + } + + if(fill > reactor.tanks[2].getMaxFill()) + fill = reactor.tanks[2].getMaxFill(); + + reactor.tanks[2].setTankType(type); + reactor.tanks[2].setFill(fill); + } + } + + if (reac instanceof TileEntityMachineReactorLarge) { + TileEntityMachineReactorLarge reactor = (TileEntityMachineReactorLarge)reac; + + if(m.id == 0) { + reactor.rods = m.value; + } + + if(m.id == 2) { + FluidType type = FluidType.STEAM; + int fill = reactor.tanks[2].getFill(); + + switch(m.value) { + case 0: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; + case 1: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 2: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + } + + if(fill > reactor.tanks[2].getMaxFill()) + fill = reactor.tanks[2].getMaxFill(); + + reactor.tanks[2].setTankType(type); + reactor.tanks[2].setFill(fill); + } + } + } - if (reac instanceof TileEntityMachineReactorSmall) { - TileEntityMachineReactorSmall reactor = (TileEntityMachineReactorSmall)reac; - - System.out.println(m.id + "/" + m.value); + if (te instanceof TileEntityMachineReactorLarge) { + TileEntityMachineReactorLarge reactor = (TileEntityMachineReactorLarge)te; if(m.id == 0) - reactor.retracting = m.value == 0; - - if(m.id == 2) { - FluidType type = FluidType.STEAM; - int fill = reactor.tanks[2].getFill(); - - switch(m.value) { - case 0: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; - case 1: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; - case 2: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; - } - - if(fill > reactor.tanks[2].getMaxFill()) - fill = reactor.tanks[2].getMaxFill(); - - reactor.tanks[2].setTankType(type); - reactor.tanks[2].setFill(fill); - } - } - - if (reac instanceof TileEntityMachineReactorLarge) { - TileEntityMachineReactorLarge reactor = (TileEntityMachineReactorLarge)reac; - - if(m.id == 0) { reactor.rods = m.value; - } - if(m.id == 2) { + if(m.id == 1) { FluidType type = FluidType.STEAM; int fill = reactor.tanks[2].getFill(); switch(m.value) { - case 0: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; - case 1: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; - case 2: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 0: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 1: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; + case 2: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; } if(fill > reactor.tanks[2].getMaxFill()) @@ -182,30 +208,6 @@ public class AuxButtonPacket implements IMessage { } } - if (te instanceof TileEntityMachineReactorLarge) { - TileEntityMachineReactorLarge reactor = (TileEntityMachineReactorLarge)te; - - if(m.id == 0) - reactor.rods = m.value; - - if(m.id == 1) { - FluidType type = FluidType.STEAM; - int fill = reactor.tanks[2].getFill(); - - switch(m.value) { - case 0: type = FluidType.HOTSTEAM; fill = (int)Math.floor(fill / 10D); break; - case 1: type = FluidType.SUPERHOTSTEAM; fill = (int)Math.floor(fill / 10D); break; - case 2: type = FluidType.STEAM; fill = (int)Math.floor(fill * 100); break; - } - - if(fill > reactor.tanks[2].getMaxFill()) - fill = reactor.tanks[2].getMaxFill(); - - reactor.tanks[2].setTankType(type); - reactor.tanks[2].setFill(fill); - } - } - //} catch (Exception x) { } return null; diff --git a/com/hbm/render/item/ItemRenderOverkill.java b/com/hbm/render/item/ItemRenderOverkill.java index ad4f90c16..2c8ebd669 100644 --- a/com/hbm/render/item/ItemRenderOverkill.java +++ b/com/hbm/render/item/ItemRenderOverkill.java @@ -136,8 +136,9 @@ public class ItemRenderOverkill implements IItemRenderer { if(item.getItem() == ModItems.gun_lacunae || item.getItem() == ModItems.gun_minigun || item.getItem() == ModItems.gun_avenger) { + GL11.glRotatef(-15.0F, 0.0F, 0.0F, 1.0F); GL11.glRotatef(180, 0, 1, 0); - GL11.glTranslatef(0.0F, 0.3F, -0.2F); + GL11.glTranslatef(0.5F, 0.3F, -0.2F); } if(item.getItem() == ModItems.gun_jack) @@ -250,7 +251,8 @@ public class ItemRenderOverkill implements IItemRenderer { if(item.getItem() == ModItems.gun_lacunae || item.getItem() == ModItems.gun_minigun || item.getItem() == ModItems.gun_avenger) { - GL11.glRotatef(180, 0, 1, 0); + GL11.glRotatef(5.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(185, 0, 1, 0); GL11.glTranslatef(0.5F, 0.6F, 0.2F); } diff --git a/com/hbm/render/item/ItemRenderUZI.java b/com/hbm/render/item/ItemRenderUZI.java index 6aba25340..2dda25997 100644 --- a/com/hbm/render/item/ItemRenderUZI.java +++ b/com/hbm/render/item/ItemRenderUZI.java @@ -53,7 +53,9 @@ public class ItemRenderUZI implements IItemRenderer { GL11.glEnable(GL11.GL_CULL_FACE); GL11.glRotatef(-135.0F, 0.0F, 0.0F, 1.0F); GL11.glScalef(0.25F, 0.25F, 0.25F); - GL11.glTranslatef(-2.2F, -0.2F, -0.9F); + GL11.glTranslatef(-2.5F, -0.5F, -0.9F); + + GL11.glRotatef(-15.0F, 0.0F, 0.0F, 1.0F); if(item.getItem() == ModItems.gun_uzi || item.getItem() == ModItems.gun_uzi_silencer) Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelUzi.png")); @@ -75,17 +77,43 @@ public class ItemRenderUZI implements IItemRenderer { GL11.glPopMatrix(); break; case EQUIPPED: + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glRotatef(-200.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(75.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-5.0F, 0.0F, 0.0F, 1.0F); + + GL11.glScalef(0.5F, 0.5F, 0.5F); + + GL11.glTranslatef(0.2F, -0.8F, -1.0F); + + if(item.getItem() == ModItems.gun_uzi || item.getItem() == ModItems.gun_uzi_silencer) + Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelUzi.png")); + if(item.getItem() == ModItems.gun_uzi_saturnite || item.getItem() == ModItems.gun_uzi_saturnite_silencer) + Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelUziSaturnite.png")); + uzi.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + + if(item.getItem() == ModItems.gun_uzi || item.getItem() == ModItems.gun_uzi_saturnite) { + Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelUziBarrel.png")); + barrel.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + } + + if(item.getItem() == ModItems.gun_uzi_silencer || item.getItem() == ModItems.gun_uzi_saturnite_silencer) { + Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelUziSilencer.png")); + silencer.render((Entity)data[1], 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0625F); + } + + GL11.glPopMatrix(); + break; case ENTITY: GL11.glPushMatrix(); GL11.glEnable(GL11.GL_CULL_FACE); - GL11.glRotatef(-200.0F, 0.0F, 0.0F, 1.0F); - GL11.glRotatef(75.0F, 0.0F, 1.0F, 0.0F); - GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); - GL11.glRotatef(-5.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); GL11.glScalef(0.5F, 0.5F, 0.5F); - GL11.glTranslatef(0.2F, -0.8F, -1.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); if(item.getItem() == ModItems.gun_uzi || item.getItem() == ModItems.gun_uzi_silencer) Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(RefStrings.MODID +":textures/models/ModelUzi.png"));