mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
223 lines
6.4 KiB
Java
223 lines
6.4 KiB
Java
package com.hbm.items.weapon;
|
|
|
|
import java.util.List;
|
|
|
|
import com.hbm.config.GeneralConfig;
|
|
import com.hbm.entity.projectile.EntityChemical;
|
|
import com.hbm.handler.GunConfiguration;
|
|
import com.hbm.handler.guncfg.GunEnergyFactory;
|
|
import com.hbm.interfaces.IHoldableWeapon;
|
|
import com.hbm.inventory.fluid.FluidType;
|
|
import com.hbm.inventory.fluid.Fluids;
|
|
import com.hbm.items.machine.ItemFluidIcon;
|
|
import com.hbm.packet.GunAnimationPacket;
|
|
import com.hbm.packet.PacketDispatcher;
|
|
import com.hbm.render.anim.HbmAnimations.AnimType;
|
|
import com.hbm.render.util.RenderScreenOverlay;
|
|
import com.hbm.render.util.RenderScreenOverlay.Crosshair;
|
|
|
|
import api.hbm.fluid.IFillableItem;
|
|
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.enchantment.Enchantment;
|
|
import net.minecraft.enchantment.EnchantmentHelper;
|
|
import net.minecraft.entity.player.EntityPlayer;
|
|
import net.minecraft.entity.player.EntityPlayerMP;
|
|
import net.minecraft.item.ItemStack;
|
|
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 ItemGunChemthrower extends ItemGunBase implements IFillableItem {
|
|
|
|
public ItemGunChemthrower() {
|
|
super(GunEnergyFactory.getChemConfig());
|
|
}
|
|
|
|
@Override
|
|
protected void fire(ItemStack stack, World world, EntityPlayer player) {
|
|
|
|
if(!hasAmmo(stack, player, true))
|
|
return;
|
|
|
|
int bullets = 1;
|
|
|
|
for(int i = 0; i < bullets; i++) {
|
|
spawnProjectile(world, player, stack, 0);
|
|
}
|
|
|
|
useUpAmmo(player, stack, true);
|
|
player.inventoryContainer.detectAndSendChanges();
|
|
|
|
int wear = (int) Math.ceil(10 / (1F + EnchantmentHelper.getEnchantmentLevel(Enchantment.unbreaking.effectId, stack)));
|
|
setItemWear(stack, getItemWear(stack) + wear);
|
|
|
|
//world.playSoundAtEntity(player, mainConfig.firingSound, 1.0F, mainConfig.firingPitch);
|
|
}
|
|
|
|
@Override
|
|
public boolean hasAmmo(ItemStack stack, EntityPlayer player, boolean main) {
|
|
return getMag(stack) >= 0 + this.getConsumption(stack);
|
|
}
|
|
|
|
@Override
|
|
public void useUpAmmo(EntityPlayer player, ItemStack stack, boolean main) {
|
|
|
|
if(!main && altConfig == null)
|
|
return;
|
|
|
|
GunConfiguration config = mainConfig;
|
|
|
|
if(!main)
|
|
config = altConfig;
|
|
|
|
if(hasInfinity(stack, config))
|
|
return;
|
|
|
|
setMag(stack, getMag(stack) - this.getConsumption(stack));
|
|
}
|
|
|
|
@Override
|
|
public boolean canReload(ItemStack stack, World world, EntityPlayer player) {
|
|
return false;
|
|
}
|
|
|
|
@Override
|
|
protected void spawnProjectile(World world, EntityPlayer player, ItemStack stack, int config) {
|
|
|
|
//spawn fluid projectile
|
|
|
|
EntityChemical chem = new EntityChemical(world, player);
|
|
chem.setFluid(this.getFluidType(stack));
|
|
world.spawnEntityInWorld(chem);
|
|
|
|
if(player instanceof EntityPlayerMP)
|
|
PacketDispatcher.wrapper.sendTo(new GunAnimationPacket(AnimType.CYCLE.ordinal()), (EntityPlayerMP) player);
|
|
}
|
|
|
|
@Override
|
|
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean bool) {
|
|
|
|
list.add("Ammo: " + getMag(stack) + " / " + mainConfig.ammoCap + "mB");
|
|
|
|
list.add("Ammo Type: " + I18n.format(this.getFluidType(stack).getUnlocalizedName()));
|
|
|
|
int dura = mainConfig.durability - getItemWear(stack);
|
|
|
|
if(dura < 0)
|
|
dura = 0;
|
|
|
|
list.add("Durability: " + dura + " / " + mainConfig.durability);
|
|
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);
|
|
}
|
|
|
|
if(GeneralConfig.enableExtendedLogging) {
|
|
list.add("");
|
|
list.add("Type: " + getMagType(stack));
|
|
list.add("Is Reloading: " + getIsReloading(stack));
|
|
list.add("Reload Cycle: " + getReloadCycle(stack));
|
|
list.add("RoF Cooldown: " + getDelay(stack));
|
|
}
|
|
}
|
|
|
|
@Override
|
|
@SideOnly(Side.CLIENT)
|
|
public void renderHUD(Pre event, ElementType type, EntityPlayer player, ItemStack stack) {
|
|
|
|
ItemGunBase gun = ((ItemGunBase)stack.getItem());
|
|
GunConfiguration gcfg = gun.mainConfig;
|
|
|
|
if(type == ElementType.HOTBAR) {
|
|
|
|
FluidType fluid = this.getFluidType(stack);
|
|
|
|
ItemStack ammo = ItemFluidIcon.make(fluid, 1);
|
|
|
|
int count = ItemGunBase.getMag(stack);
|
|
int max = gcfg.ammoCap;
|
|
boolean showammo = gcfg.showAmmo;
|
|
|
|
int dura = ItemGunBase.getItemWear(stack) * 50 / gcfg.durability;
|
|
|
|
RenderScreenOverlay.renderAmmo(event.resolution, Minecraft.getMinecraft().ingameGUI, ammo, count, max, dura, showammo);
|
|
}
|
|
|
|
if(type == ElementType.CROSSHAIRS && GeneralConfig.enableCrosshairs) {
|
|
|
|
event.setCanceled(true);
|
|
|
|
if(!(gcfg.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);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void reload2(ItemStack stack, World world, EntityPlayer player) {
|
|
this.setIsReloading(stack, false);
|
|
}
|
|
|
|
public FluidType getFluidType(ItemStack stack) {
|
|
return Fluids.fromID(this.getMagType(stack));
|
|
}
|
|
|
|
public int getConsumption(ItemStack stack) {
|
|
return 3;
|
|
}
|
|
|
|
@Override
|
|
public boolean acceptsFluid(FluidType type, ItemStack stack) {
|
|
return getFluidType(stack) == type || this.getMag(stack) == 0;
|
|
}
|
|
|
|
public static final int transferSpeed = 50;
|
|
|
|
@Override
|
|
public int tryFill(FluidType type, int amount, ItemStack stack) {
|
|
|
|
if(!acceptsFluid(type, stack))
|
|
return amount;
|
|
|
|
if(this.getMag(stack) == 0)
|
|
this.setMagType(stack, type.getID());
|
|
|
|
int fill = this.getMag(stack);
|
|
int req = this.mainConfig.ammoCap - fill;
|
|
|
|
int toFill = Math.min(amount, req);
|
|
toFill = Math.min(toFill, transferSpeed);
|
|
|
|
this.setMag(stack, fill + toFill);
|
|
|
|
return amount - toFill;
|
|
}
|
|
|
|
@Override
|
|
public boolean providesFluid(FluidType type, ItemStack stack) {
|
|
return getFluidType(stack) == type;
|
|
}
|
|
|
|
@Override
|
|
public int tryEmpty(FluidType type, int amount, ItemStack stack) {
|
|
|
|
int fill = this.getMag(stack);
|
|
int toUnload = Math.min(fill, amount);
|
|
toUnload = Math.min(toUnload, transferSpeed);
|
|
|
|
this.setMag(stack, fill - toUnload);
|
|
|
|
return toUnload;
|
|
}
|
|
}
|