some firearm shenanigans

This commit is contained in:
Boblet 2021-09-03 15:19:28 +02:00
parent 0eadbbc288
commit 80a8883706
11 changed files with 8907 additions and 14 deletions

View File

@ -0,0 +1,17 @@
package api.hbm.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface IButtonReceiver {
/**
* Called in ModEventHandlerClient for any keyboard input related to this item
* @param stack
* @param player
*/
@SideOnly(Side.CLIENT)
public void handleKeyboardInput(ItemStack stack, EntityPlayer player);
}

View File

@ -0,0 +1,20 @@
package api.hbm.item;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface IClickReceiver {
/**
* Called in ModEventHandlerClient for any mouse input related to this item
* @param stack
* @param player
* @param button
* @param state
* @return true if the event should be canceled
*/
@SideOnly(Side.CLIENT)
public boolean handleMouseInput(ItemStack stack, EntityPlayer player, int button, boolean state);
}

View File

@ -0,0 +1,31 @@
package api.hbm.item;
import java.util.List;
import com.hbm.util.Tuple.Pair;
import com.hbm.util.Tuple.Triplet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
public interface IGunHUDProvider {
/**
* Gets the progress for the status bar right of the toolbar. Usually reserved for durability.
* It's now a list! More bars for stuff like overheating and special charges!
* @param stack
* @param player
* @return a list of triplets holding progress, foreground and background color.
*/
public List<Triplet<Double, Integer, Integer>> getStatusBars(ItemStack stack, EntityPlayer player);
/**
* Gets a list of any size containing a preview icon for loaded ammo as well as text indicating the ammo count.
* Can also be used for any kind of tooltip or maybe a built-in compass of sorts.
* @param stack
* @param player
* @return
*/
public List<Pair<IIcon, String>> getAmmoInfo(ItemStack stack, EntityPlayer player);
}

View File

@ -0,0 +1,61 @@
package com.hbm.items.weapon.gununified;
import java.util.ArrayList;
import java.util.List;
import com.hbm.util.Tuple.Pair;
import com.hbm.util.Tuple.Triplet;
import api.hbm.item.IClickReceiver;
import api.hbm.item.IGunHUDProvider;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
public abstract class GunFrame extends Item implements IGunHUDProvider, IClickReceiver {
private List<IStatusBarProvider> statusBars = new ArrayList();
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int slot, boolean isCurrentItem) {
if(entity instanceof EntityPlayer) {
EntityPlayer player = (EntityPlayer) entity;
if(world.isRemote) {
this.updatePlayerClient(stack, world, player, slot, isCurrentItem);
} else {
this.updatePlayerServer(stack, world, player, slot, isCurrentItem);
}
}
}
public void updatePlayerClient(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { }
public void updatePlayerServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) { }
@Override
@SideOnly(Side.CLIENT)
public boolean handleMouseInput(ItemStack stack, EntityPlayer player, int button, boolean state) {
return false;
}
@Override
public List<Triplet<Double, Integer, Integer>> getStatusBars(ItemStack stack, EntityPlayer player) {
return new ArrayList();
}
@Override
public List<Pair<IIcon, String>> getAmmoInfo(ItemStack stack, EntityPlayer player) {
return null;
}
public static double getDurabilityBar(ItemStack stack) {
return 1.0D;
}
}

View File

@ -0,0 +1,32 @@
package com.hbm.items.weapon.gununified;
import org.lwjgl.input.Keyboard;
import com.hbm.handler.HbmKeybinds;
import api.hbm.item.IButtonReceiver;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
public class GunRealoadable extends GunFrame implements IButtonReceiver {
private IReloadBehavior reload;
public static boolean lastReload = false;
@Override
@SideOnly(Side.CLIENT)
public void handleKeyboardInput(ItemStack stack, EntityPlayer player) {
boolean reload = Keyboard.isKeyDown(HbmKeybinds.reloadKey.getKeyCode());
if(this.reload != null) {
this.reload.tryStartReload(stack, player);
}
lastReload = reload;
}
}

View File

@ -0,0 +1,10 @@
package com.hbm.items.weapon.gununified;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface IReloadBehavior {
public boolean tryStartReload(ItemStack stack, EntityPlayer player);
public boolean updateRelaod(ItemStack stack, EntityPlayer player);
}

View File

@ -0,0 +1,13 @@
package com.hbm.items.weapon.gununified;
import java.util.List;
import com.hbm.util.Tuple.Triplet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public interface IStatusBarProvider {
public void provideBars(ItemStack stack, EntityPlayer player, List<Triplet<Double, Integer, Integer>> bars);
}

View File

@ -0,0 +1,16 @@
package com.hbm.items.weapon.gununified;
import java.util.List;
import com.hbm.util.Tuple.Triplet;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class StatusBarDurability implements IStatusBarProvider {
@Override
public void provideBars(ItemStack stack, EntityPlayer player, List<Triplet<Double, Integer, Integer>> bars) {
//TODO
}
}

View File

@ -50,11 +50,16 @@ import com.hbm.util.I18nUtil;
import com.hbm.util.ArmorRegistry;
import com.hbm.util.ArmorRegistry.HazardClass;
import com.mojang.authlib.minecraft.MinecraftProfileTexture.Type;
import api.hbm.item.IButtonReceiver;
import api.hbm.item.IClickReceiver;
import com.hbm.sound.MovingSoundPlayerLoop.EnumHbmSound;
import cpw.mods.fml.client.FMLClientHandler;
import cpw.mods.fml.common.eventhandler.EventPriority;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.InputEvent.KeyInputEvent;
import cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent;
import cpw.mods.fml.common.gameevent.TickEvent.Phase;
import cpw.mods.fml.relauncher.Side;
@ -68,6 +73,7 @@ import net.minecraft.client.renderer.RenderHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderPlayer;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemStack;
import net.minecraft.potion.Potion;
@ -338,25 +344,54 @@ public class ModEventHandlerClient {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemGunBase) {
if(player.getHeldItem() != null) {
if(event.button == 0)
event.setCanceled(true);
Item held = player.getHeldItem().getItem();
ItemGunBase item = (ItemGunBase)player.getHeldItem().getItem();
if(event.button == 0 && !item.m1 && !item.m2) {
item.m1 = true;
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 0));
item.startActionClient(player.getHeldItem(), player.worldObj, player, true);
if(held instanceof IClickReceiver) {
IClickReceiver rec = (IClickReceiver) held;
if(rec.handleMouseInput(player.getHeldItem(), player, event.button, event.buttonstate)) {
event.setCanceled(true);
return;
}
}
else if(event.button == 1 && !item.m2 && !item.m1) {
item.m2 = true;
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 1));
item.startActionClient(player.getHeldItem(), player.worldObj, player, false);
if(held instanceof ItemGunBase) {
if(event.button == 0)
event.setCanceled(true);
ItemGunBase item = (ItemGunBase)player.getHeldItem().getItem();
if(event.button == 0 && !item.m1 && !item.m2) {
item.m1 = true;
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 0));
item.startActionClient(player.getHeldItem(), player.worldObj, player, true);
}
else if(event.button == 1 && !item.m2 && !item.m1) {
item.m2 = true;
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(true, (byte) 1));
item.startActionClient(player.getHeldItem(), player.worldObj, player, false);
}
}
}
}
@SubscribeEvent
public void keyEvent(KeyInputEvent event) {
EntityPlayer player = Minecraft.getMinecraft().thePlayer;
if(player.getHeldItem() != null) {
Item held = player.getHeldItem().getItem();
if(held instanceof IButtonReceiver) {
IButtonReceiver rec = (IButtonReceiver) held;
rec.handleKeyboardInput(player.getHeldItem(), player);
}
}
}
@Spaghetti("please get this shit out of my face")

View File

@ -0,0 +1,10 @@
# Blender MTL File: 'None'
# Material Count: 1
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2

File diff suppressed because it is too large Load Diff