From f8de5314f6ea2743d685de3f0346361a5358f2e3 Mon Sep 17 00:00:00 2001 From: Boblet Date: Fri, 25 Oct 2024 15:01:12 +0200 Subject: [PATCH] it's funny because the gun that's called "broken" is unbreakable --- src/main/java/com/hbm/items/ItemEnums.java | 2 +- src/main/java/com/hbm/items/ModItems.java | 2 + .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 43 ++++++++++++- .../weapon/sedna/factory/GunFactory.java | 6 +- .../sedna/factory/GunFactoryClient.java | 5 +- .../hbm/items/weapon/sedna/factory/Lego.java | 16 +++-- .../weapon/sedna/factory/Orchestras.java | 25 +++++++- .../weapon/sedna/factory/XFactory12ga.java | 32 ++++++---- .../weapon/sedna/factory/XFactory22lr.java | 6 +- .../weapon/sedna/factory/XFactory357.java | 10 +-- .../weapon/sedna/factory/XFactory40mm.java | 10 +-- .../weapon/sedna/factory/XFactory44.java | 10 +-- .../weapon/sedna/factory/XFactory50.java | 6 +- .../weapon/sedna/factory/XFactory556mm.java | 6 +- .../weapon/sedna/factory/XFactory762mm.java | 6 +- .../weapon/sedna/factory/XFactory9mm.java | 14 ++-- .../sedna/factory/XFactoryBlackPowder.java | 6 +- .../weapon/sedna/factory/XFactoryFlamer.java | 10 +-- .../weapon/sedna/factory/XFactoryRocket.java | 14 ++-- .../weapon/sedna/impl/ItemGunChemthrower.java | 4 +- .../weapon/sedna/impl/ItemGunStinger.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 9 ++- src/main/java/com/hbm/main/MainRegistry.java | 1 + .../java/com/hbm/main/ResourceManager.java | 1 + src/main/java/com/hbm/main/ServerProxy.java | 3 +- .../item/weapon/sedna/ItemRenderMaresleg.java | 60 ++++++++++++++---- src/main/resources/assets/hbm/lang/de_DE.lang | 41 ++++++++++++ src/main/resources/assets/hbm/lang/en_US.lang | 41 ++++++++++++ .../assets/hbm/textures/items/ammo.png | Bin 12122 -> 13234 bytes .../items/ammo_standard.bmg50_equestrian.png | Bin 0 -> 325 bytes .../items/ammo_standard.g12_equestrian.png | Bin 0 -> 318 bytes .../items/ammo_standard.m44_equestrian.png | Bin 0 -> 359 bytes .../items/item_secret.selenium_steel.png | Bin 0 -> 313 bytes .../models/weapons/maresleg_broken.png | Bin 0 -> 9851 bytes 34 files changed, 299 insertions(+), 94 deletions(-) create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.bmg50_equestrian.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.g12_equestrian.png create mode 100644 src/main/resources/assets/hbm/textures/items/ammo_standard.m44_equestrian.png create mode 100644 src/main/resources/assets/hbm/textures/items/item_secret.selenium_steel.png create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/maresleg_broken.png diff --git a/src/main/java/com/hbm/items/ItemEnums.java b/src/main/java/com/hbm/items/ItemEnums.java index ff0afac1e..ae35cb4c3 100644 --- a/src/main/java/com/hbm/items/ItemEnums.java +++ b/src/main/java/com/hbm/items/ItemEnums.java @@ -77,7 +77,7 @@ public class ItemEnums { } public static enum EnumSecretType { - CANISTER, CONTROLLER + CANISTER, CONTROLLER, SELENIUM_STEEL } public static enum EnumCasingType { diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 1ee1d0165..b45c52376 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -1598,6 +1598,7 @@ public class ModItems { public static Item gun_greasegun; public static Item gun_maresleg; public static Item gun_maresleg_akimbo; + public static Item gun_maresleg_broken; public static Item gun_flaregun; public static Item gun_heavy_revolver; public static Item gun_carbine; @@ -6941,6 +6942,7 @@ public class ModItems { GameRegistry.registerItem(gun_greasegun, gun_greasegun.getUnlocalizedName()); GameRegistry.registerItem(gun_maresleg, gun_maresleg.getUnlocalizedName()); GameRegistry.registerItem(gun_maresleg_akimbo, gun_maresleg_akimbo.getUnlocalizedName()); + GameRegistry.registerItem(gun_maresleg_broken, gun_maresleg_broken.getUnlocalizedName()); GameRegistry.registerItem(gun_flaregun, gun_flaregun.getUnlocalizedName()); GameRegistry.registerItem(gun_heavy_revolver, gun_heavy_revolver.getUnlocalizedName()); GameRegistry.registerItem(gun_carbine, gun_carbine.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java index 255ceab06..56c17f054 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna; +import java.util.List; import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiConsumer; @@ -9,6 +10,8 @@ import com.hbm.interfaces.IItemHUD; import com.hbm.items.IEquipReceiver; import com.hbm.items.IKeybindReceiver; import com.hbm.items.weapon.sedna.hud.IHUDComponent; +import com.hbm.items.weapon.sedna.mags.IMagazine; +import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.packet.PacketDispatcher; import com.hbm.packet.toclient.AuxParticlePacketNT; @@ -16,6 +19,7 @@ import com.hbm.packet.toclient.GunAnimationPacket; import com.hbm.render.anim.HbmAnimations.AnimType; import com.hbm.render.util.RenderScreenOverlay; import com.hbm.sound.AudioWrapper; +import com.hbm.util.BobMathUtil; import com.hbm.util.EnumUtil; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; @@ -30,6 +34,7 @@ import net.minecraft.inventory.IInventory; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; @@ -72,16 +77,29 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei /** NEVER ACCESS DIRECTLY - USE GETTER */ protected GunConfig[] configs_DNA; + public WeaponQuality quality; + public GunConfig getConfig(ItemStack stack, int index) { GunConfig cfg = configs_DNA[index]; return WeaponUpgradeManager.eval(cfg, stack, O_GUNCONFIG + index, this); } - public ItemGunBaseNT(GunConfig... cfg) { + public ItemGunBaseNT(WeaponQuality quality, GunConfig... cfg) { this.setMaxStackSize(1); this.configs_DNA = cfg; + this.quality = quality; this.lastShot = new long[cfg.length]; this.setCreativeTab(MainRegistry.weaponTab); + this.setTextureName(RefStrings.MODID + ":gun_darter"); + } + + public static enum WeaponQuality { + A_SIDE, + B_SIDE, + LEGENDARY, + SEPCIAL, + SECRET, + DEBUG } public static enum GunState { @@ -93,6 +111,29 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei JAMMED, //gun is jammed, either after reloading or while firing } + @SideOnly(Side.CLIENT) + public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { + + int configs = this.configs_DNA.length; + for(int i = 0; i < configs; i++) { + GunConfig config = getConfig(stack, i); + for(Receiver rec : config.getReceivers(stack)) { + IMagazine mag = rec.getMagazine(stack); + list.add("Ammo: " + mag.getIconForHUD(stack).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack)); + list.add("Base Damage: " + rec.getBaseDamage(stack)); + } + } + + switch(this.quality) { + case A_SIDE: list.add(EnumChatFormatting.YELLOW + "Standard Arsenal"); break; + case B_SIDE: list.add(EnumChatFormatting.GOLD + "B-Side"); break; + case LEGENDARY: list.add(EnumChatFormatting.RED + "Legendary Weapon"); break; + case SEPCIAL: list.add(EnumChatFormatting.AQUA + "Special Weapon"); break; + case SECRET: list.add(EnumChatFormatting.DARK_RED + "SECRET"); break; + case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break; + } + } + @Override public boolean canHandleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind) { return keybind == EnumKeybind.GUN_PRIMARY || keybind == EnumKeybind.GUN_SECONDARY || keybind == EnumKeybind.GUN_TERTIARY || keybind == EnumKeybind.RELOAD; 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 5cc4c30ba..907942666 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 @@ -7,6 +7,7 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; @@ -33,7 +34,7 @@ public class GunFactory { ammo_debug_buckshot = new BulletConfig().setItem(ModItems.ammo_12gauge).setSpread(0.1F).setRicochetAngle(45).setProjectiles(6, 6).setCasing(CASING44.clone().register("DEBUG1")); /// GUNS /// - ModItems.gun_debug = new ItemGunBaseNT(new GunConfig() + ModItems.gun_debug = new ItemGunBaseNT(WeaponQuality.DEBUG, new GunConfig() .dura(600F).draw(15).inspect(23).crosshair(Crosshair.L_CLASSIC).smoke(Lego.LAMBDA_STANDARD_SMOKE).orchestra(Orchestras.DEBUG_ORCHESTRA) .rec(new Receiver(0) .dmg(10F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F) @@ -43,7 +44,7 @@ public class GunFactory { .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY) .pr(Lego.LAMBDA_STANDARD_RELOAD) .pt(Lego.LAMBDA_TOGGLE_AIM) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(Lego.LAMBDA_DEBUG_ANIMS) - ).setUnlocalizedName("gun_debug").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_debug"); XFactoryBlackPowder.init(); XFactory357.init(); @@ -75,5 +76,6 @@ public class GunFactory { G40_FLARE, G40, ROCKET_HE, ROCKET_HEAT, FLAME_DIESEL, + M44_EQUESTRIAN, G12_EQUESTRIAN, BMG50_EQUESTRIAN } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java index 918670809..6d2f24f4e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/GunFactoryClient.java @@ -14,6 +14,7 @@ import static com.hbm.items.weapon.sedna.factory.XFactoryRocket.*; import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.ItemGunBaseNT; +import com.hbm.main.ResourceManager; import com.hbm.render.item.weapon.sedna.*; import net.minecraftforge.client.MinecraftForgeClient; @@ -28,8 +29,9 @@ public class GunFactoryClient { MinecraftForgeClient.registerItemRenderer(ModItems.gun_light_revolver_dani, new ItemRenderDANI()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_henry, new ItemRenderHenry()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_greasegun, new ItemRenderGreasegun()); - MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg, new ItemRenderMaresleg()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg, new ItemRenderMaresleg(ResourceManager.maresleg_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg_akimbo, new ItemRenderMareslegAkimbo()); + MinecraftForgeClient.registerItemRenderer(ModItems.gun_maresleg_broken, new ItemRenderMaresleg(ResourceManager.maresleg_broken_tex)); MinecraftForgeClient.registerItemRenderer(ModItems.gun_flaregun, new ItemRenderFlaregun()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_heavy_revolver, new ItemRenderHeavyRevolver()); MinecraftForgeClient.registerItemRenderer(ModItems.gun_carbine, new ItemRenderCarbine()); @@ -105,6 +107,7 @@ public class GunFactoryClient { ((ItemGunBaseNT) ModItems.gun_henry) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_greasegun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_maresleg) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); + ((ItemGunBaseNT) ModItems.gun_maresleg_broken) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_flaregun) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_heavy_revolver) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); ((ItemGunBaseNT) ModItems.gun_carbine) .getConfig(null, 0).hud(LegoClient.HUD_COMPONENT_DURABILITY, LegoClient.HUD_COMPONENT_AMMO); diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java index d25cee56c..c2fd0dcd7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/Lego.java @@ -171,15 +171,19 @@ public class Lego { /** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg */ public static BiConsumer LAMBDA_STANDARD_FIRE = (stack, ctx) -> { - doStandardFire(stack, ctx, AnimType.CYCLE); + doStandardFire(stack, ctx, AnimType.CYCLE, true); + }; + /** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg, ignores wear */ + public static BiConsumer LAMBDA_NOWEAR_FIRE = (stack, ctx) -> { + doStandardFire(stack, ctx, AnimType.CYCLE, false); }; /** Spawns an EntityBulletBaseMK4 with the loaded bulletcfg, then resets lockon progress */ public static BiConsumer LAMBDA_LOCKON_FIRE = (stack, ctx) -> { - doStandardFire(stack, ctx, AnimType.CYCLE); + doStandardFire(stack, ctx, AnimType.CYCLE, true); ItemGunBaseNT.setIsLockedOn(stack, false); }; - public static void doStandardFire(ItemStack stack, LambdaContext ctx, AnimType anim) { + public static void doStandardFire(ItemStack stack, LambdaContext ctx, AnimType anim, boolean calcWear) { EntityLivingBase entity = ctx.entity; EntityPlayer player = ctx.getPlayer(); int index = ctx.configIndex; @@ -203,15 +207,15 @@ public class Lego { if(config.projectilesMax > config.projectilesMin) projectiles += entity.getRNG().nextInt(config.projectilesMax - config.projectilesMin + 1); for(int i = 0; i < projectiles; i++) { - float damage = primary.getBaseDamage(stack) * getStandardWearDamage(stack, ctx.config, index); - float spread = primary.getGunSpread(stack) * aim + getStandardWearSpread(stack, ctx.config, index) * 0.125F; + float damage = primary.getBaseDamage(stack) * (calcWear ? getStandardWearDamage(stack, ctx.config, index) : 1); + float spread = primary.getGunSpread(stack) * aim + (calcWear ? getStandardWearSpread(stack, ctx.config, index) * 0.125F : 0F); EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(entity, config, damage, spread, sideOffset, heightOffset, forwardOffset); if(ItemGunBaseNT.getIsLockedOn(stack)) mk4.lockonTarget = entity.worldObj.getEntityByID(ItemGunBaseNT.getLockonTarget(stack)); entity.worldObj.spawnEntityInWorld(mk4); } mag.setAmount(stack, mag.getAmount(stack) - 1); - ItemGunBaseNT.setWear(stack, index, Math.min(ItemGunBaseNT.getWear(stack, index) + config.wear, ctx.config.getDurability(stack))); + if(calcWear) ItemGunBaseNT.setWear(stack, index, Math.min(ItemGunBaseNT.getWear(stack, index) + config.wear, ctx.config.getDurability(stack))); } public static float getStandardWearSpread(ItemStack stack, GunConfig config, int index) { 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 1269b3220..2874d5625 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 @@ -244,7 +244,7 @@ public class Orchestras { } }; - public static BiConsumer ORCHESTRA_MARESLEG_AKIMBO = (stack, ctx) -> { + public static BiConsumer ORCHESTRA_MARESLEG_SHORT = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); @@ -268,9 +268,8 @@ public class Orchestras { } if(type == AnimType.CYCLE) { if(timer == 14) { - int offset = ctx.configIndex == 0 ? -1 : 1; SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack); - if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, -0.125, aiming ? -0.125 * offset : -0.375D * offset, 0, -0.08, 0, 0.01, casing.getName(), true, 60, 0.5D, 20); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, -0.125, aiming ? -0.125 : -0.375D, 0, -0.08, 0, 0.01, casing.getName(), true, 60, 0.5D, 20); } if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); } @@ -280,6 +279,26 @@ public class Orchestras { } }; + public static BiConsumer ORCHESTRA_MARESLEG_AKIMBO = (stack, ctx) -> { + EntityLivingBase entity = ctx.entity; + if(entity.worldObj.isRemote) return; + AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); + int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); + boolean aiming = ItemGunBaseNT.getIsAiming(stack); + + if(type == AnimType.CYCLE) { + if(timer == 14) { + int offset = ctx.configIndex == 0 ? -1 : 1; + SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack); + if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.3125, -0.125, aiming ? -0.125 * offset : -0.375D * offset, 0, -0.08, 0, 0.01, casing.getName(), true, 60, 0.5D, 20); + } + if(timer == 8) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.leverCock", 1F, 0.8F); + return; + } + + ORCHESTRA_MARESLEG_SHORT.accept(stack, ctx); + }; + public static BiConsumer ORCHESTRA_FLAREGUN = (stack, ctx) -> { EntityLivingBase entity = ctx.entity; if(entity.worldObj.isRemote) return; diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java index dd9afd920..390114544 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory12ga.java @@ -11,10 +11,10 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; -import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; @@ -55,7 +55,7 @@ public class XFactory12ga { BulletConfig[] all = new BulletConfig[] {g12_bp, g12_bp_magnum, g12_bp_slug, g12, g12_slug, g12_flechette, g12_magnum, g12_explosive, g12_phosphorus, g12_anthrax}; - ModItems.gun_maresleg = new ItemGunBaseNT(new GunConfig() + ModItems.gun_maresleg = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(600).draw(20).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(12F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -64,8 +64,8 @@ public class XFactory12ga { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_MARESLEG_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG) - ).setUnlocalizedName("gun_maresleg").setTextureName(RefStrings.MODID + ":gun_darter"); - ModItems.gun_maresleg_akimbo = new ItemGunBaseNT( + ).setUnlocalizedName("gun_maresleg"); + ModItems.gun_maresleg_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig().dura(600).draw(20).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(12F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -84,9 +84,19 @@ public class XFactory12ga { .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_MARESLEG_SHORT_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG_AKIMBO) - ).setUnlocalizedName("gun_maresleg_akimbo").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_maresleg_akimbo"); + ModItems.gun_maresleg_broken = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() + .dura(0).draw(20).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) + .rec(new Receiver(0) + .dmg(12F).delay(20).reload(22, 10, 13, 0).jam(24).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) + .mag(new MagazineSingleReload(0, 6).addConfigs(all)) + .offset(0.75, -0.0625, -0.1875) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_NOWEAR_FIRE).recoil(Lego.LAMBDA_STANDARD_RECOIL)) + .setupStandardConfiguration() + .anim(LAMBDA_MARESLEG_SHORT_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG_SHORT) + ).setUnlocalizedName("gun_maresleg_broken"); - ModItems.gun_liberator = new ItemGunBaseNT(new GunConfig() + ModItems.gun_liberator = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(200).draw(20).inspect(21).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(12F).delay(20).rounds(4).reload(25, 15, 7, 0).jam(45).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -95,9 +105,9 @@ public class XFactory12ga { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_LIBERATOR_ANIMS).orchestra(Orchestras.ORCHESTRA_LIBERATOR) - ).setUnlocalizedName("gun_liberator").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_liberator"); - ModItems.gun_spas12 = new ItemGunBaseNT(new GunConfig() + ModItems.gun_spas12 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(600).draw(20).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(12F).delay(20).reload(5, 10, 10, 10, 0).jam(24).sound("hbm:weapon.shotgunShoot", 1.0F, 1.0F) @@ -106,9 +116,9 @@ public class XFactory12ga { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration().ps(LAMBDA_SPAS_SECONDARY).pt(null) .anim(LAMBDA_SPAS_ANIMS).orchestra(Orchestras.ORCHESTRA_SPAS) - ).setUnlocalizedName("gun_spas12").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_spas12"); - ModItems.gun_autoshotgun = new ItemGunBaseNT(new GunConfig() + ModItems.gun_autoshotgun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(2_000).draw(10).inspect(33).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(15F).delay(10).auto(true).autoAfterDry(true).dryfireAfterAuto(true).reload(44).jam(19).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -117,7 +127,7 @@ public class XFactory12ga { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_SHREDDER_ANIMS).orchestra(Orchestras.ORCHESTRA_SHREDDER) - ).setUnlocalizedName("gun_autoshotgun").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_autoshotgun"); } //TODO: make generic code for this crap public static BiConsumer LAMBDA_SPAS_SECONDARY = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java index ed9510c0f..1d96625c8 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory22lr.java @@ -11,9 +11,9 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; @@ -42,7 +42,7 @@ public class XFactory22lr { p22_ap = new BulletConfig().setItem(EnumAmmo.P22_AP).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setArmorPiercing(0.15F) .setCasing(casing22.clone().setColor(SpentCasing.COLOR_CASE_44).register("p22ap")); - ModItems.gun_am180 = new ItemGunBaseNT(new GunConfig() + ModItems.gun_am180 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(177 * 25).draw(15).inspect(38).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(5F).delay(1).dry(10).auto(true).spread(0.02F).reload(66).jam(30).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -51,7 +51,7 @@ public class XFactory22lr { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_AM180_ANIMS).orchestra(Orchestras.ORCHESTRA_AM180) - ).setUnlocalizedName("gun_am180").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_am180"); } public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java index 6f529d054..c3aff5e15 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory357.java @@ -8,9 +8,9 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationKeyframe.IType; import com.hbm.render.anim.BusAnimationSequence; @@ -33,7 +33,7 @@ public class XFactory357 { m357_ap = new BulletConfig().setItem(EnumAmmo.M357_AP).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setArmorPiercing(0.15F); m357_express = new BulletConfig().setItem(EnumAmmo.M357_EXPRESS).setDoesPenetrate(true).setDamage(1.5F).setArmorPiercing(0.1F).setWear(1.5F); - ModItems.gun_light_revolver = new ItemGunBaseNT(new GunConfig() + ModItems.gun_light_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -42,9 +42,9 @@ public class XFactory357 { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_ATLAS) - ).setUnlocalizedName("gun_light_revolver").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_light_revolver"); - ModItems.gun_light_revolver_dani = new ItemGunBaseNT( + ModItems.gun_light_revolver_dani = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig().dura(30_000).draw(20).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -63,7 +63,7 @@ public class XFactory357 { .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_DANI_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI) - ).setUnlocalizedName("gun_light_revolver_dani").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_light_revolver_dani"); } @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_ATLAS_ANIMS = (stack, type) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java index 60b5caf87..7dfdc6280 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory40mm.java @@ -11,9 +11,9 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; -import com.hbm.lib.RefStrings; import com.hbm.main.ResourceManager; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; @@ -39,7 +39,7 @@ public class XFactory40mm { g40_flare = new BulletConfig().setItem(EnumAmmo.G40_FLARE).setLife(100).setVel(2F).setGrav(0.035D).setRenderRotations(false).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(0x9E1616).setScale(2F).register("G40Flare")); g40 = new BulletConfig().setItem(EnumAmmo.G40).setLife(200).setOnImpact(LAMBDA_STANDARD_EXPLODE).setVel(2F).setGrav(0.035D).setCasing(new SpentCasing(CasingType.STRAIGHT).setColor(SpentCasing.COLOR_CASE_40MM).setScale(2, 2F, 1.5F).register("G40")); - ModItems.gun_flaregun = new ItemGunBaseNT(new GunConfig() + ModItems.gun_flaregun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(100).draw(7).inspect(39).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(15F).delay(20).reload(28).jam(33).sound("hbm:weapon.hkShoot", 1.0F, 1.0F) @@ -48,9 +48,9 @@ public class XFactory40mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_FLAREGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAREGUN) - ).setUnlocalizedName("gun_flaregun").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_flaregun"); - ModItems.gun_congolake = new ItemGunBaseNT(new GunConfig() + ModItems.gun_congolake = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(400).draw(7).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCUMFLEX).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(30F).delay(24).reload(16, 16, 16, 0).jam(0).sound("hbm:weapon.glShoot", 1.0F, 1.0F) @@ -59,7 +59,7 @@ public class XFactory40mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_CONGOLAKE_ANIMS).orchestra(Orchestras.ORCHESTRA_CONGOLAKE) - ).setUnlocalizedName("gun_congolake").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_congolake"); } public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java index 426aea451..9c6ee975f 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory44.java @@ -8,10 +8,10 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; -import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -42,7 +42,7 @@ public class XFactory44 { m44_express = new BulletConfig().setItem(EnumAmmo.M44_EXPRESS).setDoesPenetrate(true).setDamage(1.5F).setArmorPiercing(0.1F).setWear(1.5F) .setCasing(casing44.clone().register("m44express")); - ModItems.gun_henry = new ItemGunBaseNT(new GunConfig() + ModItems.gun_henry = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(15).inspect(23).reloadSequential(true).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(12F).delay(20).reload(25, 11, 14, 8).jam(45).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -51,9 +51,9 @@ public class XFactory44 { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_HENRY_ANIMS).orchestra(Orchestras.ORCHESTRA_HENRY) - ).setUnlocalizedName("gun_henry").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_henry"); - ModItems.gun_heavy_revolver = new ItemGunBaseNT(new GunConfig() + ModItems.gun_heavy_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(600F).draw(10).inspect(23).crosshair(Crosshair.L_CLASSIC).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(14).reload(46).jam(23).sound("hbm:weapon.44Shoot", 1.0F, 1.0F) @@ -63,7 +63,7 @@ public class XFactory44 { .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY) .pr(Lego.LAMBDA_STANDARD_RELOAD) .pt(Lego.LAMBDA_TOGGLE_AIM) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_NOPIP_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP) - ).setUnlocalizedName("gun_heavy_revolver").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_heavy_revolver"); } @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_HENRY_ANIMS = (stack, type) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java index fda9f09fd..625477921 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory50.java @@ -10,9 +10,9 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -43,7 +43,7 @@ public class XFactory50 { bmg50_du = new BulletConfig().setItem(EnumAmmo.BMG50_DU).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2.5F).setArmorPiercing(0.25F) .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("bmg50du")); - ModItems.gun_m2 = new ItemGunBaseNT(new GunConfig() + ModItems.gun_m2 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(5F).delay(2).dry(10).auto(true).spread(0.005F).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -52,7 +52,7 @@ public class XFactory50 { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_M2_ANIMS).orchestra(Orchestras.ORCHESTRA_M2) - ).setUnlocalizedName("gun_m2").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_m2"); } public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java index e97b3e3c5..bf2f95f7a 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory556mm.java @@ -10,9 +10,9 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -40,7 +40,7 @@ public class XFactory556mm { r556_ap = new BulletConfig().setItem(EnumAmmo.R556_AP).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setArmorPiercing(0.15F) .setCasing(casing556.clone().setColor(SpentCasing.COLOR_CASE_44).register("r556ap")); - ModItems.gun_g3 = new ItemGunBaseNT(new GunConfig() + ModItems.gun_g3 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(33).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(15F).delay(2).auto(true).dry(15).spread(0.0F).reload(50).jam(47).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -49,7 +49,7 @@ public class XFactory556mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration().ps(Lego.LAMBDA_STANDARD_CLICK_SECONDARY) .anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3) - ).setUnlocalizedName("gun_g3").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_g3"); } public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java index 6f88a140e..a48c4f657 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory762mm.java @@ -10,9 +10,9 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -43,7 +43,7 @@ public class XFactory762mm { r762_du = new BulletConfig().setItem(EnumAmmo.R762_DU).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2.5F).setArmorPiercing(0.25F) .setCasing(casing762.clone().setColor(SpentCasing.COLOR_CASE_44).register("r762du")); - ModItems.gun_carbine = new ItemGunBaseNT(new GunConfig() + ModItems.gun_carbine = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(10).inspect(31).reloadSequential(true).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(5F).delay(5).dry(15).spread(0.0F).reload(30, 0, 15, 0).jam(60).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -52,7 +52,7 @@ public class XFactory762mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_CARBINE_ANIMS).orchestra(Orchestras.ORCHESTRA_CARBIBE) - ).setUnlocalizedName("gun_carbine").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_carbine"); } public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java index c604050c5..c02af2bf0 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactory9mm.java @@ -10,9 +10,9 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing.CasingType; import com.hbm.render.anim.BusAnimation; @@ -40,7 +40,7 @@ public class XFactory9mm { p9_ap = new BulletConfig().setItem(EnumAmmo.P9_AP).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setArmorPiercing(0.15F) .setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p9ap")); - ModItems.gun_greasegun = new ItemGunBaseNT(new GunConfig() + ModItems.gun_greasegun = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(15).inspect(31).crosshair(Crosshair.L_CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(5F).delay(4).dry(40).auto(true).spread(0.015F).reload(60).jam(55).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -49,9 +49,9 @@ public class XFactory9mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_GREASEGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_GREASEGUN) - ).setUnlocalizedName("gun_greasegun").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_greasegun"); - ModItems.gun_lag = new ItemGunBaseNT(new GunConfig() + ModItems.gun_lag = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(1_700).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(15F).delay(4).dry(40).spread(0.005F).reload(60).jam(55).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -60,9 +60,9 @@ public class XFactory9mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_LAG_ANIMS).orchestra(Orchestras.ORCHESTRA_LAG) - ).setUnlocalizedName("gun_lag").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_lag"); - ModItems.gun_uzi = new ItemGunBaseNT(new GunConfig() + ModItems.gun_uzi = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(3_000).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .rec(new Receiver(0) .dmg(7.5F).delay(2).dry(25).auto(true).spread(0.005F).reload(55).jam(50).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -71,7 +71,7 @@ public class XFactory9mm { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI) - ).setUnlocalizedName("gun_uzi").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_uzi"); } public static BiConsumer LAMBDA_SMOKE = (stack, ctx) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java index c854ac9fc..a13f9e3c1 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryBlackPowder.java @@ -8,9 +8,9 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; @@ -27,7 +27,7 @@ public class XFactoryBlackPowder { BulletConfig iron = new BulletConfig().setItem(EnumAmmo.STONE_IRON).setSpread(0F).setRicochetAngle(90).setRicochetCount(5).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2F); BulletConfig shot = new BulletConfig().setItem(EnumAmmo.STONE_SHOT).setSpread(0.1F).setRicochetAngle(45).setProjectiles(6, 6).setDamage(0.5F); - ModItems.gun_pepperbox = new ItemGunBaseNT(new GunConfig() + ModItems.gun_pepperbox = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(5F).delay(27).reload(67).jam(58).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) @@ -35,7 +35,7 @@ public class XFactoryBlackPowder { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_PEPPERBOX_ANIMS).orchestra(Orchestras.ORCHESTRA_PEPPERBOX) - ).setUnlocalizedName("gun_pepperbox").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_pepperbox"); } @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_PEPPERBOX_ANIMS = (stack, type) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java index b0502ba69..e98eb9637 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryFlamer.java @@ -8,11 +8,11 @@ import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.impl.ItemGunChemthrower; import com.hbm.items.weapon.sedna.mags.MagazineFluid; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; -import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.main.ResourceManager; import com.hbm.render.anim.BusAnimation; @@ -40,7 +40,7 @@ public class XFactoryFlamer { } }); - ModItems.gun_flamer = new ItemGunBaseNT(new GunConfig() + ModItems.gun_flamer = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(20_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .dmg(10F).delay(1).auto(true).reload(90).jam(17) @@ -49,9 +49,9 @@ public class XFactoryFlamer { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_FLAMER_ANIMS).orchestra(Orchestras.ORCHESTRA_FLAMER) - ).setUnlocalizedName("gun_flamer").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_flamer"); - ModItems.gun_chemthrower = new ItemGunChemthrower(new GunConfig() + ModItems.gun_chemthrower = new ItemGunChemthrower(WeaponQuality.A_SIDE, new GunConfig() .dura(90_000).draw(10).inspect(17).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .rec(new Receiver(0) .delay(1).auto(true) @@ -60,7 +60,7 @@ public class XFactoryFlamer { .canFire(ItemGunChemthrower.LAMBDA_CAN_FIRE).fire(ItemGunChemthrower.LAMBDA_FIRE)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_CHEMTHROWER_ANIMS).orchestra(Orchestras.ORCHESTRA_CHEMTHROWER) - ).setUnlocalizedName("gun_chemthrower").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_chemthrower"); } @SuppressWarnings("incomplete-switch") public static BiFunction LAMBDA_FLAMER_ANIMS = (stack, type) -> { diff --git a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java index 1be25c301..528909b34 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java +++ b/src/main/java/com/hbm/items/weapon/sedna/factory/XFactoryRocket.java @@ -12,12 +12,12 @@ import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.impl.ItemGunStinger; import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.lib.Library; -import com.hbm.lib.RefStrings; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimationSequence; import com.hbm.render.anim.BusAnimationKeyframe.IType; @@ -80,7 +80,7 @@ public class XFactoryRocket { rocket_qd_heat = new BulletConfig().setItem(EnumAmmo.ROCKET_HEAT).setLife(400).setDamage(1.5F).setSelfDamageDelay(10).setVel(0F).setGrav(0D) .setOnImpact(LAMBDA_STANDARD_EXPLODE_HEAT).setOnEntityHit(null).setOnRicochet(null).setOnUpdate(LAMBDA_STEERING_ACCELERATE); - ModItems.gun_panzerschreck = new ItemGunBaseNT(new GunConfig() + ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(7).inspect(40).crosshair(Crosshair.L_CIRCUMFLEX) .rec(new Receiver(0) .dmg(25F).delay(5).reload(50).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) @@ -89,9 +89,9 @@ public class XFactoryRocket { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_PANZERSCHRECK_ANIMS).orchestra(Orchestras.ORCHESTRA_PANERSCHRECK) - ).setUnlocalizedName("gun_panzerschreck").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_panzerschreck"); - ModItems.gun_stinger = new ItemGunStinger(new GunConfig() + ModItems.gun_stinger = new ItemGunStinger(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(7).inspect(40).crosshair(Crosshair.L_BOX_OUTLINE) .rec(new Receiver(0) .dmg(25F).delay(5).reload(50).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) @@ -100,9 +100,9 @@ public class XFactoryRocket { .setupLockonFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration().ps(LAMBDA_STINGER_SECONDARY_PRESS).rs(LAMBDA_STINGER_SECONDARY_RELEASE) .anim(LAMBDA_PANZERSCHRECK_ANIMS).orchestra(Orchestras.ORCHESTRA_STINGER) - ).setUnlocalizedName("gun_stinger").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_stinger"); - ModItems.gun_quadro = new ItemGunBaseNT(new GunConfig() + ModItems.gun_quadro = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() .dura(300).draw(7).inspect(40).crosshair(Crosshair.L_CIRCUMFLEX).hideCrosshair(false) .rec(new Receiver(0) .dmg(25F).delay(10).reload(55).jam(40).sound("hbm:weapon.rpgShoot", 1.0F, 1.0F) @@ -111,7 +111,7 @@ public class XFactoryRocket { .setupStandardFire().recoil(Lego.LAMBDA_STANDARD_RECOIL)) .setupStandardConfiguration() .anim(LAMBDA_QUADRO_ANIMS).orchestra(Orchestras.ORCHESTRA_QUADRO) - ).setUnlocalizedName("gun_quadro").setTextureName(RefStrings.MODID + ":gun_darter"); + ).setUnlocalizedName("gun_quadro"); } public static BiConsumer LAMBDA_STINGER_SECONDARY_PRESS = (stack, ctx) -> { ItemGunStinger.setIsLockingOn(stack, true); }; diff --git a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java index 1b883686f..231e0f239 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java +++ b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunChemthrower.java @@ -23,8 +23,8 @@ public class ItemGunChemthrower extends ItemGunBaseNT implements IFillableItem { public static final int CONSUMPTION = 3; - public ItemGunChemthrower(GunConfig... cfg) { - super(cfg); + public ItemGunChemthrower(WeaponQuality quality, GunConfig... cfg) { + super(quality, cfg); } @Override diff --git a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunStinger.java b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunStinger.java index 5dccffc0e..a82763c5b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunStinger.java +++ b/src/main/java/com/hbm/items/weapon/sedna/impl/ItemGunStinger.java @@ -27,8 +27,8 @@ public class ItemGunStinger extends ItemGunBaseNT { public static float prevLockon; public static float lockon; - public ItemGunStinger(GunConfig... cfg) { - super(cfg); + public ItemGunStinger(WeaponQuality quality, GunConfig... cfg) { + super(quality, cfg); } @Override diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 6561f9d3d..a9d61d184 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -137,6 +137,13 @@ public class ClientProxy extends ServerProxy { public RenderInfoSystem theInfoSystem = new RenderInfoSystem(); + /** Runs just before item an block init */ + @Override + public void registerPreRenderInfo() { + AdvancedModelLoader.registerModelHandler(new HmfModelLoader()); + } + + /** Runs right after item and block init */ @Override public void registerRenderInfo() { @@ -145,8 +152,6 @@ public class ClientProxy extends ServerProxy { registerClientEventHandler(new EventHandlerParticleEngine()); registerClientEventHandler(theInfoSystem); - AdvancedModelLoader.registerModelHandler(new HmfModelLoader()); - registerTileEntitySpecialRenderer(); registerItemRenderer(); registerEntityRenderer(); diff --git a/src/main/java/com/hbm/main/MainRegistry.java b/src/main/java/com/hbm/main/MainRegistry.java index 0a61bbeb7..1d48f0720 100644 --- a/src/main/java/com/hbm/main/MainRegistry.java +++ b/src/main/java/com/hbm/main/MainRegistry.java @@ -273,6 +273,7 @@ public class MainRegistry { * This "fix" just makes sure that the material system is loaded first no matter what. */ Mats.MAT_STONE.getUnlocalizedName(); Fluids.init(); + proxy.registerPreRenderInfo(); ModBlocks.mainRegistry(); ModItems.mainRegistry(); proxy.registerRenderInfo(); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 94d05d5cd..b9013dbae 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -974,6 +974,7 @@ public class ResourceManager { public static final ResourceLocation henry_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/henry.png"); public static final ResourceLocation greasegun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/greasegun.png"); public static final ResourceLocation maresleg_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg.png"); + public static final ResourceLocation maresleg_broken_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg_broken.png"); public static final ResourceLocation flaregun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flaregun.png"); public static final ResourceLocation heavy_revolver_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/heavy_revolver.png"); public static final ResourceLocation carbine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/huntsman.png"); diff --git a/src/main/java/com/hbm/main/ServerProxy.java b/src/main/java/com/hbm/main/ServerProxy.java index 530bf6c59..da21cb2f7 100644 --- a/src/main/java/com/hbm/main/ServerProxy.java +++ b/src/main/java/com/hbm/main/ServerProxy.java @@ -28,7 +28,8 @@ public class ServerProxy { public static final int ID_TOOLABILITY = 9; public static final int ID_GUN_MODE = 10; public static final int ID_GAS_HAZARD = 11; - + + public void registerPreRenderInfo() { } public void registerRenderInfo() { } public void registerTileEntitySpecialRenderer() { } public void registerItemRenderer() { } diff --git a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMaresleg.java b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMaresleg.java index 1d94563bb..4381b8824 100644 --- a/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMaresleg.java +++ b/src/main/java/com/hbm/render/item/weapon/sedna/ItemRenderMaresleg.java @@ -2,14 +2,22 @@ package com.hbm.render.item.weapon.sedna; import org.lwjgl.opengl.GL11; +import com.hbm.items.ModItems; import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.main.ResourceManager; import com.hbm.render.anim.HbmAnimations; import net.minecraft.client.Minecraft; import net.minecraft.item.ItemStack; +import net.minecraft.util.ResourceLocation; public class ItemRenderMaresleg extends ItemRenderWeaponBase { + + public ResourceLocation texture; + + public ItemRenderMaresleg(ResourceLocation texture) { + this.texture = texture; + } @Override protected float getTurnMagnitude(ItemStack stack) { return ItemGunBaseNT.getIsAiming(stack) ? 2.5F : -0.5F; } @@ -28,14 +36,17 @@ public class ItemRenderMaresleg extends ItemRenderWeaponBase { public void renderFirstPerson(ItemStack stack) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.maresleg_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); double scale = 0.375D; GL11.glScaled(scale, scale, scale); + + boolean shortened = getShort(stack); double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); double[] recoil = HbmAnimations.getRelevantTransformation("RECOIL"); double[] lever = HbmAnimations.getRelevantTransformation("LEVER"); double[] turn = HbmAnimations.getRelevantTransformation("TURN"); + double[] flip = HbmAnimations.getRelevantTransformation("FLIP"); double[] lift = HbmAnimations.getRelevantTransformation("LIFT"); double[] shell = HbmAnimations.getRelevantTransformation("SHELL"); double[] flag = HbmAnimations.getRelevantTransformation("FLAG"); @@ -54,16 +65,23 @@ public class ItemRenderMaresleg extends ItemRenderWeaponBase { GL11.glRotated(equip[0], -1, 0, 0); GL11.glTranslated(0, 0, 4); + GL11.glTranslated(0, 0, -2); + GL11.glRotated(flip[0], -1, 0, 0); + GL11.glTranslated(0, 0, 2); + GL11.glPushMatrix(); - GL11.glTranslated(0, 1, 8); + GL11.glTranslated(0, 1, shortened ? 3.75 : 8); GL11.glRotated(turn[2], 0, 0, -1); + GL11.glRotated(flip[0], 1, 0, 0); GL11.glRotated(90, 0, 1, 0); this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.25D); GL11.glPopMatrix(); ResourceManager.maresleg.renderPart("Gun"); - ResourceManager.maresleg.renderPart("Stock"); - ResourceManager.maresleg.renderPart("Barrel"); + if(!shortened) { + ResourceManager.maresleg.renderPart("Stock"); + ResourceManager.maresleg.renderPart("Barrel"); + } GL11.glPushMatrix(); GL11.glTranslated(0, 0.125, -2.875); @@ -87,7 +105,7 @@ public class ItemRenderMaresleg extends ItemRenderWeaponBase { GL11.glShadeModel(GL11.GL_FLAT); GL11.glPushMatrix(); - GL11.glTranslated(0, 1, 8); + GL11.glTranslated(0, 1, shortened ? 3.75 : 8); GL11.glRotated(90, 0, 1, 0); GL11.glRotated(90 * gun.shotRand, 1, 0, 0); this.renderMuzzleFlash(gun.lastShot[0], 75, 5); @@ -106,23 +124,39 @@ public class ItemRenderMaresleg extends ItemRenderWeaponBase { @Override public void setupInv(ItemStack stack) { super.setupInv(stack); - double scale = 1.4375D; - GL11.glScaled(scale, scale, scale); - GL11.glRotated(25, 1, 0, 0); - GL11.glRotated(45, 0, 1, 0); - GL11.glTranslated(-0.5, 0.5, 0); + + if(getShort(stack)) { + double scale = 2.5D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-1, 0, 0); + } else { + double scale = 1.4375D; + GL11.glScaled(scale, scale, scale); + GL11.glRotated(25, 1, 0, 0); + GL11.glRotated(45, 0, 1, 0); + GL11.glTranslated(-0.5, 0.5, 0); + } } @Override public void renderOther(ItemStack stack, ItemRenderType type) { GL11.glEnable(GL11.GL_LIGHTING); + GL11.glShadeModel(GL11.GL_SMOOTH); - Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.maresleg_tex); + Minecraft.getMinecraft().renderEngine.bindTexture(texture); ResourceManager.maresleg.renderPart("Gun"); - ResourceManager.maresleg.renderPart("Stock"); - ResourceManager.maresleg.renderPart("Barrel"); ResourceManager.maresleg.renderPart("Lever"); + if(!getShort(stack)) { + ResourceManager.maresleg.renderPart("Stock"); + ResourceManager.maresleg.renderPart("Barrel"); + } GL11.glShadeModel(GL11.GL_FLAT); } + + public boolean getShort(ItemStack stack) { + return stack.getItem() == ModItems.gun_maresleg_broken; + } } diff --git a/src/main/resources/assets/hbm/lang/de_DE.lang b/src/main/resources/assets/hbm/lang/de_DE.lang index 45eee6745..c11015608 100644 --- a/src/main/resources/assets/hbm/lang/de_DE.lang +++ b/src/main/resources/assets/hbm/lang/de_DE.lang @@ -1150,16 +1150,56 @@ item.ammo_shell.name=240mm Geschoss item.ammo_shell_apfsds_du.name=240mm APFSDS-DU item.ammo_shell_apfsds_t.name=240mm APFSDS-T item.ammo_shell_explosive.name=240mm HE-Geschoss +item.ammo_standard.bmg50_ap.name=.50 BMG Patrone (Panzerbrechend) +item.ammo_standard.bmg50_du.name=.50 BMG Patrone (Urangeschoss) +item.ammo_standard.bmg50_equestrian.name=.50 BMG Zerstörer +item.ammo_standard.bmg50_fmj.name=.50 BMG Patrone (Vollmantelgeschoss) +item.ammo_standard.bmg50_jhp.name=.50 BMG Patrone (Hohlspitz) +item.ammo_standard.bmg50_sp.name=.50 BMG Patrone (Teilmantelgeschoss) +item.ammo_standard.flame_diesel.name=Dieseltank +item.ammo_standard.g12.name=Kaliber 12 Schrot +item.ammo_standard.g12_anthrax.name=Kaliber 12 Anthrax +item.ammo_standard.g12_bp.name=Kaliber 12 Schwarzpulver +item.ammo_standard.g12_bp_magnum.name=Kaliber 12 Schwarzpulver Magnum +item.ammo_standard.g12_bp_slug.name=Kaliber 12 Schwarzpulver Laufgeschoss +item.ammo_standard.g12_equestrian.name=Kaliber 12 Gleisnägel +item.ammo_standard.g12_explosive.name=Kaliber 12 Explosivgeschoss +item.ammo_standard.g12_flechette.name=Kaliber 12 Flechett +item.ammo_standard.g12_magnum.name=Kaliber 12 Magnum +item.ammo_standard.g12_phosphorus.name=Kaliber 12 Phosphor +item.ammo_standard.g12_slug.name=Kaliber 12 Laufgeschoss +item.ammo_standard.g40.name=40mm Granate +item.ammo_standard.g40_flare.name=Signalpatrone item.ammo_standard.m357_ap.name=.357 Magnumkugel (Panzerbrechend) item.ammo_standard.m357_express.name=.357 Magnumkugel (VMG Express) item.ammo_standard.m357_fmj.name=.357 Magnumkugel (Vollmantelgeschoss) item.ammo_standard.m357_jhp.name=.357 Magnumkugel (Hohlspitz) item.ammo_standard.m357_sp.name=.357 Magnumkugel (Teilmantelgeschoss) item.ammo_standard.m44_ap.name=.44 Magnumkugel (Panzerbrechend) +item.ammo_standard.m44_equestrian.name=.44 Magnum Schädelsprenger item.ammo_standard.m44_express.name=.44 Magnumkugel (VMG Express) item.ammo_standard.m44_fmj.name=.44 Magnumkugel (Vollmantelgeschoss) item.ammo_standard.m44_jhp.name=.44 Magnumkugel (Hohlspitz) item.ammo_standard.m44_sp.name=.44 Magnumkugel (Teilmantelgeschoss) +item.ammo_standard.p22_ap.name=.22 lfB Patrone (Panzerbrechend) +item.ammo_standard.p22_fmj.name=.22 lfB Patrone (Vollmantelgeschoss) +item.ammo_standard.p22_jhp.name=.22 lfB Patrone (Hohlspitz) +item.ammo_standard.p22_sp.name=.22 lfB Patrone (Teilmantelgeschoss) +item.ammo_standard.p9_ap.name=9mm Patrone (Panzerbrechend) +item.ammo_standard.p9_fmj.name=9mm Patrone (Vollmantelgeschoss) +item.ammo_standard.p9_jhp.name=9mm Patrone (Hohlspitz) +item.ammo_standard.p9_sp.name=.9mm Patrone (Teilmantelgeschoss) +item.ammo_standard.r556_ap.name=5,56mm Patrone (Panzerbrechend) +item.ammo_standard.r556_fmj.name=5,56mm Patrone (Vollmantelgeschoss) +item.ammo_standard.r556_jhp.name=5,56mm Patrone (Hohlspitz) +item.ammo_standard.r556_sp.name=5,56mm Patrone (Teilmantelgeschoss) +item.ammo_standard.r762_ap.name=7,62mm Patrone (Panzerbrechend) +item.ammo_standard.r762_du.name=7,62mm Patrone (Urangeschoss) +item.ammo_standard.r762_fmj.name=7,62mm Patrone (Vollmantelgeschoss) +item.ammo_standard.r762_jhp.name=7,62mm Patrone (Hohlspitz) +item.ammo_standard.r762_sp.name=7,62mm Patrone (Teilmantelgeschoss) +item.ammo_standard.rocket_he.name=Explosivrakete +item.ammo_standard.rocket_heat.name=Hohlladungsrakete item.ammo_standard.stone.name=Kugel und Pulver item.ammo_standard.stone_ap.name=Feuerstein und Pulver item.ammo_standard.stone_iron.name=Eisenkugel und Pulver @@ -2358,6 +2398,7 @@ item.insert_xsapi.name=XSAPI-Einlage item.insert_yharonite.name=Yharoniteinlage item.item_secret.canister.name=Komposit SB-26 item.item_secret.controller.name=Proprietäre Steuereinheit +item.item_secret.selenium_steel.name=Selen-Stahl item.iv_blood.name=Blutbeutel item.iv_empty.name=Infusionsbeutel item.iv_xp.name=Erfahrungsbeutel diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index 43d1aac1c..543b8e67e 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -1873,16 +1873,56 @@ item.ammo_shell_apfsds_du.name=240mm APFSDS-DU item.ammo_shell_apfsds_t.name=240mm APFSDS-T item.ammo_shell_explosive.name=240mm HE Shell item.ammo_shell_w9.name=240mm W9 Nuclear Shell +item.ammo_standard.bmg50_ap.name=.50 BMG Round (Armor Piercing) +item.ammo_standard.bmg50_du.name=.50 BMG Round (Depleted Uranium) +item.ammo_standard.bmg50_equestrian.name=.50 BMG Demolisher +item.ammo_standard.bmg50_fmj.name=.50 BMG Round (Full Metal Jacket) +item.ammo_standard.bmg50_jhp.name=.50 BMG Round (Jacketed Hollow Point) +item.ammo_standard.bmg50_sp.name=.50 BMG Round (Soft Point) +item.ammo_standard.flame_diesel.name=Diesel Tank +item.ammo_standard.g12.name=12 Gauge Buckshot +item.ammo_standard.g12_anthrax.name=12 Gauge Anthrax Shell +item.ammo_standard.g12_bp.name=12 Gauge Black Powder Buckshot +item.ammo_standard.g12_bp_magnum.name=12 Gauge Black Powder Magnum Shell +item.ammo_standard.g12_bp_slug.name=12 Gauge Black Powder Slug +item.ammo_standard.g12_equestrian.name=12 Gauge Railway Spike Shot +item.ammo_standard.g12_explosive.name=12 Gauge Explosive Shell +item.ammo_standard.g12_flechette.name=12 Gauge Flechette Shell +item.ammo_standard.g12_magnum.name=12 Gauge Magnum Shell +item.ammo_standard.g12_phosphorus.name=12 Gauge Phosphorus Shell +item.ammo_standard.g12_slug.name=12 Gauge Slug +item.ammo_standard.g40.name=40mm Grenade +item.ammo_standard.g40_flare.name=Signal Flare item.ammo_standard.m357_ap.name=.357 Magnum Round (Armor Piercing) item.ammo_standard.m357_express.name=.357 Magnum Round (FMJ Express) item.ammo_standard.m357_fmj.name=.357 Magnum Round (Full Metal Jacket) item.ammo_standard.m357_jhp.name=.357 Magnum Round (Jacketed Hollow Point) item.ammo_standard.m357_sp.name=.357 Magnum Round (Soft Point) item.ammo_standard.m44_ap.name=.44 Magnum Round (Armor Piercing) +item.ammo_standard.m44_equestrian.name=.44 Magnum Head-Exploder item.ammo_standard.m44_express.name=.44 Magnum Round (FMJ Express) item.ammo_standard.m44_fmj.name=.44 Magnum Round (Full Metal Jacket) item.ammo_standard.m44_jhp.name=.44 Magnum Round (Jacketed Hollow Point) item.ammo_standard.m44_sp.name=.44 Magnum Round (Soft Point) +item.ammo_standard.p22_ap.name=.22 LR Round (Armor Piercing) +item.ammo_standard.p22_fmj.name=.22 LR Round (Full Metal Jacket) +item.ammo_standard.p22_jhp.name=.22 LR Round (Jacketed Hollow Point) +item.ammo_standard.p22_sp.name=.22 LR Round (Soft Point) +item.ammo_standard.p9_ap.name=9mm Round (Armor Piercing) +item.ammo_standard.p9_fmj.name=9mm Round (Full Metal Jacket) +item.ammo_standard.p9_jhp.name=9mm Round (Jacketed Hollow Point) +item.ammo_standard.p9_sp.name=.9mm Round (Soft Point) +item.ammo_standard.r556_ap.name=5.56mm Round (Armor Piercing) +item.ammo_standard.r556_fmj.name=5.56mm Round (Full Metal Jacket) +item.ammo_standard.r556_jhp.name=5.56mm Round (Jacketed Hollow Point) +item.ammo_standard.r556_sp.name=5.56mm Round (Soft Point) +item.ammo_standard.r762_ap.name=7.62mm Round (Armor Piercing) +item.ammo_standard.r762_du.name=7.62mm Round (Depleted Uranium) +item.ammo_standard.r762_fmj.name=7.62mm Round (Full Metal Jacket) +item.ammo_standard.r762_jhp.name=7.62mm Round (Jacketed Hollow Point) +item.ammo_standard.r762_sp.name=7.62mm Round (Soft Point) +item.ammo_standard.rocket_he.name=Rocket, High-Explosive +item.ammo_standard.rocket_heat.name=Rocket, Shaped Charge item.ammo_standard.stone.name=Ball and Powder item.ammo_standard.stone_ap.name=Flint and Powder item.ammo_standard.stone_iron.name=Iron Ball and Powder @@ -3183,6 +3223,7 @@ item.insert_xsapi.name=XSAPI Insert item.insert_yharonite.name=Yharonite Insert item.item_secret.canister.name=Composition SB-26 item.item_secret.controller.name=Proprietary Control Unit +item.item_secret.selenium_steel.name=Selenium Steel item.iv_blood.name=Blood Bag item.iv_empty.name=IV Bag item.iv_xp.name=Experience Bag diff --git a/src/main/resources/assets/hbm/textures/items/ammo.png b/src/main/resources/assets/hbm/textures/items/ammo.png index 088300636baa462d8e1da600b5db5a51def2fd16..f8d52e3b784f0aedfd2127f34a28a18e906e9e40 100644 GIT binary patch literal 13234 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 X^KXb?+);4)00000NkvXXu0mjfaQTpD literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.g12_equestrian.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.g12_equestrian.png new file mode 100644 index 0000000000000000000000000000000000000000..3d060b001fdbd5ead73476c29248c9353530cfaf GIT binary patch literal 318 zcmV-E0m1%>P)NklEGz{}PKQY4v~l5@8>FMo2_n*y6F`T= zQ7Dp{D_A5FL2g$T-K5&cWaETIeBJzfZ)ZmXm(~=-r$1;13#}zmibK=zXiU&$YAbBN z94SRVj)|0Fq4i0Vgw{OJ8i0LWdqKX(w2(+C0QzyvzOMiM&QakUh?De%gg+BA2tJJA z&@{mDPVV#4*@*+_f-J8`6nW`Du6_ep$kZ4a057`7(|E%0=GK07*qoM6N<$f-3)rpa1{> literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/ammo_standard.m44_equestrian.png b/src/main/resources/assets/hbm/textures/items/ammo_standard.m44_equestrian.png new file mode 100644 index 0000000000000000000000000000000000000000..44cb11c96d0d54ad400d461c93bdd96a27d178e2 GIT binary patch literal 359 zcmV-t0hs=YP)Hp2P8D=@aSMoZ(W&6# z8>oYmOCP`&a1awnS2Ni;v_nIYI!Kp-Tqh;kBsAjL?g!tGbK$^$j_>=jZb!+NHBDpZ zJ`zKm;&xwcUOq9{@Vb4g~44aTDh*KY=%EdXRU2`e{I z^N;ap!g=q5_DR5IW9uufM81Je|6O^Uu1L=j^oJ<`r`;QHTb0O6Xy}&o9D%7@n5!21 z_h;O>E#f4k2vL6rgDh3z=TLf%0N~;1ie|-kW`H6Dpt*Ngh!g^KkW!!wiIWh|7W9Xy z9AxQS$A+O>^7tT-hHlB*i;gsOtM0egW`1A3^{C002ovPDHLk FV1marnjioG literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/items/item_secret.selenium_steel.png b/src/main/resources/assets/hbm/textures/items/item_secret.selenium_steel.png new file mode 100644 index 0000000000000000000000000000000000000000..ae91dcdaee173626612f7528e3fab3623970142a GIT binary patch literal 313 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf(dtcO+8q}RJyda_!yF^aLVdAtA``M{o; znYnrPRP)2@lA{An6s=`tHy9Ww97?#kjg`m1Iq%N?u7xj8ShD>7*v;Nkz$_u5kf@-} zXm|u@)H=b);3?rubN1%kZu;LJZ-5|rpX}U1NRI!>pUqXS|DY0SFsuWd`f9{p4 z6GYe~GNZ$s9{z8dc9p02n(xt-oXfc<@E%;=xr%{7=V{S-p0}q#erND>^>bP0l+XkK D`mt>` literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/maresleg_broken.png b/src/main/resources/assets/hbm/textures/models/weapons/maresleg_broken.png new file mode 100644 index 0000000000000000000000000000000000000000..0e895de193c661c337507a97d71c94f749b934e1 GIT binary patch literal 9851 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