mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
332 lines
11 KiB
Java
332 lines
11 KiB
Java
package com.hbm.items.weapon.gununified;
|
|
|
|
import java.util.List;
|
|
|
|
import org.lwjgl.input.Mouse;
|
|
|
|
import com.hbm.config.GeneralConfig;
|
|
import com.hbm.entity.projectile.EntityBulletBase;
|
|
import com.hbm.handler.BulletConfigSyncingUtil;
|
|
import com.hbm.handler.BulletConfiguration;
|
|
import com.hbm.handler.GunConfiguration;
|
|
import com.hbm.handler.HbmKeybinds;
|
|
import com.hbm.interfaces.IHoldableWeapon;
|
|
import com.hbm.items.machine.ItemBattery;
|
|
import com.hbm.items.weapon.ItemGunBase;
|
|
import com.hbm.main.MainRegistry;
|
|
import com.hbm.packet.AuxParticlePacketNT;
|
|
import com.hbm.packet.GunAnimationPacket;
|
|
import com.hbm.packet.GunButtonPacket;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
import com.hbm.packet.PlayerInformPacket;
|
|
import com.hbm.render.anim.HbmAnimations.AnimType;
|
|
import com.hbm.render.util.RenderScreenOverlay;
|
|
import com.hbm.render.util.RenderScreenOverlay.Crosshair;
|
|
import com.hbm.util.BobMathUtil;
|
|
import com.hbm.util.ChatBuilder;
|
|
import com.hbm.util.I18nUtil;
|
|
|
|
import api.hbm.energy.IBatteryItem;
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.resources.I18n;
|
|
import net.minecraft.client.settings.GameSettings;
|
|
import net.minecraft.creativetab.CreativeTabs;
|
|
import net.minecraft.enchantment.Enchantment;
|
|
import net.minecraft.enchantment.EnchantmentHelper;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.item.Item;
|
|
import net.minecraft.item.ItemStack;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.util.EnumChatFormatting;
|
|
import net.minecraft.world.World;
|
|
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
|
|
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
|
|
|
|
public class ItemEnergyGunBase extends ItemGunBase implements IBatteryItem {
|
|
|
|
public ItemEnergyGunBase(GunConfiguration config) {
|
|
super(config);
|
|
}
|
|
|
|
public ItemEnergyGunBase(GunConfiguration config, GunConfiguration alt) {
|
|
super(config, alt);
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
|
|
list.add("Energy Stored: " + BobMathUtil.getShortNumber(getCharge(stack)) + "/" + BobMathUtil.getShortNumber(mainConfig.maxCharge) + "HE");
|
|
list.add("Charge rate: " + BobMathUtil.getShortNumber(mainConfig.chargeRate) + "HE/t");
|
|
|
|
BulletConfiguration config = getConfig(stack);
|
|
|
|
list.add("");
|
|
list.add("Mode: " + I18nUtil.resolveKey(config.modeName));
|
|
list.add("Mode info:");
|
|
list.add("Average damage: " + ((float)(config.dmgMax + config.dmgMin) / 2F));
|
|
list.add("Firing Rate: " + BobMathUtil.roundDecimal((1F / (((float)config.firingRate) / 20F)), 2) + " rounds per second");
|
|
list.add("Power Consumption per Shot: " + BobMathUtil.getShortNumber(config.dischargePerShot) + "HE");
|
|
|
|
list.add("");
|
|
list.add("Name: " + mainConfig.name);
|
|
list.add("Manufacturer: " + mainConfig.manufacturer);
|
|
|
|
if(!mainConfig.comment.isEmpty()) {
|
|
list.add("");
|
|
for(String s : mainConfig.comment)
|
|
list.add(EnumChatFormatting.ITALIC + s);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
protected void updateClient(ItemStack stack, World world, EntityPlayer entity, int slot, boolean isCurrentItem) {
|
|
|
|
if(!world.isRemote)
|
|
return;
|
|
|
|
boolean clickLeft = Mouse.isButtonDown(0);
|
|
boolean clickRight = Mouse.isButtonDown(1);
|
|
boolean left = m1;
|
|
boolean right = m2;
|
|
|
|
if(isCurrentItem) {
|
|
if(left && right) {
|
|
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0));
|
|
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1));
|
|
m1 = false;
|
|
m2 = false;
|
|
}
|
|
|
|
if(left && !clickLeft) {
|
|
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 0));
|
|
m1 = false;
|
|
endActionClient(stack, world, entity, true);
|
|
}
|
|
|
|
if(right && !clickRight) {
|
|
PacketDispatcher.wrapper.sendToServer(new GunButtonPacket(false, (byte) 1));
|
|
m2 = false;
|
|
endActionClient(stack, world, entity, false);
|
|
}
|
|
}
|
|
}
|
|
|
|
protected void updateServer(ItemStack stack, World world, EntityPlayer player, int slot, boolean isCurrentItem) {
|
|
|
|
if(getDelay(stack) > 0 && isCurrentItem)
|
|
setDelay(stack, getDelay(stack) - 1);
|
|
|
|
if(getIsMouseDown(stack) && !(player.getHeldItem() == stack)) {
|
|
setIsMouseDown(stack, false);
|
|
}
|
|
|
|
if(getIsAltDown(stack) && !isCurrentItem) {
|
|
setIsAltDown(stack, false);
|
|
}
|
|
|
|
if(GeneralConfig.enableGuns && mainConfig.firingMode == 1 && getIsMouseDown(stack) && tryShoot(stack, world, player, isCurrentItem)) {
|
|
|
|
fire(stack, world, player);
|
|
setDelay(stack, getConfig(stack).firingRate);
|
|
}
|
|
}
|
|
|
|
protected boolean tryShoot(ItemStack stack, World world, EntityPlayer player, boolean main) {
|
|
|
|
|
|
if(main && getDelay(stack) == 0) {
|
|
return getConfig(stack).dischargePerShot <= getCharge(stack);
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
protected void fire(ItemStack stack, World world, EntityPlayer player) {
|
|
|
|
BulletConfiguration config = getConfig(stack);
|
|
|
|
int bullets = config.bulletsMin;
|
|
|
|
for(int k = 0; k < mainConfig.roundsPerCycle; k++) {
|
|
|
|
if(config.bulletsMax > config.bulletsMin)
|
|
bullets += world.rand.nextInt(config.bulletsMax - config.bulletsMin);
|
|
|
|
for(int i = 0; i < bullets; i++) {
|
|
spawnProjectile(world, player, stack, BulletConfigSyncingUtil.getKey(config));
|
|
}
|
|
|
|
setCharge(stack, getCharge(stack) - config.dischargePerShot);;
|
|
}
|
|
|
|
world.playSoundAtEntity(player, mainConfig.firingSound, 1.0F, mainConfig.firingPitch);
|
|
|
|
if(player.getDisplayName().equals("Vic4Games")) {
|
|
NBTTagCompound nbt = new NBTTagCompound();
|
|
nbt.setString("type", "justTilt");
|
|
nbt.setInteger("time", mainConfig.rateOfFire + 1);
|
|
PacketDispatcher.wrapper.sendTo(new AuxParticlePacketNT(nbt, player.posX, player.posY, player.posZ), (EntityPlayerMP) player);
|
|
}
|
|
}
|
|
|
|
protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) {
|
|
|
|
EntityBulletBase bullet = new EntityBulletBase(world, config, player);
|
|
world.spawnEntityInWorld(bullet);
|
|
|
|
if(this.mainConfig.animations.containsKey(AnimType.CYCLE) && player instanceof EntityPlayerMP)
|
|
PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player);
|
|
|
|
}
|
|
|
|
public void startAction(ItemStack stack, World world, EntityPlayer player, boolean main) {
|
|
|
|
if(mainConfig.firingMode == mainConfig.FIRE_MANUAL && main && tryShoot(stack, world, player, main)) {
|
|
fire(stack, world, player);
|
|
setDelay(stack, mainConfig.rateOfFire);
|
|
|
|
}
|
|
|
|
if(!main && stack.getItem() instanceof ItemEnergyGunBase) {
|
|
|
|
byte mode = stack.hasTagCompound() ? stack.getTagCompound().getByte("mode") : 0;
|
|
|
|
if(!stack.hasTagCompound())
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
|
|
mode++;
|
|
if(mode >= mainConfig.config.size()) {
|
|
mode = 0;
|
|
}
|
|
|
|
stack.getTagCompound().setByte("mode", mode);
|
|
|
|
if(!world.isRemote) {
|
|
BulletConfiguration config = BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(mode));
|
|
//PacketDispatcher.wrapper.sendTo(new PlayerInformPacket("" + config.chatColour + config.modeName, MainRegistry.proxy.ID_GUN_MODE), (EntityPlayerMP)player);
|
|
|
|
player.addChatMessage(ChatBuilder.start("")
|
|
.nextTranslation("weapon.elecGun.modeChange").color(EnumChatFormatting.WHITE)
|
|
.nextTranslation(" ")
|
|
.nextTranslation(config.modeName).color(config.chatColour).flush());
|
|
}
|
|
}
|
|
}
|
|
|
|
// yummy boilerplate
|
|
|
|
public boolean showDurabilityBar(ItemStack stack) {
|
|
return true;
|
|
}
|
|
|
|
public double getDurabilityForDisplay(ItemStack stack) {
|
|
return 1D - (double) getCharge(stack) / (double) getMaxCharge();
|
|
}
|
|
|
|
@Override
|
|
public void chargeBattery(ItemStack stack, long i) {
|
|
if(stack.getItem() instanceof ItemEnergyGunBase) {
|
|
if(stack.hasTagCompound()) {
|
|
stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") + i);
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", i);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void setCharge(ItemStack stack, long i) {
|
|
if(stack.getItem() instanceof ItemEnergyGunBase) {
|
|
if(stack.hasTagCompound()) {
|
|
stack.stackTagCompound.setLong("charge", i);
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", i);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void dischargeBattery(ItemStack stack, long i) {
|
|
if(stack.getItem() instanceof ItemEnergyGunBase) {
|
|
if(stack.hasTagCompound()) {
|
|
stack.stackTagCompound.setLong("charge", stack.stackTagCompound.getLong("charge") - i);
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", ((ItemEnergyGunBase)stack.getItem()).mainConfig.maxCharge - i);
|
|
}
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public long getCharge(ItemStack stack) {
|
|
if(stack.getItem() instanceof ItemEnergyGunBase) {
|
|
if(stack.hasTagCompound()) {
|
|
return stack.stackTagCompound.getLong("charge");
|
|
} else {
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", ((ItemEnergyGunBase) stack.getItem()).mainConfig.maxCharge);
|
|
return stack.stackTagCompound.getLong("charge");
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
@Override
|
|
public long getMaxCharge() {
|
|
return mainConfig.maxCharge;
|
|
}
|
|
|
|
@Override
|
|
public long getChargeRate() {
|
|
return mainConfig.chargeRate;
|
|
}
|
|
|
|
@Override
|
|
public long getDischargeRate() {
|
|
return 0;
|
|
}
|
|
|
|
public BulletConfiguration getConfig(ItemStack stack) {
|
|
|
|
byte mode = 0;
|
|
|
|
if(stack.hasTagCompound())
|
|
mode = stack.getTagCompound().getByte("mode");
|
|
|
|
return BulletConfigSyncingUtil.pullConfig(mainConfig.config.get(mode));
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void getSubItems(Item item, CreativeTabs tab, List list) {
|
|
|
|
ItemStack stack = new ItemStack(item);
|
|
stack.stackTagCompound = new NBTTagCompound();
|
|
stack.stackTagCompound.setLong("charge", ((ItemEnergyGunBase) item).getMaxCharge());
|
|
|
|
list.add(stack);
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) {
|
|
|
|
if(type == ElementType.CROSSHAIRS && GeneralConfig.enableCrosshairs) {
|
|
|
|
event.setCanceled(true);
|
|
|
|
if(!(mainConfig.hasSights && player.isSneaking()))
|
|
RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, ((IHoldableWeapon)player.getHeldItem().getItem()).getCrosshair());
|
|
else
|
|
RenderScreenOverlay.renderCustomCrosshairs(event.resolution, Minecraft.getMinecraft().ingameGUI, Crosshair.NONE);
|
|
}
|
|
}
|
|
|
|
}
|