mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
some firearm shenanigans
This commit is contained in:
parent
0eadbbc288
commit
80a8883706
17
src/main/java/api/hbm/item/IButtonReceiver.java
Normal file
17
src/main/java/api/hbm/item/IButtonReceiver.java
Normal 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);
|
||||
}
|
||||
20
src/main/java/api/hbm/item/IClickReceiver.java
Normal file
20
src/main/java/api/hbm/item/IClickReceiver.java
Normal 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);
|
||||
}
|
||||
31
src/main/java/api/hbm/item/IGunHUDProvider.java
Normal file
31
src/main/java/api/hbm/item/IGunHUDProvider.java
Normal 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);
|
||||
}
|
||||
61
src/main/java/com/hbm/items/weapon/gununified/GunFrame.java
Normal file
61
src/main/java/com/hbm/items/weapon/gununified/GunFrame.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
@ -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
|
||||
}
|
||||
}
|
||||
@ -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")
|
||||
|
||||
@ -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
|
||||
8648
src/main/resources/assets/hbm/models/weapons/chodeblaster.obj
Normal file
8648
src/main/resources/assets/hbm/models/weapons/chodeblaster.obj
Normal file
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user