From 32ab93f146bfa3ec5031582086445f7482dfb59e Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 5 Sep 2024 16:59:14 +0200 Subject: [PATCH] gun crap --- src/main/java/com/hbm/items/ModItems.java | 14 ++-- .../hbm/items/weapon/sedna/BulletConfig.java | 6 +- .../com/hbm/items/weapon/sedna/GunConfig.java | 67 ++++++++++++------ .../hbm/items/weapon/sedna/GunFactory.java | 25 +++++++ .../hbm/items/weapon/sedna/ItemGunBase.java | 25 ++++--- .../com/hbm/items/weapon/sedna/Receiver.java | 16 +++-- .../items/weapon/sedna/mags/IMagazine.java | 3 +- .../sedna/mags/MagazineRevolverDrum.java | 28 ++++++++ .../sedna/mags/MagazineStandardBase.java | 2 + .../hbm/textures/models/weapons/debug_gun.png | Bin 0 -> 4269 bytes .../hbm/textures/models/weapons/lil_pip.png | Bin 4498 -> 0 bytes 11 files changed, 141 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/hbm/items/weapon/sedna/GunFactory.java create mode 100644 src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java create mode 100644 src/main/resources/assets/hbm/textures/models/weapons/debug_gun.png delete mode 100644 src/main/resources/assets/hbm/textures/models/weapons/lil_pip.png diff --git a/src/main/java/com/hbm/items/ModItems.java b/src/main/java/com/hbm/items/ModItems.java index 7c7a2eb53..d25b15108 100644 --- a/src/main/java/com/hbm/items/ModItems.java +++ b/src/main/java/com/hbm/items/ModItems.java @@ -36,6 +36,7 @@ import com.hbm.items.weapon.ItemCustomMissilePart.*; import com.hbm.items.weapon.ItemMissile.MissileFormFactor; import com.hbm.items.weapon.ItemMissile.MissileFuel; import com.hbm.items.weapon.ItemMissile.MissileTier; +import com.hbm.items.weapon.sedna.GunFactory; import com.hbm.lib.RefStrings; import com.hbm.main.MainRegistry; import com.hbm.potion.HbmPotion; @@ -1608,11 +1609,9 @@ public class ModItems { public static Item gun_m2; public static Item gun_lunatic_marksman; public static Item gun_uac_pistol; - - // We'll figure this part out later - //public static Item gun_llr, gun_mlr, gun_hlr, gun_twr, gun_lunatic, gun_lunatic_shotty; - //public static Item gun_uac_pistol, gun_uac_dmr, gun_uac_carbine, gun_uac_lmg; - //public static Item gun_benelli, gun_benelli_mod, gun_g36, spear_bishamonten, pagoda; + + public static Item gun_debug; + public static Item ammo_debug; public static Item crucible; @@ -5458,6 +5457,8 @@ public class ModItems { mysteryshovel = new ItemMS().setUnlocalizedName("mysteryshovel").setFull3D().setMaxStackSize(1).setTextureName(RefStrings.MODID + ":cursed_shovel"); memory = new ItemBattery(Long.MAX_VALUE / 100L, 100000000000000L, 100000000000000L).setUnlocalizedName("memory").setMaxStackSize(1).setTextureName(RefStrings.MODID + ":mo8_anim"); + GunFactory.init(); + FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.mud_fluid, 1000), new ItemStack(ModItems.bucket_mud), new ItemStack(Items.bucket)); FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.acid_fluid, 1000), new ItemStack(ModItems.bucket_acid), new ItemStack(Items.bucket)); FluidContainerRegistry.registerFluidContainer(new FluidStack(ModBlocks.toxic_fluid, 1000), new ItemStack(ModItems.bucket_toxic), new ItemStack(Items.bucket)); @@ -6995,6 +6996,9 @@ public class ModItems { GameRegistry.registerItem(gun_glass_cannon, gun_glass_cannon.getUnlocalizedName()); GameRegistry.registerItem(gun_lunatic_marksman, gun_lunatic_marksman.getUnlocalizedName()); + GameRegistry.registerItem(gun_debug, gun_debug.getUnlocalizedName()); + GameRegistry.registerItem(ammo_debug, ammo_debug.getUnlocalizedName()); + //Ammo GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName()); GameRegistry.registerItem(gun_xvl1456_ammo, gun_xvl1456_ammo.getUnlocalizedName()); diff --git a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java index ce49ad85d..9cc858b8b 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/BulletConfig.java @@ -5,6 +5,8 @@ import java.util.List; import com.hbm.inventory.RecipesCommon.ComparableStack; +import net.minecraft.item.Item; + public class BulletConfig { public static List configs = new ArrayList(); @@ -12,7 +14,7 @@ public class BulletConfig { public final int id; public ComparableStack ammo; - public int ammoCount = 1; + public int ammoReloadCount = 1; public float velocity = 5F; public float spread = 0F; public float wear = 1F; @@ -29,4 +31,6 @@ public class BulletConfig { this.id = configs.size(); configs.add(this); } + + public BulletConfig setItem(Item ammo) { this.ammo = new ComparableStack(ammo); return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java index 60abf5931..91bdffc24 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java +++ b/src/main/java/com/hbm/items/weapon/sedna/GunConfig.java @@ -8,30 +8,55 @@ import net.minecraft.item.ItemStack; public class GunConfig { + /* FIELDS */ + /** List of receivers used by the gun, primary and secondary are usually indices 0 and 1 respectively, if applicable */ - public Receiver[] receivers; - public float durability; - public int drawDuration = 0; - public Crosshair crosshair; - /** Lambda function that determines what receiver the gun should use when a keybind is hit */ - //public Function, Receiver> receiverDecider; + protected Receiver[] receivers; + protected float durability; + protected int drawDuration = 0; + protected Crosshair crosshair; /** Lambda functions for clicking shit */ - public BiConsumer onPressPrimary; - public BiConsumer onPressSecondary; - public BiConsumer onPressTertiary; - public BiConsumer onPressReload; + protected BiConsumer onPressPrimary; + protected BiConsumer onPressSecondary; + protected BiConsumer onPressTertiary; + protected BiConsumer onPressReload; /** Lambda functions for releasing the aforementioned shit */ - public BiConsumer onReleasePrimary; - public BiConsumer onReleaseSecondary; - public BiConsumer onReleaseTertiary; - public BiConsumer onReleaseReload; + protected BiConsumer onReleasePrimary; + protected BiConsumer onReleaseSecondary; + protected BiConsumer onReleaseTertiary; + protected BiConsumer onReleaseReload; - public float getDurability(ItemStack stack) { - return durability; - } + /* GETTERS */ + + public Receiver[] getReceivers(ItemStack stack) { return receivers; } + public float getDurability(ItemStack stack) { return durability; } + public int getDrawDuration(ItemStack stack) { return drawDuration; } + public Crosshair getCrosshair(ItemStack stack) { return crosshair; } + + public BiConsumer getPressPrimary(ItemStack stack) { return this.onPressPrimary; } + public BiConsumer getPressSecondary(ItemStack stack) { return this.onPressSecondary; } + public BiConsumer getPressTertiary(ItemStack stack) { return this.onPressTertiary; } + public BiConsumer getPressReload(ItemStack stack) { return this.onPressReload; } + + public BiConsumer getReleasePrimary(ItemStack stack) { return this.onReleasePrimary; } + public BiConsumer getReleaseSecondary(ItemStack stack) { return this.onReleaseSecondary; } + public BiConsumer getReleaseTertiary(ItemStack stack) { return this.onReleaseTertiary; } + public BiConsumer getReleaseReload(ItemStack stack) { return this.onReleaseReload; } - public GunConfig setReceivers(Receiver... receivers) { - this.receivers = receivers; - return this; - } + /* SETTERS */ + + public GunConfig rec(Receiver... receivers) { this.receivers = receivers; return this; } + public GunConfig dura(float dura) { this.durability = dura; return this; } + public GunConfig draw(int draw) { this.drawDuration = draw; return this; } + public GunConfig crosshair(Crosshair crosshair) { this.crosshair = crosshair; return this; } + + public GunConfig pp(BiConsumer lambda) { this.onPressPrimary = lambda; return this; } + public GunConfig ps(BiConsumer lambda) { this.onPressSecondary = lambda; return this; } + public GunConfig pt(BiConsumer lambda) { this.onPressTertiary = lambda; return this; } + public GunConfig pr(BiConsumer lambda) { this.onPressReload = lambda; return this; } + + public GunConfig rp(BiConsumer lambda) { this.onReleasePrimary = lambda; return this; } + public GunConfig rs(BiConsumer lambda) { this.onReleaseSecondary = lambda; return this; } + public GunConfig rt(BiConsumer lambda) { this.onReleaseTertiary = lambda; return this; } + public GunConfig rr(BiConsumer lambda) { this.onReleaseReload = lambda; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/GunFactory.java b/src/main/java/com/hbm/items/weapon/sedna/GunFactory.java new file mode 100644 index 000000000..d27913133 --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/GunFactory.java @@ -0,0 +1,25 @@ +package com.hbm.items.weapon.sedna; + +import com.hbm.items.ModItems; +import com.hbm.items.weapon.sedna.mags.MagazineRevolverDrum; +import com.hbm.lib.RefStrings; +import com.hbm.main.MainRegistry; +import com.hbm.render.util.RenderScreenOverlay.Crosshair; + +import net.minecraft.item.Item; + +public class GunFactory { + + public static void init() { + + ModItems.ammo_debug = new Item().setUnlocalizedName("ammo_debug").setTextureName(RefStrings.MODID + ":ammo_45"); + + BulletConfig ammo_debug = new BulletConfig().setItem(ModItems.ammo_debug); + + ModItems.gun_debug = new ItemGunBase(new GunConfig() + .dura(600).draw(15).crosshair(Crosshair.L_CLASSIC) + .rec(new Receiver() + .dmg(10F).delay(10).mag(new MagazineRevolverDrum(0, 6).addConfigs(ammo_debug))) + ).setUnlocalizedName("gun_debug").setCreativeTab(MainRegistry.weaponTab).setTextureName(RefStrings.MODID + ":gun_darter"); + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java index 38f0a4e62..1a82c51ba 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBase.java @@ -27,6 +27,11 @@ public class ItemGunBase extends Item implements IKeybindReceiver { public GunConfig getConfig(ItemStack stack) { return config_DNA; } + + public ItemGunBase(GunConfig cfg) { + this.setMaxStackSize(1); + this.config_DNA = cfg; + } public static enum GunState { DRAWING, //initial delay after selecting @@ -37,18 +42,18 @@ public class ItemGunBase extends Item implements IKeybindReceiver { } @Override - public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean state) { + public void handleKeybind(EntityPlayer player, ItemStack stack, EnumKeybind keybind, boolean newState) { GunConfig config = getConfig(stack); - if(keybind == EnumKeybind.GUN_PRIMARY && state && !getPrimary(stack)) { if(config.onPressPrimary != null) config.onPressPrimary.accept(stack, config); return; } - if(keybind == EnumKeybind.GUN_PRIMARY && !state && getPrimary(stack)) { if(config.onReleasePrimary != null) config.onReleasePrimary.accept(stack, config); return; } - if(keybind == EnumKeybind.GUN_SECONDARY && state && !getSecondary(stack)) { if(config.onPressSecondary != null) config.onPressSecondary.accept(stack, config); return; } - if(keybind == EnumKeybind.GUN_SECONDARY && !state && getSecondary(stack)) { if(config.onReleaseSecondary != null) config.onReleaseSecondary.accept(stack, config); return; } - if(keybind == EnumKeybind.GUN_TERTIARY && state && !getTertiary(stack)) { if(config.onPressTertiary != null) config.onPressTertiary.accept(stack, config); return; } - if(keybind == EnumKeybind.GUN_TERTIARY && !state && getTertiary(stack)) { if(config.onReleaseTertiary != null) config.onReleaseTertiary.accept(stack, config); return; } - if(keybind == EnumKeybind.RELOAD && state && !getReloadKey(stack)) { if(config.onPressReload != null) config.onPressReload.accept(stack, config); return; } - if(keybind == EnumKeybind.RELOAD && !state && getReloadKey(stack)) { if(config.onReleaseReload != null) config.onReleaseReload.accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_PRIMARY && newState && !getPrimary(stack)) { if(config.getPressPrimary(stack) != null) config.getPressPrimary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_PRIMARY && !newState && getPrimary(stack)) { if(config.getReleasePrimary(stack) != null) config.getReleasePrimary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_SECONDARY && newState && !getSecondary(stack)) { if(config.getPressSecondary(stack) != null) config.getPressSecondary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_SECONDARY && !newState && getSecondary(stack)) { if(config.getReleaseSecondary(stack) != null) config.getReleaseSecondary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_TERTIARY && newState && !getTertiary(stack)) { if(config.getPressTertiary(stack) != null) config.getPressTertiary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.GUN_TERTIARY && !newState && getTertiary(stack)) { if(config.getReleaseTertiary(stack) != null) config.getReleaseTertiary(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.RELOAD && newState && !getReloadKey(stack)) { if(config.getPressReload(stack) != null) config.getPressReload(stack).accept(stack, config); return; } + if(keybind == EnumKeybind.RELOAD && !newState && getReloadKey(stack)) { if(config.getReleaseReload(stack) != null) config.getReleaseReload(stack).accept(stack, config); return; } } @Override @@ -59,7 +64,7 @@ public class ItemGunBase extends Item implements IKeybindReceiver { if(!isHeld) { this.setState(stack, GunState.DRAWING); - this.setTimer(stack, config.drawDuration); + this.setTimer(stack, config.getDrawDuration(stack)); return; } diff --git a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java index e09f0ec22..fbc3ec079 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java +++ b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java @@ -10,13 +10,15 @@ public class Receiver { protected int roundsPerCycle = 1; protected boolean refireOnHold = false; protected int burstSize = 1; - protected int delayAfterBurst; + protected int delayAfterBurst = 0; protected CasingEjector ejector = null; - protected IMagazine magazine; - - public Receiver setMag(IMagazine magazine) { - this.magazine = magazine; - return this; - } + + public Receiver dmg(float dmg) { this.baseDamage = dmg; return this; } + public Receiver delay(int delay) { this.delayAfterFire = delay; return this; } + public Receiver rounds(int rounds) { this.roundsPerCycle = rounds; return this; } + public Receiver auto(boolean auto) { this.refireOnHold = auto; return this; } + public Receiver burst(int size, int delay) { this.burstSize = size; this.delayAfterBurst = delay; return this; } + public Receiver burst(CasingEjector ejector) { this.ejector = ejector; return this; } + public Receiver mag(IMagazine magazine) { this.magazine = magazine; return this; } } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java index 1a0aeaeec..27f659513 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/IMagazine.java @@ -1,5 +1,6 @@ package com.hbm.items.weapon.sedna.mags; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; public interface IMagazine { @@ -13,7 +14,7 @@ public interface IMagazine { /** Sets the mag's ammo level */ public void setAmount(ItemStack stack, int amount); /** The action done at the end of one reload cycle, either loading one shell or replacing the whole mag */ - public void reloadAction(ItemStack stack); + public void reloadAction(ItemStack stack, EntityPlayer player); /** The stack that should be displayed for the ammo HUD */ public ItemStack getIcon(ItemStack stack); } diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java new file mode 100644 index 000000000..fc9a7f6ae --- /dev/null +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineRevolverDrum.java @@ -0,0 +1,28 @@ +package com.hbm.items.weapon.sedna.mags; + +import com.hbm.items.weapon.sedna.BulletConfig; + +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; + +/** Uses individual bullets which are loaded all at once */ +public class MagazineRevolverDrum extends MagazineStandardBase { + + public MagazineRevolverDrum(int index, int capacity) { + super(index, capacity); + } + + @Override + public void reloadAction(ItemStack stack, EntityPlayer player) { + + } + + @Override + public ItemStack getIcon(ItemStack stack) { + Object o = this.getType(stack); + if(o instanceof BulletConfig) { + return ((BulletConfig) o).ammo.toStack(); + } + return null; + } +} diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java index 09875ffe5..b066e2f91 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineStandardBase.java @@ -27,6 +27,8 @@ public abstract class MagazineStandardBase implements IMagazine { this.index = index; this.capacity = capacity; } + + public MagazineStandardBase addConfigs(BulletConfig... cfgs) { for(BulletConfig cfg : cfgs) acceptedBullets.add(cfg); return this; } @Override public Object getType(ItemStack stack) { diff --git a/src/main/resources/assets/hbm/textures/models/weapons/debug_gun.png b/src/main/resources/assets/hbm/textures/models/weapons/debug_gun.png new file mode 100644 index 0000000000000000000000000000000000000000..49b083ca93ce5336ae48c8025ab8fb8941f3c248 GIT binary patch literal 4269 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/assets/hbm/textures/models/weapons/lil_pip.png b/src/main/resources/assets/hbm/textures/models/weapons/lil_pip.png deleted file mode 100644 index 7709cf279f7b811835c6c58a0a5625c1744e76e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4498 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