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 0a9ac0043..be0625b8f 100644 Binary files a/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png and b/src/main/resources/assets/hbm/textures/items/weapon_mod_sheet.png differ 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 000000000..bfb5e4355 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/items/weapon_mod_special.skin_saturnite.png differ 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 000000000..5b404a064 Binary files /dev/null and b/src/main/resources/assets/hbm/textures/models/weapons/uzi_saturnite.png differ