From 737fb1e432e9832d26c4ce993cf8938edfdd0fb0 Mon Sep 17 00:00:00 2001 From: Bob Date: Sat, 22 Mar 2025 23:29:02 +0100 Subject: [PATCH] go go gadget HIV --- changelog | 1 + .../container/ContainerWeaponTable.java | 32 ++++++++++++++++-- .../inventory/recipes/AmmoPressRecipes.java | 21 ++++++++++++ .../weapon/sedna/factory/GunFactory.java | 2 +- .../weapon/sedna/factory/Orchestras.java | 2 +- .../weapon/sedna/factory/XFactoryEnergy.java | 8 ++--- .../items/weapon/sedna/mods/IWeaponMod.java | 3 ++ .../weapon/sedna/mods/WeaponModCaliber.java | 17 +++++++++- .../weapon/sedna/mods/WeaponModManager.java | 31 +++++++++++++---- .../sedna/mods/WeaponModUziSaturnite.java | 22 ++++++++++++ .../java/com/hbm/main/ResourceManager.java | 1 + .../item/weapon/sedna/ItemRenderUzi.java | 12 ++++--- .../weapon/sedna/ItemRenderUziAkimbo.java | 17 ++++++---- .../machine/storage/TileEntityCrateBase.java | 2 +- src/main/resources/assets/hbm/lang/de_DE.lang | 9 +++++ src/main/resources/assets/hbm/lang/en_US.lang | 9 +++++ .../hbm/textures/items/weapon_mod_sheet.png | Bin 3152 -> 3318 bytes .../weapon_mod_special.skin_saturnite.png | Bin 0 -> 229 bytes .../textures/models/weapons/uzi_saturnite.png | Bin 0 -> 5454 bytes 19 files changed, 163 insertions(+), 26 deletions(-) create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModUziSaturnite.java create mode 100644 src/main/resources/assets/hbm/textures/items/weapon_mod_special.skin_saturnite.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/uzi_saturnite.png diff --git a/changelog b/changelog index 0a9e331d9..b970bea8a 100644 --- a/changelog +++ b/changelog @@ -43,6 +43,7 @@ * Crates can now be opened when held * Crates will not longer show their contents when locked * Crates found in structures will sometimes contain things that aren't items +* Beam weapons are no longer pinpoint accurate when firing unscoped ## Fixed * Fixed animation errors on the MAS-36 diff --git a/src/main/java/com/hbm/inventory/container/ContainerWeaponTable.java b/src/main/java/com/hbm/inventory/container/ContainerWeaponTable.java index d4528cac9..2cdbc4e16 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerWeaponTable.java +++ b/src/main/java/com/hbm/inventory/container/ContainerWeaponTable.java @@ -2,6 +2,7 @@ package com.hbm.inventory.container; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.mods.WeaponModManager; +import com.hbm.util.InventoryUtil; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.InventoryPlayer; @@ -152,8 +153,33 @@ public class ContainerWeaponTable extends Container { } @Override - public ItemStack transferStackInSlot(EntityPlayer p_82846_1_, int par2) { - return null; + public ItemStack transferStackInSlot(EntityPlayer player, int index) { + ItemStack copy = null; + Slot slot = (Slot) this.inventorySlots.get(index); + + if(slot != null && slot.getHasStack()) { + ItemStack stack = slot.getStack(); + copy = stack.copy(); + + if(index < 8) { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 8, this.inventorySlots.size(), true)) return null; + slot.onPickupFromSlot(player, stack); + } else { + if(stack.getItem() instanceof ItemGunBaseNT) { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 7, 8, false)) return null; + } else { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, stack, 0, 7, false)) return null; + } + } + + if(stack.stackSize == 0) { + slot.putStack((ItemStack) null); + } else { + slot.onSlotChanged(); + } + } + + return copy; } public class ModSlot extends Slot { @@ -171,12 +197,14 @@ public class ContainerWeaponTable extends Container { public void putStack(ItemStack stack) { super.putStack(stack); refreshInstalledMods(); + WeaponModManager.onInstallStack(gun.getStackInSlot(0), stack, index); } @Override public void onPickupFromSlot(EntityPlayer player, ItemStack stack) { super.onPickupFromSlot(player, stack); refreshInstalledMods(); + WeaponModManager.onUninstallStack(gun.getStackInSlot(0), stack, index); } public void refreshInstalledMods() { diff --git a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java index e1fddc0de..557ee78e3 100644 --- a/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java +++ b/src/main/java/com/hbm/inventory/recipes/AmmoPressRecipes.java @@ -137,6 +137,27 @@ public class AmmoPressRecipes extends SerializableRecipe { null, smokeless.copy(2), null, null, sSmall, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_SP, 8), + null, lead, null, + null, smokeless, null, + null, cSmall, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_FMJ, 8), + null, steel, null, + null, smokeless, null, + null, cSmall, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_JHP, 8), + plastic, copper, null, + null, smokeless, null, + null, cSmall, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_AP, 8), + null, wSteel, null, + null, smokeless.copy(2), null, + null, sSmall, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.P45_DU, 8), + null, uranium, null, + null, smokeless.copy(2), null, + null, sSmall, null)); + recipes.add(new AmmoPressRecipe(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.R556_SP, 16), null, lead.copy(2), null, null, smokeless.copy(2), null, 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 ff80ce43c..1d58a9f7f 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 @@ -158,7 +158,7 @@ public class GunFactory { SILENCER, SCOPE, SAW, GREASEGUN, SLOWDOWN, SPEEDUP, CHOKE, SPEEDLOADER, FURNITURE_GREEN, FURNITURE_BLACK, BAYONET, - STACK_MAG, + STACK_MAG, SKIN_SATURNITE, } public static enum EnumModCaliber { 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 557123942..9658c3cf4 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 @@ -920,7 +920,7 @@ public class Orchestras { if(type == AnimType.CYCLE) { if(timer == 0) { - int rounds = WeaponModManager.hasUpgrade(stack, ctx.configIndex, 208) ? 2 : 1; + int rounds = WeaponModManager.hasUpgrade(stack, ctx.configIndex, WeaponModManager.ID_MINIGUN_SPEED) ? 3 : 1; for(int i = 0; i < rounds; i++) { SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, aiming ? 0.125 : 0.5, aiming ? -0.125 : -0.25, aiming ? -0.25 : -0.5D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 15F, (float)entity.getRNG().nextGaussian() * 15F, casing.getName()); 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 index d9698f42f..fe742a0a3 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryEnergy.java @@ -132,9 +132,9 @@ public class XFactoryEnergy { energy_las_ir = new BulletConfig().setItem(EnumAmmo.CAPACITOR_IR).setCasing(new ItemStack(ModItems.ingot_polymer, 2), 4).setupDamageClass(DamageClass.FIRE).setBeam().setSpread(0.0F).setLife(5).setRenderRotations(false).setOnBeamImpact(LAMBDA_IR_HIT); ModItems.gun_tesla_cannon = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(2_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.CIRCLE) + .dura(2_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE) .rec(new Receiver(0) - .dmg(35F).delay(20).reload(44).jam(19).sound("hbm:weapon.fire.tesla", 1.0F, 1.0F) + .dmg(35F).delay(20).spreadHipfire(1.5F).reload(44).jam(19).sound("hbm:weapon.fire.tesla", 1.0F, 1.0F) .mag(new MagazineBelt().addConfigs(energy_tesla, energy_tesla_overcharge)) .offset(0.75, 0, -0.375).offsetScoped(0.75, 0, -0.25) .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) @@ -143,9 +143,9 @@ public class XFactoryEnergy { ).setUnlocalizedName("gun_tesla_cannon"); ModItems.gun_lasrifle = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() - .dura(2_000).draw(10).inspect(26).reloadSequential(true).crosshair(Crosshair.CIRCLE).scopeTexture(scope_luna) + .dura(2_000).draw(10).inspect(26).crosshair(Crosshair.CIRCLE).scopeTexture(scope_luna) .rec(new Receiver(0) - .dmg(50F).delay(8).reload(44).jam(36).sound("hbm:weapon.fire.laser", 1.0F, 1.0F) + .dmg(50F).delay(8).spreadHipfire(1F).reload(44).jam(36).sound("hbm:weapon.fire.laser", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 24).addConfigs(energy_las, energy_las_overcharge, energy_las_ir)) .offset(0.75, -0.0625 * 1.5, -0.1875) .setupStandardFire().recoil(LAMBDA_RECOIL_ENERGY)) diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/IWeaponMod.java b/src/main/java/com/hbm/items/weapon/sedna/mods/IWeaponMod.java index 3dd6c6dc2..a6b959bc7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/IWeaponMod.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/IWeaponMod.java @@ -10,4 +10,7 @@ public interface IWeaponMod { /** The meat and bones of the upgrade eval. Requires the base value, the held gun, the value's * identifier and the yet unmodified parent (i.e. if the value is part of the receiver, that receiver) */ public T eval(T base, ItemStack gun, String key, Object parent); + + public default void onInstall(ItemStack gun, ItemStack mod, int index) { } + public default void onUninstall(ItemStack gun, ItemStack mod, int index) { } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCaliber.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCaliber.java index 1dbf1a4b0..1794a8cd4 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCaliber.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModCaliber.java @@ -4,10 +4,13 @@ import java.util.ArrayList; import java.util.List; import com.hbm.items.weapon.sedna.BulletConfig; +import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.items.weapon.sedna.mags.MagazineBelt; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; +import com.hbm.items.weapon.sedna.mags.MagazineSingleTypeBase; import net.minecraft.item.ItemStack; @@ -46,7 +49,6 @@ public class WeaponModCaliber extends WeaponModBase { return (T) DUMMY_FULL; } if(base instanceof MagazineBelt) { - MagazineBelt original = (MagazineBelt) base; DUMMY_BELT.acceptedBullets = cfg; return (T) DUMMY_BELT; } @@ -56,4 +58,17 @@ public class WeaponModCaliber extends WeaponModBase { } return base; } + + /* adding or removing a caliber mod annihilates the loaded rounds */ + public void onInstall(ItemStack gun, ItemStack mod, int index) { clearMag(gun, index); } + public void onUninstall(ItemStack gun, ItemStack mod, int index) { clearMag(gun, index); } + + public void clearMag(ItemStack stack, int index) { + ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); + IMagazine mag = gun.getConfig(stack, index).getReceivers(stack)[0].getMagazine(stack); + if(mag instanceof MagazineSingleTypeBase) { + MagazineSingleTypeBase mstb = (MagazineSingleTypeBase) mag; + mstb.setAmount(stack, 0); + } + } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java index ba9bb3c46..c2fb9d39b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModManager.java @@ -127,13 +127,14 @@ public class WeaponModManager { new WeaponModDefinition(EnumModSpecial.GREASEGUN).addMod(ModItems.gun_greasegun, new WeaponModGreasegun(ID_GREASEGUN_CLEAN)); new WeaponModDefinition(EnumModSpecial.SLOWDOWN).addMod(ModItems.gun_minigun, new WeaponModSlowdown(207)); new WeaponModDefinition(EnumModSpecial.SPEEDUP) - .addMod(ModItems.gun_minigun, new WeaponModMinigunSpeedup(208)) + .addMod(ModItems.gun_minigun, new WeaponModMinigunSpeedup(ID_MINIGUN_SPEED)) .addMod(new Item[] {ModItems.gun_autoshotgun, ModItems.gun_autoshotgun_shredder}, new WeaponModShredderSpeedup(209)); new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12}, new WeaponModChoke(210)); new WeaponModDefinition(EnumModSpecial.FURNITURE_GREEN).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_GREEN)); new WeaponModDefinition(EnumModSpecial.FURNITURE_BLACK).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_BLACK)); new WeaponModDefinition(EnumModSpecial.BAYONET).addMod(ModItems.gun_mas36, new WeaponModMASBayonet(ID_MAS_BAYONET)); new WeaponModDefinition(EnumModSpecial.STACK_MAG).addMod(new Item[] {ModItems.gun_greasegun, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_aberrator, ModItems.gun_aberrator_eott}, new WeaponModStackMag(214)); + new WeaponModDefinition(EnumModSpecial.SKIN_SATURNITE).addMod(new Item[] {ModItems.gun_uzi, ModItems.gun_uzi_akimbo}, new WeaponModUziSaturnite(ID_UZI_SATURN)); BulletConfig[] p9 = new BulletConfig[] {XFactory9mm.p9_sp, XFactory9mm.p9_fmj, XFactory9mm.p9_jhp, XFactory9mm.p9_ap}; BulletConfig[] p45 = new BulletConfig[] {XFactory45.p45_sp, XFactory45.p45_fmj, XFactory45.p45_jhp, XFactory45.p45_ap, XFactory45.p45_du}; @@ -178,9 +179,11 @@ public class WeaponModManager { public static final int ID_NO_SHIELD = 204; public static final int ID_NO_STOCK = 205; public static final int ID_GREASEGUN_CLEAN = 206; + public static final int ID_MINIGUN_SPEED = 208; public static final int ID_FURNITURE_GREEN = 211; public static final int ID_FURNITURE_BLACK = 212; public static final int ID_MAS_BAYONET = 213; + public static final int ID_UZI_SATURN = 215; public static ItemStack[] getUpgradeItems(ItemStack stack, int cfg) { if(!stack.hasTagCompound()) return new ItemStack[0]; @@ -240,12 +243,28 @@ public class WeaponModManager { } } - public static boolean isApplicable(ItemStack gun, ItemStack mod, int cfg, boolean checkMutex) { - if(gun == null || mod == null) return false; //if either stacks are null + public static void onInstallStack(ItemStack gun, ItemStack mod, int cfg) { + IWeaponMod newMod = modFromStack(gun, mod, cfg); + if(newMod == null) return; + newMod.onInstall(gun, mod, cfg); + } + + public static void onUninstallStack(ItemStack gun, ItemStack mod, int cfg) { + IWeaponMod newMod = modFromStack(gun, mod, cfg); + if(newMod == null) return; + newMod.onUninstall(gun, mod, cfg); + } + + public static IWeaponMod modFromStack(ItemStack gun, ItemStack mod, int cfg) { + if(gun == null || mod == null) return null; WeaponModDefinition def = stackToMod.get(new ComparableStack(mod)); - if(def == null) return false; //if the mod stack doesn't have a mod definition - IWeaponMod newMod = def.modByGun.get(new ComparableStack(gun)); - if(newMod == null) newMod = def.modByGun.get(null); //if there's no per-gun mod, default to null key + if(def == null) return null; + IWeaponMod newMod = def.modByGun.get(new ComparableStack(gun).makeSingular()); //shift clicking causes the gun to have stack size 0! + return newMod; + } + + public static boolean isApplicable(ItemStack gun, ItemStack mod, int cfg, boolean checkMutex) { + IWeaponMod newMod = modFromStack(gun, mod, cfg); if(newMod == null) return false; //if there's just no mod applicable if(checkMutex) for(int i : gun.stackTagCompound.getIntArray(KEY_MOD_LIST + cfg)) { diff --git a/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModUziSaturnite.java b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModUziSaturnite.java new file mode 100644 index 000000000..baba38d00 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mods/WeaponModUziSaturnite.java @@ -0,0 +1,22 @@ +package com.hbm.items.weapon.sedna.mods; + +import com.hbm.items.weapon.sedna.GunConfig; +import com.hbm.items.weapon.sedna.Receiver; + +import net.minecraft.item.ItemStack; + +public class WeaponModUziSaturnite extends WeaponModBase { + + public WeaponModUziSaturnite(int id) { + super(id, "FURNITURE"); + this.setPriority(PRIORITY_ADDITIVE); + } + + @Override + public T eval(T base, ItemStack gun, String key, Object parent) { + if(key == GunConfig.F_DURABILITY) return cast((Float) base * 5F, base); + if(key == Receiver.F_BASEDAMAGE) return cast((Float) base + 3F, base); + return base; + } + +} diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 1f3c3dd08..6f56ba605 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -958,6 +958,7 @@ public class ResourceManager { public static final ResourceLocation flamethrower_daybreaker_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flamethrower_daybreaker.png"); public static final ResourceLocation mike_hawk_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lag.png"); public static final ResourceLocation uzi_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi.png"); + public static final ResourceLocation uzi_saturnite_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi_saturnite.png"); public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png"); public static final ResourceLocation g3_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3.png"); public static final ResourceLocation g3_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_green.png"); diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUzi.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUzi.java index 4752e9443..1fdea82b0 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUzi.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUzi.java @@ -35,7 +35,7 @@ public class ItemRenderUzi extends ItemRenderWeaponBase { public void renderFirstPerson(ItemStack stack) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); double scale = 0.25D; GL11.glScaled(scale, scale, scale); @@ -143,7 +143,7 @@ public class ItemRenderUzi extends ItemRenderWeaponBase { GL11.glEnable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart("Gun"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -159,14 +159,14 @@ public class ItemRenderUzi extends ItemRenderWeaponBase { boolean silenced = hasSilencer(stack, 0); - if(silenced) { + if(silenced && type == ItemRenderType.INVENTORY) { double scale = 0.625D; GL11.glScaled(scale, scale, scale); GL11.glTranslated(0, 0, -4); } GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart("Gun"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -179,4 +179,8 @@ public class ItemRenderUzi extends ItemRenderWeaponBase { public boolean hasSilencer(ItemStack stack, int cfg) { return WeaponModManager.hasUpgrade(stack, cfg, WeaponModManager.ID_SILENCER); } + + public boolean isSaturnite(ItemStack stack) { + return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_UZI_SATURN); + } } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java index 68ab84b23..ec538663b 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderUziAkimbo.java @@ -36,10 +36,10 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { float offset = 0.8F; for(int i = -1; i <= 1; i += 2) { - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + int index = i == -1 ? 0 : 1; + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack, index) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); GL11.glPushMatrix(); - int index = i == -1 ? 0 : 1; standardAimingTransform(stack, -2.25F * offset * i, -1.5F * offset, 2.5F * offset, 0, -4.375 / 8D, 1); double scale = 0.25D; @@ -156,7 +156,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { public void renderEquipped(ItemStack stack) { GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack, 1) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart("Gun"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -170,7 +170,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { public void renderEquippedAkimbo(ItemStack stack) { GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack, 0) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart("GunMirror"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -185,7 +185,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { GL11.glEnable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack, index) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart(index == 0 ? "GunMirror" : "Gun"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -199,7 +199,6 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { public void renderOther(ItemStack stack, ItemRenderType type) { GL11.glEnable(GL11.GL_LIGHTING); GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); boolean silencer0 = hasSilencer(stack, 1); boolean silencer1 = hasSilencer(stack, 0); @@ -216,6 +215,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { GL11.glScaled(scale, scale, scale); GL11.glTranslated(0, 0, -4); } + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack, 1) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart("Gun"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -238,6 +238,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { GL11.glScaled(scale, scale, scale); GL11.glTranslated(0, 0, -4); } + Minecraft.getMinecraft().renderEngine.bindTexture(isSaturnite(stack, 0) ? ResourceManager.uzi_saturnite_tex : ResourceManager.uzi_tex); ResourceManager.uzi.renderPart("GunMirror"); ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockFront"); @@ -252,4 +253,8 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase { public boolean hasSilencer(ItemStack stack, int cfg) { return WeaponModManager.hasUpgrade(stack, cfg, WeaponModManager.ID_SILENCER); } + + public boolean isSaturnite(ItemStack stack, int cfg) { + return WeaponModManager.hasUpgrade(stack, cfg, WeaponModManager.ID_UZI_SATURN); + } } diff --git a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java index 896112e17..1dac5081a 100644 --- a/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java +++ b/src/main/java/com/hbm/tileentity/machine/storage/TileEntityCrateBase.java @@ -191,7 +191,7 @@ public abstract class TileEntityCrateBase extends TileEntityLockableBase impleme /// For when opening from a player's inventory. public static void spawnSpiders(EntityPlayer player, World worldObj, ItemStack crate) { - if(crate.getTagCompound().getBoolean("spiders")) { + if(crate.hasTagCompound() && crate.getTagCompound().getBoolean("spiders")) { Random random = new Random(); for (int i = 0; i < numSpiders; i++) { diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 8d8a8a260..577bbd545 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -3697,6 +3697,14 @@ item.wd40.name=VT-40 item.weapon_bat.name=Richards Standard item.weapon_bat_nail.name=Das Klischee item.weapon_golf_club.name=Schläger des russischen Mafiosos +item.weapon_mod_caliber.bmg50.name=.50 BMG Konversionskit +item.weapon_mod_caliber.m357.name=.357 Magnum Konversionskit +item.weapon_mod_caliber.m44.name=.44 Magnum Konversionskit +item.weapon_mod_caliber.p22.name=.22 lfB Konversionskit +item.weapon_mod_caliber.p45.name=.45 Konversionskit +item.weapon_mod_caliber.p9.name=9mm Konversionskit +item.weapon_mod_caliber.r556.name=5.56mm Konversionskit +item.weapon_mod_caliber.r762.name=7.62mm Konversionskit item.weapon_mod_generic.bigmt_damage.name=Optimierter Saturnit-Verschluss item.weapon_mod_generic.bigmt_dura.name=Langlebige Saturnit-Teile item.weapon_mod_generic.bronze_damage.name=Optimierter Bronzeverschluss @@ -3723,6 +3731,7 @@ item.weapon_mod_special.greasegun.name=Grease Gun Modernisierungskit item.weapon_mod_special.saw.name=Bügelsäge item.weapon_mod_special.scope.name=Ziehlvorrichtung item.weapon_mod_special.silencer.name=Schalldämpfer +item.weapon_mod_special.skin_saturnite.name=Saturnit-Skin item.weapon_mod_special.slowdown.name=Rädergetriebe item.weapon_mod_special.speedloader.name=Schnelllader item.weapon_mod_special.speedup.name=Elektrischer Servomotor diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 9085b8d52..b3bf02dd6 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -4723,6 +4723,14 @@ item.wd40.name=VT-40 item.weapon_bat.name=Richard's Default item.weapon_bat_nail.name=The Cliché item.weapon_golf_club.name=Russian Mobster's Club +item.weapon_mod_caliber.bmg50.name=.50 BMG Conversion Kit +item.weapon_mod_caliber.m357.name=.357 Magnum Conversion Kit +item.weapon_mod_caliber.m44.name=.44 Magnum Conversion Kit +item.weapon_mod_caliber.p22.name=.22 LR Conversion Kit +item.weapon_mod_caliber.p45.name=.45 Conversion Kit +item.weapon_mod_caliber.p9.name=9mm Conversion Kit +item.weapon_mod_caliber.r556.name=5.56mm Conversion Kit +item.weapon_mod_caliber.r762.name=7.62mm Conversion Kit item.weapon_mod_generic.bigmt_damage.name=Optimized Saturnite Receiver item.weapon_mod_generic.bigmt_dura.name=High-Durability Saturnite Parts item.weapon_mod_generic.bronze_damage.name=Optimized Bronze Receiver @@ -4749,6 +4757,7 @@ item.weapon_mod_special.greasegun.name=Grease Gun Modernization Kit item.weapon_mod_special.saw.name=Hacksaw item.weapon_mod_special.scope.name=Scope item.weapon_mod_special.silencer.name=Silencer +item.weapon_mod_special.skin_saturnite.name=Saturnite Skin item.weapon_mod_special.slowdown.name=Gear Train item.weapon_mod_special.speedloader.name=Speedloader item.weapon_mod_special.speedup.name=Auxiliary Electric Engine diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png index 0a9ac00437b62ca1098ec1fae6cec1ce6c99d61c..be0625b8f19cdc5a92ae2a10de6dff8d7b451202 100644 GIT binary patch delta 3298 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 delta 3131 zcmV-B48-&H8PFJzG=B$4L_t(|ob6m+Xd6c!{x%qMPbzj~73ZbupZL6-&5 z3Obm>VSl(y+2QN+!3&T~CRs9>WKxnxLp)!*4S`SGM)`?ELjAK#_C zC-BwUDgfY}mq(S`py2c8Mx#;I($WH55fX_63x~r9hr?J}TGA3h?7VueYt?ilc%Kbm&;|T z2&q)ch<`?-QjV?&y}i8*0H&v>8x{e8)00D?5V9{dv5yQG)Z2k-&*fhemY0|DiCdq? zuyB6f$?5elH3Zf%7((!&5Sq>1_{*Dp`18OSPrkIlMns_C5w}z-0RY$ zh<}ZW5DteKAAAD8G$kSYL=c0xQ4#9#cgY%PBpsDXC8X17mdRuco?j}J5C{a6(^yxeZxo$$!sqnO1jjfZkZ3_^oWJ7 z7azstx2~dZT+MP&5wWfSfVT)<5JhDEvAAc2) z2&h$BrGtl`B^Ofa!2+PJfKYFIHvx3{;0Peo!{@_)lquRr2Ef9}lh zw739VH7IHP#b#& zOZ6&|X(E%!C{4X=w?S zN<}I71YH-FCRlm^?i7xLZsl&Ge4~iqLqDK=qlo9ug#A9Z3z$y zVBJprn7LfQ?(S~Z*4E~H6Jlj$1+A^ESXo&C0G9wVzJCrxel!|ol}ZJHK%i!Y!`tX2 zg3k4)hQP$&>+(er*$CWT5cT$KHtW}(C$ibBAr@W;jr4vUP|&@u-$?H#G}7}${uGKe zBHlIifS)V>uBiw7T=`9a#>N5yDZM^=wi{n&O}Ork8@&E)FUQS~mtp{bSggJkE#ph; z0W$pQg?~c~08YH|K|{Ilz<~n{04`m+B;{|!f)?B14ZVH)_936oJBxrjflaLkcwy-2 z$JqU$-T0<>6XPc@Y6q#avy%mbL6pm7%+Jr)@caAwSs)NVBYOgP(2|p^2U>{%{)+&w zf{boGU~Xg8Np!C z#iwJJE?qL_=jRO?1)ZIpOca5?>1t$m43A2s0^WF21@+{`#YI4)CtH?f0AK?H1DKne z!}~Af@N#DpQ!($FfNG$>Dc-DkQ#?km#pC628Rc@hhA$qY*Rpeg%@v_h@CBJzEXF1# zCV!mo^83{T0I*Ysb7(eAy?OxkW)gxIL`*j_p{O^L5WFB_PxlHwA(P1%WafEQ#8j(m zy5MU9d-m+ns)`YxuLpD-?DRG8oJlxy@eAMHRxkIL%Vl4_EceS$ZzOD_LZ$-h$pDI^U=HeHI zI5GRBC?4f<*$^jYzZ6vu{OV|{f={68R_iZYF+E}_j{u(QRatA|>j5&j}dt%B|}_~7e&7k`voRN@0@ zY=6ML4hlZ~N{VyGs<=M@01Jgec)9aKXKw*ezaFpy4z!v2`^#O7*%8Km%(3q;cQNYC zHIrzaHX7yM^Y9Zvr;SGW_dGT#!e)qg&tpe~ZGasSwgJQ-W?yPz-(T)xDw{N9{2dV* z0RK}n%#J7rU*yY0+`^x0xip*kp1=3g0G~u;BVaps!ipe2ztNh&PCa0o@Wpz-{{eWK VDb>MLE7|}6002ovPDHLkV1ni469fPN diff --git a/src/main/resources/assets/hbm/textures/items/weapon_mod_special.skin_saturnite.png b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.skin_saturnite.png new file mode 100644 index 0000000000000000000000000000000000000000..bfb5e43553273daea9d8988e1d821cf70e7e642b GIT binary patch literal 229 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vfm4_8VZa7>}*dade%&T;l>3_a`(BnGB7BRtc`>J9IR~MIps>fla zd~K={OeYv_ZZOZkmk@fo$yeYcgT?Q&v&|!}J}_mNuC{6ygT6t;roa26UW+WceCz-N YL%6?V6~ng`AP+Hky85}Sb4q9e09x5s*8l(j literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/uzi_saturnite.png b/src/main/resources/assets/hbm/textures/models/weapons/uzi_saturnite.png new file mode 100644 index 0000000000000000000000000000000000000000..5b404a064a9062954e50c786271c4ccab43387e4 GIT binary patch literal 5454 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 ZM_h>jnd&Mp@&_a<$jsQnsKn3-^FPj%YEl3I literal 0 HcmV?d00001