From f7e804094c4c4cf45df4228e22cbbb0a88c1e64a Mon Sep 17 00:00:00 2001 From: Boblet Date: Thu, 26 Sep 2024 14:05:48 +0200 Subject: [PATCH] it's recoil! --- src/main/java/com/hbm/blocks/ModBlocks.java | 2 - .../blocks/generic/BlockScaffoldDynamic.java | 270 ------------------ .../hbm/items/weapon/sedna/ItemGunBaseNT.java | 5 + .../com/hbm/items/weapon/sedna/Receiver.java | 4 + .../hbm/items/weapon/sedna/factory/Lego.java | 6 + .../sedna/factory/XFactoryBlackPowder.java | 2 +- .../sedna/mags/MagazineSingleTypeBase.java | 4 +- src/main/java/com/hbm/main/ClientProxy.java | 1 - .../com/hbm/main/ModEventHandlerClient.java | 30 +- .../packet/toclient/GunAnimationPacket.java | 33 ++- .../render/block/RenderScaffoldDynamic.java | 111 ------- .../java/com/hbm/tileentity/TileMappings.java | 2 - 12 files changed, 56 insertions(+), 414 deletions(-) delete mode 100644 src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java delete mode 100644 src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 9334145bd..5829f854d 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -412,7 +412,6 @@ public class ModBlocks { public static Block steel_scaffold; public static Block steel_grate; public static Block steel_grate_wide; - public static Block scaffold_dynamic; public static Block deco_pipe; public static Block deco_pipe_rusted; @@ -1586,7 +1585,6 @@ public class ModBlocks { steel_scaffold = new BlockScaffold().setBlockName("steel_scaffold").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":deco_steel_orig"); steel_grate = new BlockGrate(Material.iron).setBlockName("steel_grate").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F); steel_grate_wide = new BlockGrate(Material.iron).setBlockName("steel_grate_wide").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F); - scaffold_dynamic = new BlockScaffoldDynamic().setBlockName("scaffold_dynamic").setCreativeTab(MainRegistry.blockTab).setHardness(5.0F).setResistance(15.0F).setBlockTextureName(RefStrings.MODID + ":block_steel"); deco_pipe = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side", 0).setBlockName("deco_pipe").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top"); deco_pipe_rusted = new BlockPipe(Material.iron, RefStrings.MODID + ":pipe_side_rusty", 0).setBlockName("deco_pipe_rusted").setStepSound(ModSoundTypes.grate).setCreativeTab(MainRegistry.blockTab).setHardness(2.0F).setResistance(5.0F).setBlockTextureName(RefStrings.MODID + ":pipe_top_rusty"); diff --git a/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java b/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java deleted file mode 100644 index 62a42594c..000000000 --- a/src/main/java/com/hbm/blocks/generic/BlockScaffoldDynamic.java +++ /dev/null @@ -1,270 +0,0 @@ -package com.hbm.blocks.generic; - -import com.hbm.lib.Library; -import com.hbm.lib.RefStrings; -import com.hbm.util.I18nUtil; - -import static com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic.*; - -import java.util.ArrayList; -import java.util.List; - -import com.hbm.blocks.ILookOverlay; -import com.hbm.items.ModItems; -import com.hbm.items.tool.ItemBlowtorch; - -import api.hbm.block.IToolable; -import cpw.mods.fml.client.registry.RenderingRegistry; -import cpw.mods.fml.relauncher.Side; -import cpw.mods.fml.relauncher.SideOnly; -import net.minecraft.block.BlockContainer; -import net.minecraft.block.material.Material; -import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.texture.IIconRegister; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.entity.player.EntityPlayer; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.NetworkManager; -import net.minecraft.network.Packet; -import net.minecraft.network.play.server.S35PacketUpdateTileEntity; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.EnumChatFormatting; -import net.minecraft.util.IIcon; -import net.minecraft.util.MovingObjectPosition; -import net.minecraft.world.World; -import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; - -public class BlockScaffoldDynamic extends BlockContainer implements IToolable, ILookOverlay { - - @SideOnly(Side.CLIENT) public IIcon iconPoleTop; - @SideOnly(Side.CLIENT) public IIcon iconPoleSide; - @SideOnly(Side.CLIENT) public IIcon iconGrateTop; - @SideOnly(Side.CLIENT) public IIcon iconGrateSide; - @SideOnly(Side.CLIENT) public IIcon iconBarTop; - @SideOnly(Side.CLIENT) public IIcon iconBarSide; - - public static int renderMode; - - public BlockScaffoldDynamic() { - super(Material.iron); - } - - public static int renderIDScaffold = RenderingRegistry.getNextAvailableRenderId(); - @Override public int getRenderType(){ return renderIDScaffold; } - @Override public boolean isOpaqueCube() { return false; } - @Override public boolean renderAsNormalBlock() { return false; } - - @Override - public TileEntity createNewTileEntity(World world, int meta) { - return new TileEntityScaffoldDynamic(); - } - - @SideOnly(Side.CLIENT) - public IIcon getIcon(int side, int meta) { - if(renderMode == 0) return side == 0 || side == 1 ? iconPoleTop : iconPoleSide; - if(renderMode == 1) return side == 0 || side == 1 ? iconGrateTop : iconGrateSide; - if(renderMode == 2) return side == 0 || side == 1 ? iconBarTop : iconBarSide; - return this.blockIcon; - } - - @Override - @SideOnly(Side.CLIENT) - public void registerBlockIcons(IIconRegister reg) { - super.registerBlockIcons(reg); - this.iconPoleTop = reg.registerIcon(RefStrings.MODID + ":scaffold_pole_top"); - this.iconPoleSide = reg.registerIcon(RefStrings.MODID + ":scaffold_pole_side"); - this.iconGrateTop = reg.registerIcon(RefStrings.MODID + ":scaffold_grate_top"); - this.iconGrateSide = reg.registerIcon(RefStrings.MODID + ":scaffold_grate_side"); - this.iconBarTop = reg.registerIcon(RefStrings.MODID + ":scaffold_bar_top"); - this.iconBarSide = reg.registerIcon(RefStrings.MODID + ":scaffold_bar_side"); - } - - @Override - public boolean onScrew(World world, EntityPlayer player, int x, int y, int z, int side, float fX, float fY, float fZ, ToolType tool) { - - TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); - if(tool == ToolType.SCREWDRIVER) { - tile.locked = !tile.locked; - tile.markDirty(); - world.markBlockForUpdate(x, y, z); - return true; - } - - if(tool != ToolType.TORCH) return false; - - - int part = getPartFromCoord(fX, fY, fZ); - - if(part != 0 && tile.canToggle(part)) { - tile.toggle(part); - tile.markDirty(); - world.markBlockForUpdate(x, y, z); - return true; - } - return false; - } - - public static int getPartFromCoord(float fX, float fY, float fZ) { - if(fX < 0.25 && fZ < 0.25) return POLE_NX_NZ; - if(fX > 0.75 && fZ < 0.25) return POLE_PX_NZ; - if(fX > 0.75 && fZ > 0.75) return POLE_PX_PZ; - if(fX < 0.25 && fZ > 0.75) return POLE_NX_PZ; - - if(fY == 0 && fX < 0.25) return BAR_LOWER_NEG_X; - if(fY == 0 && fX > 0.75) return BAR_LOWER_POS_X; - if(fY == 0 && fZ < 0.25) return BAR_LOWER_NEG_Z; - if(fY == 0 && fZ > 0.75) return BAR_LOWER_POS_Z; - if(fY == 1 && fX < 0.25) return BAR_UPPER_NEG_X; - if(fY == 1 && fX > 0.75) return BAR_UPPER_POS_X; - if(fY == 1 && fZ < 0.25) return BAR_UPPER_NEG_Z; - if(fY == 1 && fZ > 0.75) return BAR_UPPER_POS_Z; - - if(fY < 0.125) return GRATE_LOWER; - if(fY > 0.875) return GRATE_UPPER; - - if(fX == 0 && fY < 0.5) return BAR_LOWER_NEG_X; - if(fX == 1 && fY < 0.5) return BAR_LOWER_POS_X; - if(fZ == 0 && fY < 0.5) return BAR_LOWER_NEG_Z; - if(fZ == 1 && fY < 0.5) return BAR_LOWER_POS_Z; - if(fX == 0 && fY > 0.5) return BAR_UPPER_NEG_X; - if(fX == 1 && fY > 0.5) return BAR_UPPER_POS_X; - if(fZ == 0 && fY > 0.5) return BAR_UPPER_NEG_Z; - if(fZ == 1 && fY > 0.5) return BAR_UPPER_POS_Z; - - return 0; - } - - //ttoo lazy to make an itemblock just to provide this in the one method that needs it - public static float lastFX; - public static float lastFY; - public static float lastFZ; - - @Override - public int onBlockPlaced(World world, int x, int y, int z, int side, float fX, float fY, float fZ, int meta) { - lastFX = fX; - lastFY = fY; - lastFZ = fZ; - - if(side == Library.POS_X.ordinal()) lastFX = 0; - if(side == Library.NEG_X.ordinal()) lastFX = 1; - if(side == Library.POS_Z.ordinal()) lastFZ = 0; - if(side == Library.NEG_Z.ordinal()) lastFZ = 1; - - return side; - } - - @Override - public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase player, ItemStack stack) { - TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); - - // DEFAUL: POLES - if(stack.getItemDamage() == 0) { - if(lastFX < 0.5 && lastFZ < 0.5) tile.toggle(tile.POLE_NX_NZ); - if(lastFX >= 0.5 && lastFZ < 0.5) tile.toggle(tile.POLE_PX_NZ); - if(lastFX < 0.5 && lastFZ >= 0.5) tile.toggle(tile.POLE_NX_PZ); - if(lastFX >= 0.5 && lastFZ >= 0.5) tile.toggle(tile.POLE_PX_PZ); - } - } - - // Full class name needed because otherwise there's some conflict with the static import * from this class - public static class TileEntityScaffoldDynamic extends net.minecraft.tileentity.TileEntity { - - public int composite; - public int prevComposite; - public boolean locked; - public static final int BAR_LOWER_POS_X = (1 << 0); - public static final int BAR_LOWER_NEG_X = (1 << 1); - public static final int BAR_LOWER_POS_Z = (1 << 2); - public static final int BAR_LOWER_NEG_Z = (1 << 3); - public static final int BAR_UPPER_POS_X = (1 << 4); - public static final int BAR_UPPER_NEG_X = (1 << 5); - public static final int BAR_UPPER_POS_Z = (1 << 6); - public static final int BAR_UPPER_NEG_Z = (1 << 7); - public static final int POLE_PX_PZ = (1 << 8); - public static final int POLE_PX_NZ = (1 << 9); - public static final int POLE_NX_PZ = (1 << 10); - public static final int POLE_NX_NZ = (1 << 11); - public static final int GRATE_LOWER = (1 << 12); - public static final int GRATE_UPPER = (1 << 13); - - public boolean canToggle(int part) { return !locked && (composite ^ part) != 0; } - public void toggle(int part) { this.composite ^= part; System.out.println("" + this.composite); } - public boolean has(int part) { return (this.composite & part) != 0; } - - @Override - public void updateEntity() { } - - @Override - public Packet getDescriptionPacket() { - NBTTagCompound nbt = new NBTTagCompound(); - this.writeToNBT(nbt); - return new S35PacketUpdateTileEntity(this.xCoord, this.yCoord, this.zCoord, 0, nbt); - } - - @Override - public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) { - this.readFromNBT(pkt.func_148857_g()); - } - - @Override - public void readFromNBT(NBTTagCompound nbt) { - super.readFromNBT(nbt); - this.composite = nbt.getInteger("c"); - this.prevComposite = nbt.getInteger("p"); - this.locked = nbt.getBoolean("l"); - } - - @Override - public void writeToNBT(NBTTagCompound nbt) { - super.writeToNBT(nbt); - nbt.setInteger("c", composite); - nbt.setInteger("p", prevComposite); - nbt.setBoolean("l", locked); - } - } - - @Override - public void printHook(Pre event, World world, int x, int y, int z) { - - Minecraft mc = Minecraft.getMinecraft(); - EntityPlayer player = mc.thePlayer; - ItemStack held = player.getHeldItem(); - - boolean holdsBlowtorch = held != null && held.getItem() instanceof ItemBlowtorch; - boolean holdScrewdriver = held != null && (held.getItem() == ModItems.screwdriver || held.getItem() == ModItems.screwdriver_desh); - - MovingObjectPosition mop = mc.objectMouseOver; - - if(mop != null && mop.typeOfHit == mop.typeOfHit.BLOCK) { - float fX = (float) (mop.hitVec.xCoord - x); - float fY = (float) (mop.hitVec.yCoord - y); - float fZ = (float) (mop.hitVec.zCoord - z); - - TileEntityScaffoldDynamic tile = (TileEntityScaffoldDynamic) world.getTileEntity(x, y, z); - - if(tile != null && tile.locked && (holdsBlowtorch || holdScrewdriver)) { - List text = new ArrayList(); - text.add(EnumChatFormatting.RED + "Locked!"); - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); - return; - } - - if(holdsBlowtorch) { - String name = null; - int part = getPartFromCoord(fX, fY, fZ); - if(part <= (1 << 3)) name = "Lower Vertical Bar"; - else if(part <= (1 << 7)) name = "Upper Vertical Bar"; - else if(part <= (1 << 10)) name = "Pole"; - else if(part <= (1 << 13)) name = "Grate"; - - if(name != null) { - List text = new ArrayList(); - text.add("Toggle:"); - text.add(name); - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xffff00, 0x404000, text); - } - } - } - } -} 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 39662b8aa..886bdb89e 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java +++ b/src/main/java/com/hbm/items/weapon/sedna/ItemGunBaseNT.java @@ -42,6 +42,11 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei public double shotRand = 0D; public List smokeNodes = new ArrayList(); + public static float recoilVertical = 0; + public static float recoilHorizontal = 0; + public static float offsetVertical = 0; + public static float offsetHorizontal = 0; + public static final String O_GUNCONFIG = "O_GUNCONFIG"; public static final String KEY_DRAWN = "drawn"; 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 9134b759a..7f20acd99 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/Receiver.java +++ b/src/main/java/com/hbm/items/weapon/sedna/Receiver.java @@ -32,6 +32,7 @@ public class Receiver { public static final String O_MAGAZINE = "O_MAGAZINE"; public static final String FUN_CANFIRE = "FUN_CANFIRE"; public static final String CON_ONFIRE = "CON_ONFIRE"; + public static final String CON_ONRECOIL = "CON_ONRECOIL"; public Receiver(int index) { this.index = index; @@ -53,6 +54,7 @@ public class Receiver { protected IMagazine magazine_DNA; protected BiFunction canFire_DNA; protected BiConsumer onFire_DNA; + protected BiConsumer onRecoil_DNA; /* GETTERS */ public float getBaseDamage(ItemStack stack) { return WeaponUpgradeManager.eval(this.baseDamage_DNA, stack, F_BASEDAMAGE, this); } @@ -71,6 +73,7 @@ public class Receiver { public BiFunction getCanFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.canFire_DNA, stack, FUN_CANFIRE, this); } public BiConsumer getOnFire(ItemStack stack) { return WeaponUpgradeManager.eval(this.onFire_DNA, stack, CON_ONFIRE, this); } + public BiConsumer getRecoil(ItemStack stack) { return WeaponUpgradeManager.eval(this.onRecoil_DNA, stack, CON_ONRECOIL, this); } /* SETTERS */ public Receiver dmg(float dmg) { this.baseDamage_DNA = dmg; return this; } @@ -86,6 +89,7 @@ public class Receiver { public Receiver canFire(BiFunction lambda) { this.canFire_DNA = lambda; return this; } public Receiver fire(BiConsumer lambda) { this.onFire_DNA = lambda; return this; } + public Receiver recoil(BiConsumer lambda) { this.onRecoil_DNA = lambda; return this; } public Receiver sound(String sound, float volume, float pitch) { this.fireSound_DNA = sound; 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 8cef4e3ac..fd6444561 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 @@ -86,6 +86,12 @@ public class Lego { } }; + /** Toggles isAiming. Used by keybinds. */ + public static BiConsumer LAMBDA_STANDARD_RECOIL = (stack, ctx) -> { + ItemGunBaseNT.recoilVertical += 10; + ItemGunBaseNT.recoilHorizontal += ctx.player.getRNG().nextGaussian() * 1.5; + }; + /** Toggles isAiming. Used by keybinds. */ public static BiConsumer LAMBDA_TOGGLE_AIM = (stack, ctx) -> { ItemGunBaseNT.setIsAiming(stack, !ItemGunBaseNT.getIsAiming(stack)); }; 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 7981cd37b..b541be616 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 @@ -32,7 +32,7 @@ public class XFactoryBlackPowder { .rec(new Receiver(0) .dmg(5F).delay(27).reload(67).sound("hbm:weapon.fire.blackPowder", 1.0F, 1.0F) .mag(new MagazineFullReload(0, 6).addConfigs(stone, flint, iron, shot)) - .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_STANDARD_FIRE)) + .canFire(Lego.LAMBDA_STANDARD_CAN_FIRE).fire(Lego.LAMBDA_STANDARD_FIRE).recoil(Lego.LAMBDA_STANDARD_RECOIL)) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY) .pr(Lego.LAMBDA_STANDARD_RELOAD) .pt(Lego.LAMBDA_TOGGLE_AIM) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .anim(LAMBDA_PEPPERBOX_ANIMS) diff --git a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java index 0af651cca..2b86530b7 100644 --- a/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java +++ b/src/main/java/com/hbm/items/weapon/sedna/mags/MagazineSingleTypeBase.java @@ -32,7 +32,9 @@ public abstract class MagazineSingleTypeBase implements IMagazine public BulletConfig getType(ItemStack stack) { int type = getMagType(stack, index); if(type >= 0 && type < BulletConfig.configs.size()) { - return BulletConfig.configs.get(type); + BulletConfig cfg = BulletConfig.configs.get(type); + if(acceptedBullets.contains(cfg)) return cfg; + return acceptedBullets.get(0); } return null; } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index 27ddf61d2..4c54c112e 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -840,7 +840,6 @@ public class ClientProxy extends ServerProxy { RenderingRegistry.registerBlockHandler(new RenderSteelBeam()); RenderingRegistry.registerBlockHandler(new RenderSteelWall()); RenderingRegistry.registerBlockHandler(new RenderSteelCorner()); - RenderingRegistry.registerBlockHandler(new RenderScaffoldDynamic()); RenderingRegistry.registerBlockHandler(new RenderBarrel()); RenderingRegistry.registerBlockHandler(new RenderFence()); RenderingRegistry.registerBlockHandler(new RenderBarbedWire()); diff --git a/src/main/java/com/hbm/main/ModEventHandlerClient.java b/src/main/java/com/hbm/main/ModEventHandlerClient.java index 68844ea63..706a6e48e 100644 --- a/src/main/java/com/hbm/main/ModEventHandlerClient.java +++ b/src/main/java/com/hbm/main/ModEventHandlerClient.java @@ -149,11 +149,6 @@ public class ModEventHandlerClient { public static long flashTimestamp; public static final int shakeDuration = 1_500; public static long shakeTimestamp; - - public static float recoilVertical = 0; - public static float recoilHorizontal = 0; - public static float offsetVertical = 0; - public static float offsetHorizontal = 0; @SubscribeEvent public void onOverlayRender(RenderGameOverlayEvent.Pre event) { @@ -1000,19 +995,20 @@ public class ModEventHandlerClient { if(event.phase == Phase.END) { - this.offsetVertical += this.recoilVertical; - this.offsetHorizontal += this.recoilHorizontal; - player.rotationPitch += this.recoilVertical; - player.rotationYaw += this.recoilHorizontal; + ItemGunBaseNT.offsetVertical += ItemGunBaseNT.recoilVertical; + ItemGunBaseNT.offsetHorizontal += ItemGunBaseNT.recoilHorizontal; + player.rotationPitch -= ItemGunBaseNT.recoilVertical; + player.rotationYaw -= ItemGunBaseNT.recoilHorizontal; + + float decay = 0.75F; + float rebound = 0.25F; + ItemGunBaseNT.recoilVertical *= decay; + ItemGunBaseNT.recoilHorizontal *= decay; + float dV = ItemGunBaseNT.offsetVertical * rebound; + float dH = ItemGunBaseNT.offsetHorizontal * rebound; - float decay = 0.8F; - this.recoilVertical *= decay; - this.offsetHorizontal *= decay; - float dV = this.offsetVertical * 0.2F; - float dH = this.offsetHorizontal * 0.2F; - - this.offsetVertical -= dV; - this.offsetHorizontal -= dH; + ItemGunBaseNT.offsetVertical -= dV; + ItemGunBaseNT.offsetHorizontal -= dH; player.rotationPitch += dV; player.rotationYaw += dH; } diff --git a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java index 7b096cef2..d579f7821 100644 --- a/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java +++ b/src/main/java/com/hbm/packet/toclient/GunAnimationPacket.java @@ -1,11 +1,13 @@ package com.hbm.packet.toclient; +import java.util.function.BiConsumer; import java.util.function.BiFunction; import com.hbm.items.weapon.ItemGunBase; import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.ItemGunBaseNT; -import com.hbm.main.ModEventHandlerClient; +import com.hbm.items.weapon.sedna.Receiver; +import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.render.anim.BusAnimation; import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations.AnimType; @@ -23,22 +25,31 @@ import net.minecraft.item.ItemStack; public class GunAnimationPacket implements IMessage { - int type; + public short type; + public int meta; public GunAnimationPacket() { } public GunAnimationPacket(int type) { - this.type = type; + this.type = (short) type; + this.meta = 0; + } + + public GunAnimationPacket(int type, int meta) { + this.type = (short) type; + this.meta = meta; } @Override public void fromBytes(ByteBuf buf) { - type = buf.readInt(); + type = buf.readShort(); + meta = buf.readInt(); } @Override public void toBytes(ByteBuf buf) { - buf.writeInt(type); + buf.writeShort(type); + buf.writeInt(meta); } public static class Handler implements IMessageHandler { @@ -57,7 +68,7 @@ public class GunAnimationPacket implements IMessage { return null; if(stack.getItem() instanceof ItemGunBaseNT) { - handleSedna(player, stack, slot, AnimType.values()[m.type]); + handleSedna(player, stack, slot, AnimType.values()[m.type], m.meta); } if(!(stack.getItem() instanceof ItemGunBase)) @@ -91,7 +102,7 @@ public class GunAnimationPacket implements IMessage { return null; } - public static void handleSedna(EntityPlayer player, ItemStack stack, int slot, AnimType type) { + public static void handleSedna(EntityPlayer player, ItemStack stack, int slot, AnimType type, int meta) { ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); GunConfig config = gun.getConfig(stack); @@ -99,8 +110,12 @@ public class GunAnimationPacket implements IMessage { gun.lastShot = System.currentTimeMillis(); gun.shotRand = player.worldObj.rand.nextDouble(); - ModEventHandlerClient.recoilVertical += 1; - ModEventHandlerClient.recoilHorizontal += player.getRNG().nextGaussian(); + Receiver[] receivers = config.getReceivers(stack); + if(meta >= 0 && meta < receivers.length) { + Receiver rec = receivers[meta]; + BiConsumer onRecoil= rec.getRecoil(stack); + if(onRecoil != null) onRecoil.accept(stack, new LambdaContext(config, player)); + } } BiFunction anims = config.getAnims(stack); diff --git a/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java b/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java deleted file mode 100644 index 91beb1e71..000000000 --- a/src/main/java/com/hbm/render/block/RenderScaffoldDynamic.java +++ /dev/null @@ -1,111 +0,0 @@ -package com.hbm.render.block; - -import org.lwjgl.opengl.GL11; - -import com.hbm.blocks.generic.BlockScaffoldDynamic; -import com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic; -import com.hbm.render.util.RenderBlocksNT; - -import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler; -import net.minecraft.block.Block; -import net.minecraft.client.renderer.RenderBlocks; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.IBlockAccess; - -public class RenderScaffoldDynamic implements ISimpleBlockRenderingHandler { - - @Override - public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) { - - Tessellator tessellator = Tessellator.instance; - GL11.glTranslatef(-0.5F, -0.5F, -0.5F); - - tessellator.startDrawingQuads(); - - - renderer.setRenderBounds(0D, 0D, 0.875D, 0.75D, 1D, 1D); - tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); - - - renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); - tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, 0F, 1F); renderer.renderFaceZPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); - - renderer.setRenderBounds(0.875D, 0D, 0D, 1D, 1D, 0.75D); - tessellator.setNormal(0F, 1F, 0F); renderer.renderFaceYPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, -1F, 0F); renderer.renderFaceYNeg(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(1F, 0F, 0F); renderer.renderFaceXPos(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(-1F, 0F, 0F); renderer.renderFaceXNeg(block, 0, 0, 0, block.getIcon(0, 0)); - tessellator.setNormal(0F, 0F, -1F); renderer.renderFaceZNeg(block, 0, 0, 0, block.getIcon(0, 0)); - - tessellator.draw(); - } - - @Override - public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) { - Tessellator tessellator = Tessellator.instance; - tessellator.setBrightness(block.getMixedBrightnessForBlock(world, x, y, z)); - - renderer = RenderBlocksNT.INSTANCE.setWorld(world); - - TileEntity tile = world.getTileEntity(x, y, z); - if(!(tile instanceof TileEntityScaffoldDynamic)) return false; - TileEntityScaffoldDynamic scaffold = (TileEntityScaffoldDynamic) tile; - - boolean lpx = scaffold.has(scaffold.BAR_LOWER_POS_X); - boolean lnx = scaffold.has(scaffold.BAR_LOWER_NEG_X); - boolean upx = scaffold.has(scaffold.BAR_UPPER_POS_X); - boolean unx = scaffold.has(scaffold.BAR_UPPER_NEG_X); - boolean lpz = scaffold.has(scaffold.BAR_LOWER_POS_Z); - boolean lnz = scaffold.has(scaffold.BAR_LOWER_NEG_Z); - boolean upz = scaffold.has(scaffold.BAR_UPPER_POS_Z); - boolean unz = scaffold.has(scaffold.BAR_UPPER_NEG_Z); - - boolean p_nx_nz = scaffold.has(scaffold.POLE_NX_NZ); - boolean p_px_nz = scaffold.has(scaffold.POLE_PX_NZ); - boolean p_px_pz = scaffold.has(scaffold.POLE_PX_PZ); - boolean p_nx_pz = scaffold.has(scaffold.POLE_NX_PZ); - - BlockScaffoldDynamic.renderMode = 0; - if(p_nx_nz) { renderer.setRenderBounds(0D, 0D, 0D, 0.25D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); } - if(p_px_nz) { renderer.setRenderBounds(0.75D, 0D, 0D, 1D, 1D, 0.25D); renderer.renderStandardBlock(block, x, y, z); } - if(p_px_pz) { renderer.setRenderBounds(0.75D, 0D, 0.75D, 1D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); } - if(p_nx_pz) { renderer.setRenderBounds(0D, 0D, 0.75D, 0.25D, 1D, 1D); renderer.renderStandardBlock(block, x, y, z); } - - BlockScaffoldDynamic.renderMode = 1; - if(scaffold.has(scaffold.GRATE_LOWER)) { renderer.setRenderBounds(0.000, 0.000, 0.000, 1.000, 0.125, 1.000); renderer.renderStandardBlock(block, x, y, z); } - if(scaffold.has(scaffold.GRATE_UPPER)) { renderer.setRenderBounds(0.000, 0.875, 0.000, 1.000, 1.000, 1.000); renderer.renderStandardBlock(block, x, y, z); } - - BlockScaffoldDynamic.renderMode = 2; - - if(lpx) { renderer.setRenderBounds(0.75, 0.00, p_px_nz ? 0.25 : 0.00, 1.00, 0.25, p_px_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } - if(upx) { renderer.setRenderBounds(0.75, 0.75, p_px_nz ? 0.25 : 0.00, 1.00, 1.00, p_px_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } - if(lnx) { renderer.setRenderBounds(0.00, 0.00, p_nx_nz ? 0.25 : 0.00, 0.25, 0.25, p_nx_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } - if(unx) { renderer.setRenderBounds(0.00, 0.75, p_nx_nz ? 0.25 : 0.00, 0.25, 1.00, p_nx_pz ? 0.75 : 1.00); renderer.renderStandardBlock(block, x, y, z); } - if(lpz) { renderer.setRenderBounds(p_nx_pz || lnx ? 0.25 : 0.00, 0.00, 0.75, p_px_pz || lpx ? 0.75 : 1.00, 0.25, 1.00); renderer.renderStandardBlock(block, x, y, z); } - if(upz) { renderer.setRenderBounds(p_nx_pz || unx ? 0.25 : 0.00, 0.75, 0.75, p_px_pz || upx ? 0.75 : 1.00, 1.00, 1.00); renderer.renderStandardBlock(block, x, y, z); } - if(lnz) { renderer.setRenderBounds(p_nx_nz || lnx ? 0.25 : 0.00, 0.00, 0.00, p_px_nz || lpx ? 0.75 : 1.00, 0.25, 0.25); renderer.renderStandardBlock(block, x, y, z); } - if(unz) { renderer.setRenderBounds(p_nx_nz || unx ? 0.25 : 0.00, 0.75, 0.00, p_px_nz || upx ? 0.75 : 1.00, 1.00, 0.25); renderer.renderStandardBlock(block, x, y, z); } - - return true; - } - - @Override - public boolean shouldRender3DInInventory(int modelId) { - return false; - } - - @Override - public int getRenderId() { - return BlockScaffoldDynamic.renderIDScaffold; - } -} diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index a33860c56..e36bb9c52 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -14,7 +14,6 @@ import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockMotherOfAllOres.TileEntityRandomOre; import com.hbm.blocks.generic.BlockPedestal.TileEntityPedestal; import com.hbm.blocks.generic.BlockPlushie.TileEntityPlushie; -import com.hbm.blocks.generic.BlockScaffoldDynamic.TileEntityScaffoldDynamic; import com.hbm.blocks.generic.BlockSnowglobe.TileEntitySnowglobe; import com.hbm.blocks.generic.PartEmitter.TileEntityPartEmitter; import com.hbm.blocks.machine.BlockICF.TileEntityBlockICF; @@ -64,7 +63,6 @@ public class TileMappings { put(TileEntityDecoSteelPoles.class, "tileentity_steelpoles"); put(TileEntityDecoPoleTop.class, "tileentity_poletop"); put(TileEntityDecoPoleSatelliteReceiver.class, "tileentity_satellitereceicer"); - put(TileEntityScaffoldDynamic.class, "tileentity_scaffold_dynamic"); put(TileEntityMachineBattery.class, "tileentity_battery"); put(TileEntityCapacitor.class, "tileentity_capacitor"); put(TileEntityMachineWoodBurner.class, "tileentity_wood_burner");