Merge remote-tracking branch 'upstream/master' into Optimization

This commit is contained in:
BallOfEnergy 2025-03-22 00:12:50 -05:00
commit b139e084fb
123 changed files with 6816 additions and 5924 deletions

View File

@ -9,6 +9,15 @@
* Explosive .50 BMG * Explosive .50 BMG
* Explosive 10 gauge buckshot (unlike 12 gauge which has explosive slugs) * Explosive 10 gauge buckshot (unlike 12 gauge which has explosive slugs)
* Lincoln's repeater, a b-side to the lever action rifle * Lincoln's repeater, a b-side to the lever action rifle
* Weapon modification table
* All weapon tiers have generic upgrades for increasing damage and durability
* Many guns have specialized attachments. Some examples:
* The assault rifle can use silencers, scopes, can have its stock removed and has two different polymer furnitures
* .44 revolvers can use scopes
* All full-length shotguns can have their barrel sawed off
* Most shotguns can make use of a choke to decrease projectile spread (does not work with sawed-offs)
* The grease gun has a modernization package, replacing most parts and increasing most stats
* Some guns have special mod combos that will change the name
## Changed ## Changed
* Fat mines now use the standardized mini nuke code * Fat mines now use the standardized mini nuke code
@ -29,6 +38,11 @@
* Removed the crafting recipe for the small geothermal generator and ZPE generators * Removed the crafting recipe for the small geothermal generator and ZPE generators
* Removed the gemothermal, ZPE and ambient radiation generators from the creative menu * Removed the gemothermal, ZPE and ambient radiation generators from the creative menu
* Disabled the horrid flicker on the quad rocket launcher's antenna, making steered mode look less terrible * Disabled the horrid flicker on the quad rocket launcher's antenna, making steered mode look less terrible
* All non-legendary .357 revolvers now fire a quarter of a second faster
* Changed the detonator's recipe to be less archaic
* Crates can now be opened when held
* Crates will not longer show their contents when locked
* Crates found in structures will sometimes contain things that aren't items
## Fixed ## Fixed
* Fixed animation errors on the MAS-36 * Fixed animation errors on the MAS-36
@ -40,4 +54,5 @@
* Potentially fixed another issue regarding NPCs firing belt-fed guns * Potentially fixed another issue regarding NPCs firing belt-fed guns
* Chunk-loading drones may or may not be fixed * Chunk-loading drones may or may not be fixed
* Fixed disperser canisters not actually despawning on impact, endlessly spawning mist clouds * Fixed disperser canisters not actually despawning on impact, endlessly spawning mist clouds
* Fixed issues where the new packet system didn't play nice with machines that are being sent packets by other machines, like watz segments and radar screens * Fixed issues where the new packet system didn't play nice with machines that are being sent packets by other machines, like watz segments and radar screens
* Fixed fat man's piston not being extended correctly in non-first person rendering when unloaded

View File

@ -29,9 +29,9 @@ public class BlockWeaponTable extends Block implements IGUIProvider {
@Override @Override
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void registerBlockIcons(IIconRegister iconRegister) { public void registerBlockIcons(IIconRegister iconRegister) {
this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":armor_table_top"); this.iconTop = iconRegister.registerIcon(RefStrings.MODID + ":gun_table_top");
this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":armor_table_bottom"); this.iconBottom = iconRegister.registerIcon(RefStrings.MODID + ":gun_table_bottom");
this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":armor_table_side"); this.blockIcon = iconRegister.registerIcon(RefStrings.MODID + ":gun_table_side");
} }
@Override @Override

View File

@ -31,6 +31,9 @@ public class WeaponRecipes {
public static void register() { public static void register() {
//Weapon mod table
CraftingManager.addRecipeAuto(new ItemStack(ModBlocks.machine_weapon_table, 1), new Object[] { "PPP", "TCT", "TST", 'P', GUNMETAL.plate(), 'T', STEEL.ingot(), 'C', Blocks.crafting_table, 'S', STEEL.block() });
//SEDNA Parts //SEDNA Parts
CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_stock, 1, Mats.MAT_WOOD.id), new Object[] { "WWW", " W", 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_stock, 1, Mats.MAT_WOOD.id), new Object[] { "WWW", " W", 'W', KEY_PLANKS });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_grip, 1, Mats.MAT_WOOD.id), new Object[] { "W ", " W", " W", 'W', KEY_PLANKS }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.part_grip, 1, Mats.MAT_WOOD.id), new Object[] { "W ", " W", " W", 'W', KEY_PLANKS });

View File

@ -19,7 +19,6 @@ import com.hbm.handler.threading.PacketThreading;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.lib.ModDamageSource; import com.hbm.lib.ModDamageSource;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.util.DamageResistanceHandler.DamageClass; import com.hbm.util.DamageResistanceHandler.DamageClass;

View File

@ -13,7 +13,6 @@ import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
import com.hbm.handler.threading.PacketThreading; import com.hbm.handler.threading.PacketThreading;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;

View File

@ -85,6 +85,7 @@ public class ContainerWeaponTable extends Container {
public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) { public ItemStack slotClick(int index, int button, int mode, EntityPlayer player) {
if(mode == 999_999) { if(mode == 999_999) {
if(player.worldObj.isRemote) return null;
ItemStack stack = gun.getStackInSlot(0); ItemStack stack = gun.getStackInSlot(0);
if(stack != null && stack.getItem() instanceof ItemGunBaseNT) { if(stack != null && stack.getItem() instanceof ItemGunBaseNT) {
int configs = ((ItemGunBaseNT) stack.getItem()).getConfigCount(); int configs = ((ItemGunBaseNT) stack.getItem()).getConfigCount();

View File

@ -422,7 +422,7 @@ public class ShredderRecipes extends SerializableRecipe {
//convert the map only once to save on processing power (might be more ram intensive but that can't be THAT bad, right?) //convert the map only once to save on processing power (might be more ram intensive but that can't be THAT bad, right?)
if(neiShredderRecipes == null) if(neiShredderRecipes == null)
neiShredderRecipes = new HashMap(shredderRecipes); neiShredderRecipes = new HashMap<>(shredderRecipes);
return neiShredderRecipes; return neiShredderRecipes;
} }

View File

@ -1507,6 +1507,9 @@ public class ModItems {
public static Item ammo_secret; public static Item ammo_secret;
public static Item weapon_mod_test; public static Item weapon_mod_test;
public static Item weapon_mod_generic;
public static Item weapon_mod_special;
public static Item weapon_mod_caliber;
public static Item crucible; public static Item crucible;
@ -6490,6 +6493,9 @@ public class ModItems {
GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName()); GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName());
GameRegistry.registerItem(weapon_mod_test, weapon_mod_test.getUnlocalizedName()); GameRegistry.registerItem(weapon_mod_test, weapon_mod_test.getUnlocalizedName());
GameRegistry.registerItem(weapon_mod_generic, weapon_mod_generic.getUnlocalizedName());
GameRegistry.registerItem(weapon_mod_special, weapon_mod_special.getUnlocalizedName());
GameRegistry.registerItem(weapon_mod_caliber, weapon_mod_caliber.getUnlocalizedName());
//Ammo //Ammo
GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName()); GameRegistry.registerItem(gun_b92_ammo, gun_b92_ammo.getUnlocalizedName());

View File

@ -4,7 +4,6 @@ import java.util.List;
import com.hbm.extprop.HbmPlayerProps; import com.hbm.extprop.HbmPlayerProps;
import com.hbm.handler.threading.PacketThreading; import com.hbm.handler.threading.PacketThreading;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.render.model.ModelArmorBJ; import com.hbm.render.model.ModelArmorBJ;
import com.hbm.util.ArmorUtil; import com.hbm.util.ArmorUtil;

View File

@ -5,21 +5,15 @@ import java.util.Random;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.config.GeneralConfig; import com.hbm.config.GeneralConfig;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard;
import com.hbm.itempool.ItemPool; import com.hbm.itempool.ItemPool;
import com.hbm.itempool.ItemPoolsSingle; import com.hbm.itempool.ItemPoolsSingle;
import com.hbm.lib.HbmWorldGen;
import com.hbm.lib.Library; import com.hbm.lib.Library;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.particle.helper.ExplosionCreator;
import com.hbm.tileentity.machine.storage.TileEntityCrateBase;
import com.hbm.tileentity.machine.storage.TileEntitySafe; import com.hbm.tileentity.machine.storage.TileEntitySafe;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.WeightedRandomChestContent; import net.minecraft.util.WeightedRandomChestContent;
import net.minecraft.world.World; import net.minecraft.world.World;

View File

@ -1,13 +1,19 @@
package com.hbm.items.weapon.sedna; package com.hbm.items.weapon.sedna;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Locale;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Function;
import com.hbm.config.GeneralConfig; import com.hbm.config.GeneralConfig;
import com.hbm.handler.HbmKeybinds.EnumKeybind; import com.hbm.handler.HbmKeybinds.EnumKeybind;
import com.hbm.interfaces.IItemHUD; import com.hbm.interfaces.IItemHUD;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.gui.GUIWeaponTable;
import com.hbm.items.IEquipReceiver; import com.hbm.items.IEquipReceiver;
import com.hbm.items.IKeybindReceiver; import com.hbm.items.IKeybindReceiver;
import com.hbm.items.weapon.sedna.hud.IHUDComponent; import com.hbm.items.weapon.sedna.hud.IHUDComponent;
@ -37,6 +43,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.EnumChatFormatting; import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType; import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
@ -49,6 +56,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
public double shotRand = 0D; public double shotRand = 0D;
public static List<Item> secrets = new ArrayList(); public static List<Item> secrets = new ArrayList();
public List<ComparableStack> recognizedMods = new ArrayList();
public static final DecimalFormatSymbols SYMBOLS_US = new DecimalFormatSymbols(Locale.US);
public static final DecimalFormat FORMAT_DMG = new DecimalFormat("#.##", SYMBOLS_US);
public static float recoilVertical = 0; public static float recoilVertical = 0;
public static float recoilHorizontal = 0; public static float recoilHorizontal = 0;
@ -94,6 +105,7 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
/** NEVER ACCESS DIRECTLY - USE GETTER */ /** NEVER ACCESS DIRECTLY - USE GETTER */
protected GunConfig[] configs_DNA; protected GunConfig[] configs_DNA;
public Function<ItemStack, String> LAMBDA_NAME_MUTATOR;
public WeaponQuality quality; public WeaponQuality quality;
public GunConfig getConfig(ItemStack stack, int index) { public GunConfig getConfig(ItemStack stack, int index) {
@ -134,6 +146,21 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
JAMMED, //forced delay due to jamming JAMMED, //forced delay due to jamming
} }
public ItemGunBaseNT setNameMutator(Function<ItemStack, String> lambda) {
this.LAMBDA_NAME_MUTATOR = lambda;
return this;
}
public String getItemStackDisplayName(ItemStack stack) {
if(this.LAMBDA_NAME_MUTATOR != null) {
String unloc = this.LAMBDA_NAME_MUTATOR.apply(stack);
if(unloc != null) return (StatCollector.translateToLocal(unloc + ".name")).trim();
}
return super.getItemStackDisplayName(stack);
}
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) { public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
@ -144,10 +171,10 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
IMagazine mag = rec.getMagazine(stack); IMagazine mag = rec.getMagazine(stack);
list.add("Ammo: " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player)); list.add("Ammo: " + mag.getIconForHUD(stack, player).getDisplayName() + " " + mag.reportAmmoStateForHUD(stack, player));
float dmg = rec.getBaseDamage(stack); float dmg = rec.getBaseDamage(stack);
list.add("Base Damage: " + dmg); list.add("Base Damage: " + FORMAT_DMG.format(dmg));
if(mag.getType(stack, player.inventory) instanceof BulletConfig) { if(mag.getType(stack, player.inventory) instanceof BulletConfig) {
BulletConfig bullet = (BulletConfig) mag.getType(stack, player.inventory); BulletConfig bullet = (BulletConfig) mag.getType(stack, player.inventory);
list.add("Damage with current ammo: " + dmg * bullet.damageMult + (bullet.projectilesMin > 1 ? (" x" + (bullet.projectilesMin != bullet.projectilesMax ? (bullet.projectilesMin + "-" + bullet.projectilesMax) : bullet.projectilesMin)) : "")); list.add("Damage with current ammo: " + FORMAT_DMG.format(dmg * bullet.damageMult) + (bullet.projectilesMin > 1 ? (" x" + (bullet.projectilesMin != bullet.projectilesMax ? (bullet.projectilesMin + "-" + bullet.projectilesMax) : bullet.projectilesMin)) : ""));
} }
} }
@ -164,6 +191,11 @@ public class ItemGunBaseNT extends Item implements IKeybindReceiver, IEquipRecei
case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + "SECRET"); break; case SECRET: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.DARK_RED : EnumChatFormatting.RED) + "SECRET"); break;
case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break; case DEBUG: list.add((BobMathUtil.getBlink() ? EnumChatFormatting.YELLOW : EnumChatFormatting.GOLD) + "DEBUG"); break;
} }
if(Minecraft.getMinecraft().currentScreen instanceof GUIWeaponTable && !this.recognizedMods.isEmpty()) {
list.add(EnumChatFormatting.RED + "Accepts:");
for(ComparableStack comp : this.recognizedMods) list.add(EnumChatFormatting.RED + " " + comp.toStack().getDisplayName());
}
} }
@Override @Override

View File

@ -23,7 +23,7 @@ public class Receiver {
public static final String I_DELAYAFTERFIRE = "I_DELAYAFTERFIRE"; public static final String I_DELAYAFTERFIRE = "I_DELAYAFTERFIRE";
public static final String I_DELAYAFTERDRYFIRE = "I_DELAYAFTERDRYFIRE"; public static final String I_DELAYAFTERDRYFIRE = "I_DELAYAFTERDRYFIRE";
public static final String I_ROUNDSPERCYCLE = "I_ROUNDSPERCYCLE"; public static final String I_ROUNDSPERCYCLE = "I_ROUNDSPERCYCLE";
public static final String F_SPRADINNATE = "F_SPRADINNATE"; public static final String F_SPREADINNATE = "F_SPREADINNATE";
public static final String F_SPREADAMMO = "F_SPREADAMMO"; public static final String F_SPREADAMMO = "F_SPREADAMMO";
public static final String F_SPREADHIPFIRE = "F_SPREADHIPFIRE"; public static final String F_SPREADHIPFIRE = "F_SPREADHIPFIRE";
public static final String F_SPREADDURABILITY = "F_SPREADDURABILITY"; public static final String F_SPREADDURABILITY = "F_SPREADDURABILITY";
@ -90,7 +90,7 @@ public class Receiver {
public int getDelayAfterFire(ItemStack stack) { return WeaponModManager.eval(this.delayAfterFire_DNA, stack, I_DELAYAFTERFIRE, this, parent.index); } public int getDelayAfterFire(ItemStack stack) { return WeaponModManager.eval(this.delayAfterFire_DNA, stack, I_DELAYAFTERFIRE, this, parent.index); }
public int getDelayAfterDryFire(ItemStack stack) { return WeaponModManager.eval(this.delayAfterDryFire_DNA, stack, I_DELAYAFTERDRYFIRE, this, parent.index); } public int getDelayAfterDryFire(ItemStack stack) { return WeaponModManager.eval(this.delayAfterDryFire_DNA, stack, I_DELAYAFTERDRYFIRE, this, parent.index); }
public int getRoundsPerCycle(ItemStack stack) { return WeaponModManager.eval(this.roundsPerCycle_DNA, stack, I_ROUNDSPERCYCLE, this, parent.index); } public int getRoundsPerCycle(ItemStack stack) { return WeaponModManager.eval(this.roundsPerCycle_DNA, stack, I_ROUNDSPERCYCLE, this, parent.index); }
public float getInnateSpread(ItemStack stack) { return WeaponModManager.eval(this.spreadInnate_DNA, stack, F_SPRADINNATE, this, parent.index); } public float getInnateSpread(ItemStack stack) { return WeaponModManager.eval(this.spreadInnate_DNA, stack, F_SPREADINNATE, this, parent.index); }
public float getAmmoSpread(ItemStack stack) { return WeaponModManager.eval(this.spreadMultAmmo_DNA, stack, F_SPREADAMMO, this, parent.index); } public float getAmmoSpread(ItemStack stack) { return WeaponModManager.eval(this.spreadMultAmmo_DNA, stack, F_SPREADAMMO, this, parent.index); }
public float getHipfireSpread(ItemStack stack) { return WeaponModManager.eval(this.spreadPenaltyHipfire_DNA, stack, F_SPREADHIPFIRE, this, parent.index); } public float getHipfireSpread(ItemStack stack) { return WeaponModManager.eval(this.spreadPenaltyHipfire_DNA, stack, F_SPREADHIPFIRE, this, parent.index); }
public float getDurabilitySpread(ItemStack stack) { return WeaponModManager.eval(this.spreadDurability_DNA, stack, F_SPREADDURABILITY, this, parent.index); } public float getDurabilitySpread(ItemStack stack) { return WeaponModManager.eval(this.spreadDurability_DNA, stack, F_SPREADDURABILITY, this, parent.index); }

View File

@ -66,8 +66,12 @@ public class GunFactory {
XFactoryTurret.init(); XFactoryTurret.init();
XFactory10ga.init(); XFactory10ga.init();
XFactory35800.init(); XFactory35800.init();
XFactory45.init();
ModItems.weapon_mod_test = new ItemEnumMulti(EnumModTest.class, true, true).setUnlocalizedName("weapon_mod_test"); ModItems.weapon_mod_test = new ItemEnumMulti(EnumModTest.class, true, true).setUnlocalizedName("weapon_mod_test").setMaxStackSize(1);
ModItems.weapon_mod_generic = new ItemEnumMulti(EnumModGeneric.class, true, true).setUnlocalizedName("weapon_mod_generic").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab);
ModItems.weapon_mod_special = new ItemEnumMulti(EnumModSpecial.class, true, true).setUnlocalizedName("weapon_mod_special").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab);
ModItems.weapon_mod_caliber = new ItemEnumMulti(EnumModCaliber.class, true, true).setUnlocalizedName("weapon_mod_caliber").setMaxStackSize(1).setCreativeTab(MainRegistry.weaponTab);
/// PROXY BULLSHIT /// /// PROXY BULLSHIT ///
MainRegistry.proxy.registerGunCfg(); MainRegistry.proxy.registerGunCfg();
@ -93,7 +97,8 @@ public class GunFactory {
COIL_TUNGSTEN, COIL_FERROURANIUM, COIL_TUNGSTEN, COIL_FERROURANIUM,
NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE, NUKE_STANDARD, NUKE_DEMO, NUKE_HIGH, NUKE_TOTS, NUKE_HIVE,
G10, G10_SHRAPNEL, G10_DU, G10_SLUG, G10, G10_SHRAPNEL, G10_DU, G10_SLUG,
R762_HE, BMG50_HE, G10_EXPLOSIVE R762_HE, BMG50_HE, G10_EXPLOSIVE,
P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU,
//ONLY ADD NEW ENTRIES AT THE BOTTOM TO AVOID SHIFTING! //ONLY ADD NEW ENTRIES AT THE BOTTOM TO AVOID SHIFTING!
; ;
@ -105,6 +110,7 @@ public class GunFactory {
M44_BP, M44_SP, M44_FMJ, M44_JHP, M44_AP, M44_EXPRESS, M44_BP, M44_SP, M44_FMJ, M44_JHP, M44_AP, M44_EXPRESS,
P22_SP, P22_FMJ, P22_JHP, P22_AP, P22_SP, P22_FMJ, P22_JHP, P22_AP,
P9_SP, P9_FMJ, P9_JHP, P9_AP, P9_SP, P9_FMJ, P9_JHP, P9_AP,
P45_SP, P45_FMJ, P45_JHP, P45_AP, P45_DU,
R556_SP, R556_FMJ, R556_JHP, R556_AP, R556_SP, R556_FMJ, R556_JHP, R556_AP,
R762_SP, R762_FMJ, R762_JHP, R762_AP, R762_DU, R762_HE, R762_SP, R762_FMJ, R762_JHP, R762_AP, R762_DU, R762_HE,
BMG50_SP, BMG50_FMJ, BMG50_JHP, BMG50_AP, BMG50_DU, BMG50_HE, BMG50_SP, BMG50_FMJ, BMG50_JHP, BMG50_AP, BMG50_DU, BMG50_HE,
@ -135,4 +141,27 @@ public class GunFactory {
public static enum EnumModTest { public static enum EnumModTest {
FIRERATE, DAMAGE, MULTI; FIRERATE, DAMAGE, MULTI;
} }
public static enum EnumModGeneric {
IRON_DAMAGE, IRON_DURA,
STEEL_DAMAGE, STEEL_DURA,
DURA_DAMAGE, DURA_DURA,
DESH_DAMAGE, DESH_DURA,
WSTEEL_DAMAGE, WSTEEL_DURA,
FERRO_DAMAGE, FERRO_DURA,
TCALLOY_DAMAGE, TCALLOY_DURA,
BIGMT_DAMAGE, BIGMT_DURA,
BRONZE_DAMAGE, BRONZE_DURA,
}
public static enum EnumModSpecial {
SILENCER, SCOPE, SAW, GREASEGUN, SLOWDOWN,
SPEEDUP, CHOKE, SPEEDLOADER,
FURNITURE_GREEN, FURNITURE_BLACK, BAYONET,
STACK_MAG,
}
public static enum EnumModCaliber {
P9, P45, P22, M357, M44, R556, R762, BMG50,
}
} }

View File

@ -8,6 +8,7 @@ import static com.hbm.items.weapon.sedna.factory.XFactory357.*;
import static com.hbm.items.weapon.sedna.factory.XFactory35800.*; import static com.hbm.items.weapon.sedna.factory.XFactory35800.*;
import static com.hbm.items.weapon.sedna.factory.XFactory40mm.*; import static com.hbm.items.weapon.sedna.factory.XFactory40mm.*;
import static com.hbm.items.weapon.sedna.factory.XFactory44.*; import static com.hbm.items.weapon.sedna.factory.XFactory44.*;
import static com.hbm.items.weapon.sedna.factory.XFactory45.*;
import static com.hbm.items.weapon.sedna.factory.XFactory50.*; import static com.hbm.items.weapon.sedna.factory.XFactory50.*;
import static com.hbm.items.weapon.sedna.factory.XFactory556mm.*; import static com.hbm.items.weapon.sedna.factory.XFactory556mm.*;
import static com.hbm.items.weapon.sedna.factory.XFactory75Bolt.*; import static com.hbm.items.weapon.sedna.factory.XFactory75Bolt.*;
@ -122,6 +123,12 @@ public class GunFactoryClient {
p9_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); p9_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
p9_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); p9_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
p9_ap.setRenderer(LegoClient.RENDER_AP_BULLET); p9_ap.setRenderer(LegoClient.RENDER_AP_BULLET);
p45_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
p45_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
p45_jhp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
p45_ap.setRenderer(LegoClient.RENDER_AP_BULLET);
p45_du.setRenderer(LegoClient.RENDER_DU_BULLET);
r556_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET); r556_sp.setRenderer(LegoClient.RENDER_STANDARD_BULLET);
r556_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET); r556_fmj.setRenderer(LegoClient.RENDER_STANDARD_BULLET);

View File

@ -10,6 +10,7 @@ import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.impl.ItemGunStinger; import com.hbm.items.weapon.sedna.impl.ItemGunStinger;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.mags.IMagazine; import com.hbm.items.weapon.sedna.mags.IMagazine;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.lib.ModDamageSource; import com.hbm.lib.ModDamageSource;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
@ -739,8 +740,8 @@ public class Orchestras {
if(entity.worldObj.isRemote) return; if(entity.worldObj.isRemote) return;
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
boolean aiming = ItemGunBaseNT.getIsAiming(stack); boolean aiming = ItemGunBaseNT.getIsAiming(stack) && !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
if(type == AnimType.CYCLE) { if(type == AnimType.CYCLE) {
if(timer == 0) { if(timer == 0) {
SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory);
@ -765,8 +766,8 @@ public class Orchestras {
if(type == AnimType.JAMMED) { if(type == AnimType.JAMMED) {
if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 16) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F);
if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); if(timer == 20) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F);
if(timer == 24) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F); if(timer == 26) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 0.9F);
if(timer == 28) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F); if(timer == 30) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverClose", 1F, 1F);
} }
}; };
@ -919,10 +920,13 @@ public class Orchestras {
if(type == AnimType.CYCLE) { if(type == AnimType.CYCLE) {
if(timer == 0) { if(timer == 0) {
SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory); int rounds = WeaponModManager.hasUpgrade(stack, ctx.configIndex, 208) ? 2 : 1;
if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, aiming ? 0.125 : 0.5, aiming ? -0.125 : -0.25, aiming ? -0.25 : -0.5D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 15F, (float)entity.getRNG().nextGaussian() * 15F, casing.getName()); for(int i = 0; i < rounds; i++) {
SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory);
if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, aiming ? 0.125 : 0.5, aiming ? -0.125 : -0.25, aiming ? -0.25 : -0.5D, 0, 0.18, -0.12, 0.01, (float)entity.getRNG().nextGaussian() * 15F, (float)entity.getRNG().nextGaussian() * 15F, casing.getName());
}
} }
if(timer == 1) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F); if(timer == (WeaponModManager.hasUpgrade(stack, 0, 207) ? 3 : 1)) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.revolverSpin", 1F, 0.75F);
} }
if(type == AnimType.CYCLE_DRY) { if(type == AnimType.CYCLE_DRY) {
if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F); if(timer == 0) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.dryFireClick", 1F, 0.75F);
@ -1312,7 +1316,7 @@ public class Orchestras {
if(entity.worldObj.isRemote) return; if(entity.worldObj.isRemote) return;
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex); AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex); int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
boolean aiming = ItemGunBaseNT.getIsAiming(stack); boolean aiming = ItemGunBaseNT.getIsAiming(stack) && !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
if(type == AnimType.EQUIP) { if(type == AnimType.EQUIP) {
if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F); if(timer == 10) entity.worldObj.playSoundAtEntity(entity, "hbm:weapon.reload.openLatch", 1F, 1F);

View File

@ -3,6 +3,7 @@ package com.hbm.items.weapon.sedna.factory;
import java.util.List; import java.util.List;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.bomb.BlockDetonatable; import com.hbm.blocks.bomb.BlockDetonatable;
@ -24,6 +25,7 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret;
import com.hbm.items.weapon.sedna.mags.MagazineBelt; import com.hbm.items.weapon.sedna.mags.MagazineBelt;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.packet.PacketDispatcher; import com.hbm.packet.PacketDispatcher;
@ -296,7 +298,8 @@ public class XFactory12ga {
.setupStandardFire().recoil(LAMBDA_RECOIL_MARESLEG)) .setupStandardFire().recoil(LAMBDA_RECOIL_MARESLEG))
.setupStandardConfiguration() .setupStandardConfiguration()
.anim(LAMBDA_MARESLEG_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG) .anim(LAMBDA_MARESLEG_ANIMS).orchestra(Orchestras.ORCHESTRA_MARESLEG)
).setUnlocalizedName("gun_maresleg"); ).setNameMutator(LAMBDA_NAME_MARESLEG)
.setUnlocalizedName("gun_maresleg");
ModItems.gun_maresleg_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE, ModItems.gun_maresleg_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE,
new GunConfig().dura(600).draw(5).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) new GunConfig().dura(600).draw(5).inspect(39).reloadSequential(true).crosshair(Crosshair.L_CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE)
.rec(new Receiver(0) .rec(new Receiver(0)
@ -382,6 +385,11 @@ public class XFactory12ga {
).setUnlocalizedName("gun_autoshotgun_sexy"); ).setUnlocalizedName("gun_autoshotgun_sexy");
} }
public static Function<ItemStack, String> LAMBDA_NAME_MARESLEG = (stack) -> {
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SAWED_OFF)) return stack.getUnlocalizedName() + "_short";
return null;
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_RECOIL_MARESLEG = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_RECOIL_MARESLEG = (stack, ctx) -> {
ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5)); ItemGunBaseNT.setupRecoil(10, (float) (ctx.getPlayer().getRNG().nextGaussian() * 1.5));
}; };

View File

@ -41,7 +41,7 @@ public class XFactory357 {
ModItems.gun_light_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() ModItems.gun_light_revolver = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
.dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE)
.rec(new Receiver(0) .rec(new Receiver(0)
.dmg(7.5F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) .dmg(7.5F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F)
.mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express)) .mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express))
.offset(0.75, -0.0625, -0.3125D) .offset(0.75, -0.0625, -0.3125D)
.setupStandardFire().recoil(LAMBDA_RECOIL_ATLAS)) .setupStandardFire().recoil(LAMBDA_RECOIL_ATLAS))
@ -51,7 +51,7 @@ public class XFactory357 {
ModItems.gun_light_revolver_atlas = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig() ModItems.gun_light_revolver_atlas = new ItemGunBaseNT(WeaponQuality.B_SIDE, new GunConfig()
.dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) .dura(300).draw(4).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE)
.rec(new Receiver(0) .rec(new Receiver(0)
.dmg(12.5F).delay(16).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F) .dmg(12.5F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 1.0F)
.mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express)) .mag(new MagazineFullReload(0, 6).addConfigs(m357_bp, m357_sp, m357_fmj, m357_jhp, m357_ap, m357_express))
.offset(0.75, -0.0625, -0.3125D) .offset(0.75, -0.0625, -0.3125D)
.setupStandardFire().recoil(LAMBDA_RECOIL_ATLAS)) .setupStandardFire().recoil(LAMBDA_RECOIL_ATLAS))
@ -67,7 +67,7 @@ public class XFactory357 {
.setupStandardFire().recoil(LAMBDA_RECOIL_DANI)) .setupStandardFire().recoil(LAMBDA_RECOIL_DANI))
.pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD)
.decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.anim(LAMBDA_DANI_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI), .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI),
new GunConfig().dura(30_000).draw(20).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE) new GunConfig().dura(30_000).draw(20).inspect(23).crosshair(Crosshair.CIRCLE).smoke(Lego.LAMBDA_STANDARD_SMOKE)
.rec(new Receiver(0) .rec(new Receiver(0)
.dmg(15F).spreadHipfire(0F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 0.9F) .dmg(15F).spreadHipfire(0F).delay(11).reload(55).jam(45).sound("hbm:weapon.fire.pistol", 1.0F, 0.9F)
@ -76,7 +76,7 @@ public class XFactory357 {
.setupStandardFire().recoil(LAMBDA_RECOIL_DANI)) .setupStandardFire().recoil(LAMBDA_RECOIL_DANI))
.ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD) .ps(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).pr(Lego.LAMBDA_STANDARD_RELOAD)
.decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.anim(LAMBDA_DANI_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI) .anim(LAMBDA_ATLAS_ANIMS).orchestra(Orchestras.ORCHESTRA_DANI)
).setUnlocalizedName("gun_light_revolver_dani"); ).setUnlocalizedName("gun_light_revolver_dani");
} }
@ -94,11 +94,11 @@ public class XFactory357 {
.addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN)); .addBus("EQUIP", new BusAnimationSequence().addPos(-90, 0, 0, 0).addPos(0, 0, 0, 350, IType.SIN_DOWN));
case CYCLE: return new BusAnimation() case CYCLE: return new BusAnimation()
.addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250)) .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250))
.addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 550).addPos(0, 0, 0, 200)) .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 300).addPos(0, 0, 0, 200))
.addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 600).addPos(0, 0, 1, 200)); .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200));
case CYCLE_DRY: return new BusAnimation() case CYCLE_DRY: return new BusAnimation()
.addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 550).addPos(0, 0, 0, 200)) .addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 200).addPos(0, 0, 0, 200))
.addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 600).addPos(0, 0, 1, 200)); .addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200));
case RELOAD: return new BusAnimation() case RELOAD: return new BusAnimation()
.addBus("LATCH", new BusAnimationSequence().addPos(0, 0, 90, 300).addPos(0, 0, 90, 2000).addPos(0, 0, 0, 150)) .addBus("LATCH", new BusAnimationSequence().addPos(0, 0, 90, 300).addPos(0, 0, 90, 2000).addPos(0, 0, 0, 150))
.addBus("FRONT", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(0, 0, 45, 150).addPos(0, 0, 45, 2000).addPos(0, 0, 0, 75)) .addBus("FRONT", new BusAnimationSequence().addPos(0, 0, 0, 200).addPos(0, 0, 45, 150).addPos(0, 0, 45, 2000).addPos(0, 0, 0, 75))
@ -119,19 +119,4 @@ public class XFactory357 {
return null; return null;
}; };
@SuppressWarnings("incomplete-switch") public static BiFunction<ItemStack, AnimType, BusAnimation> LAMBDA_DANI_ANIMS = (stack, type) -> {
switch(type) {
case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(360 * 3, 0, 0, 1000, IType.SIN_DOWN));
case CYCLE: return new BusAnimation()
.addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, 0, 50).addPos(0, 0, -3, 50).addPos(0, 0, 0, 250))
.addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 300).addPos(0, 0, 0, 200))
.addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200));
case CYCLE_DRY: return new BusAnimation()
.addBus("HAMMER", new BusAnimationSequence().addPos(0, 0, 1, 50).addPos(0, 0, 1, 200).addPos(0, 0, 0, 200))
.addBus("DRUM", new BusAnimationSequence().addPos(0, 0, 0, 350).addPos(0, 0, 1, 200));
}
return LAMBDA_ATLAS_ANIMS.apply(stack, type);
};
} }

View File

@ -2,6 +2,7 @@ package com.hbm.items.weapon.sedna.factory;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function;
import com.hbm.entity.projectile.EntityBoxcar; import com.hbm.entity.projectile.EntityBoxcar;
import com.hbm.entity.projectile.EntityBulletBaseMK4; import com.hbm.entity.projectile.EntityBulletBaseMK4;
@ -20,6 +21,7 @@ import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmoSecret;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mags.MagazineSingleReload; import com.hbm.items.weapon.sedna.mags.MagazineSingleReload;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing;
import com.hbm.particle.SpentCasing.CasingType; import com.hbm.particle.SpentCasing.CasingType;
@ -114,7 +116,8 @@ public class XFactory44 {
.setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP)) .setupStandardFire().recoil(LAMBDA_RECOIL_NOPIP))
.setupStandardConfiguration() .setupStandardConfiguration()
.anim(LAMBDA_NOPIP_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP) .anim(LAMBDA_NOPIP_ANIMS).orchestra(Orchestras.ORCHESTRA_NOPIP)
).setUnlocalizedName("gun_heavy_revolver"); ).setNameMutator(LAMBDA_NAME_NOPIP)
.setUnlocalizedName("gun_heavy_revolver");
ModItems.gun_heavy_revolver_lilmac = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig() ModItems.gun_heavy_revolver_lilmac = new ItemGunBaseNT(WeaponQuality.LEGENDARY, new GunConfig()
.dura(31_000).draw(10).inspect(23).crosshair(Crosshair.L_CLASSIC).scopeTexture(scope_lilmac).smoke(Lego.LAMBDA_STANDARD_SMOKE) .dura(31_000).draw(10).inspect(23).crosshair(Crosshair.L_CLASSIC).scopeTexture(scope_lilmac).smoke(Lego.LAMBDA_STANDARD_SMOKE)
.rec(new Receiver(0) .rec(new Receiver(0)
@ -148,8 +151,14 @@ public class XFactory44 {
).setUnlocalizedName("gun_hangman"); ).setUnlocalizedName("gun_hangman");
} }
public static Function<ItemStack, String> LAMBDA_NAME_NOPIP = (stack) -> {
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE)) return stack.getUnlocalizedName() + "_scoped";
return null;
};
public static BiConsumer<ItemStack, LambdaContext> SMACK_A_FUCKER = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> SMACK_A_FUCKER = (stack, ctx) -> {
if(ItemGunBaseNT.getState(stack, ctx.configIndex) == GunState.IDLE || ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) == AnimType.CYCLE) { if(ItemGunBaseNT.getState(stack, ctx.configIndex) == GunState.IDLE || ItemGunBaseNT.getLastAnim(stack, ctx.configIndex) == AnimType.CYCLE) {
ItemGunBaseNT.setIsAiming(stack, false);
ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.DRAWING); ItemGunBaseNT.setState(stack, ctx.configIndex, GunState.DRAWING);
ItemGunBaseNT.setTimer(stack, ctx.configIndex, ctx.config.getInspectDuration(stack)); ItemGunBaseNT.setTimer(stack, ctx.configIndex, ctx.config.getInspectDuration(stack));
ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.INSPECT, ctx.configIndex); ItemGunBaseNT.playAnimation(ctx.getPlayer(), stack, AnimType.INSPECT, ctx.configIndex);

View File

@ -0,0 +1,30 @@
package com.hbm.items.weapon.sedna.factory;
import com.hbm.items.ItemEnums.EnumCasingType;
import com.hbm.items.weapon.sedna.BulletConfig;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.particle.SpentCasing;
import com.hbm.particle.SpentCasing.CasingType;
public class XFactory45 {
public static BulletConfig p45_sp;
public static BulletConfig p45_fmj;
public static BulletConfig p45_jhp;
public static BulletConfig p45_ap;
public static BulletConfig p45_du;
public static void init() {
SpentCasing casing9 = new SpentCasing(CasingType.STRAIGHT).setColor(SpentCasing.COLOR_CASE_BRASS).setScale(1F, 1F, 0.75F);
p45_sp = new BulletConfig().setItem(EnumAmmo.P45_SP).setCasing(EnumCasingType.SMALL, 8)
.setCasing(casing9.clone().register("p45"));
p45_fmj = new BulletConfig().setItem(EnumAmmo.P45_FMJ).setCasing(EnumCasingType.SMALL, 8).setDamage(0.8F).setThresholdNegation(2F).setArmorPiercing(0.1F)
.setCasing(casing9.clone().register("p45fmj"));
p45_jhp = new BulletConfig().setItem(EnumAmmo.P45_JHP).setCasing(EnumCasingType.SMALL, 8).setDamage(1.5F).setHeadshot(1.5F).setArmorPiercing(-0.25F)
.setCasing(casing9.clone().register("p45jhp"));
p45_ap = new BulletConfig().setItem(EnumAmmo.P45_AP).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(1.5F).setThresholdNegation(5F).setArmorPiercing(0.15F)
.setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p45ap"));
p45_du = new BulletConfig().setItem(EnumAmmo.P45_DU).setCasing(EnumCasingType.SMALL_STEEL, 8).setDoesPenetrate(true).setDamageFalloutByPen(false).setDamage(2.5F).setThresholdNegation(15F).setArmorPiercing(0.25F)
.setCasing(casing9.clone().setColor(SpentCasing.COLOR_CASE_44).register("p45du"));
}
}

View File

@ -2,6 +2,7 @@ package com.hbm.items.weapon.sedna.factory;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function;
import com.hbm.config.ClientConfig; import com.hbm.config.ClientConfig;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
@ -16,6 +17,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.lib.RefStrings; import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
@ -58,7 +60,7 @@ public class XFactory556mm {
.setupStandardFire().recoil(LAMBDA_RECOIL_G3)) .setupStandardFire().recoil(LAMBDA_RECOIL_G3))
.setupStandardConfiguration().ps(Lego.LAMBDA_STANDARD_CLICK_SECONDARY) .setupStandardConfiguration().ps(Lego.LAMBDA_STANDARD_CLICK_SECONDARY)
.anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3) .anim(LAMBDA_G3_ANIMS).orchestra(Orchestras.ORCHESTRA_G3)
).setUnlocalizedName("gun_g3"); ).setNameMutator(LAMBDA_NAME_G3).setUnlocalizedName("gun_g3");
ModItems.gun_stg77 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() ModItems.gun_stg77 = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
.dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).scopeTexture(scope_lilmac).smoke(LAMBDA_SMOKE) .dura(3_000).draw(10).inspect(125).crosshair(Crosshair.CIRCLE).scopeTexture(scope_lilmac).smoke(LAMBDA_SMOKE)
@ -73,6 +75,16 @@ public class XFactory556mm {
).setUnlocalizedName("gun_stg77"); ).setUnlocalizedName("gun_stg77");
} }
public static Function<ItemStack, String> LAMBDA_NAME_G3 = (stack) -> {
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER) &&
WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK) &&
WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_BLACK) &&
WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE)) return stack.getUnlocalizedName() + "_infiltrator";
if(!WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK) &&
WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_GREEN)) return stack.getUnlocalizedName() + "_a3";
return null;
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_SMOKE = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_SMOKE = (stack, ctx) -> {
Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.075D, 1.1D, 0); Lego.handleStandardSmoke(ctx.entity, stack, 1500, 0.075D, 1.1D, 0);
}; };
@ -98,30 +110,47 @@ public class XFactory556mm {
case EQUIP: return new BusAnimation() case EQUIP: return new BusAnimation()
.addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL)); .addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 500, IType.SIN_FULL));
case CYCLE: return new BusAnimation() case CYCLE: return new BusAnimation()
.addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 20).addPos(0, 0, -4.5, 40).addPos(0, 0, 0, 40))
.addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.5 : -0.75, 25, IType.SIN_DOWN).addPos(0, 0, 0, 75, IType.SIN_FULL)); .addBus("RECOIL", new BusAnimationSequence().addPos(0, 0, ItemGunBaseNT.getIsAiming(stack) ? -0.5 : -0.75, 25, IType.SIN_DOWN).addPos(0, 0, 0, 75, IType.SIN_FULL));
case CYCLE_DRY: return new BusAnimation() case CYCLE_DRY: return new BusAnimation()
.addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100)) .addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 0, -0.3125, 100).hold(25).addPos(0, 0, -2.75, 130).hold(50).addPos(0, 0, -2.4375, 50).addPos(0, 0, 0, 85))
.addBus("PLUG", new BusAnimationSequence().addPos(0, 0, 0, 250).hold(125).addPos(0, 0, -2.4375, 130).hold(100).addPos(0, 0, 0, 85))
.addBus("HANDLE", new BusAnimationSequence().addPos(0, 0, 0, 250).addPos(0, 90, 0, 100).hold(25).hold(180).addPos(0, 0, 0, 50))
.addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 400).addPos(-1, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL)); .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 400).addPos(-1, 0, 0, 100, IType.SIN_DOWN).addPos(0, 0, 0, 100, IType.SIN_FULL));
case RELOAD: case RELOAD:
return new BusAnimation() return new BusAnimation()
.addBus("MAG", new BusAnimationSequence() .addBus("MAG", new BusAnimationSequence()
.addPos(0, -8, 0, 250, IType.SIN_UP) //250 .addPos(0, -8, 0, 250, IType.SIN_UP) //250
.addPos(0, -8, 0, 1000) //1250 .addPos(0, -8, 0, 1050) //1300
.addPos(0, 0, 0, 300)) //1550 .addPos(0, 0, 0, 250)) //1550
.addBus("BOLT", new BusAnimationSequence() .addBus("BOLT", new BusAnimationSequence()
.addPos(0, 0, 0, 250) //250 .addPos(0, 0, 0, 200) //200
.addPos(0, 0, -3.25, 150) //400 .addPos(0, 0, -0.3125, 100) //300
.addPos(0, 0, -3.25, 1250) //1750 .hold(10) //310
.addPos(0, 0, 0, 100)) //1850 .addPos(0, 0, -3.25, 200) //510
.holdUntil(1875) //1875
.addPos(0, 0, -2.9375, 50) //1925
.addPos(0, 0, 0, 100)) //2025
.addBus("PLUG", new BusAnimationSequence()
.addPos(0, 0, 0, 310) //310
.addPos(0, 0, -2.9375, 200) //510
.holdUntil(1925) //1925
.addPos(0, 0, 0, 100)) //2025
.addBus("HANDLE", new BusAnimationSequence() .addBus("HANDLE", new BusAnimationSequence()
.addPos(0, 0, 0, 500) //500 .addPos(0, 0, 0, 200) //200
.addPos(0, 0, 45, 50) //550 .addPos(0, 90, 0, 100) //300
.addPos(0, 0, 45, 1150) //1700 .hold(210) //510
.addPos(0, 0, 0, 50)) //1750 .addPos(0, 90, 45, 75) //685
.holdUntil(1775) //1775
.addPos(0, 90, 0, 100) //1875
.addPos(0, 0, 0, 50)) //1925
.addBus("LIFT", new BusAnimationSequence() .addBus("LIFT", new BusAnimationSequence()
.addPos(0, 0, 0, 750) //750 .addPos(0, 0, 0, 750) //750
.addPos(-25, 0, 0, 500, IType.SIN_FULL) //1250 .addPos(-25, 0, 0, 500, IType.SIN_FULL) //1250
.addPos(-25, 0, 0, 750) //2000 .holdUntil(1550) //1550
.addPos(-26, 0, 0, 100, IType.SIN_DOWN) //1650
.addPos(-25, 0, 0, 100, IType.SIN_FULL) //1750
.holdUntil(2000) //2000
.addPos(0, 0, 0, 500, IType.SIN_FULL)) //3500 .addPos(0, 0, 0, 500, IType.SIN_FULL)) //3500
.addBus("BULLET", new BusAnimationSequence().addPos(empty ? 1 : 0, 0, 0, 0).addPos(0, 0, 0, 1000)); .addBus("BULLET", new BusAnimationSequence().addPos(empty ? 1 : 0, 0, 0, 0).addPos(0, 0, 0, 1000));
case INSPECT: return new BusAnimation() case INSPECT: return new BusAnimation()
@ -139,7 +168,8 @@ public class XFactory556mm {
.addBus("BULLET", new BusAnimationSequence().addPos(empty ? 1 : 0, 0, 0, 0)); .addBus("BULLET", new BusAnimationSequence().addPos(empty ? 1 : 0, 0, 0, 0));
case JAMMED: return new BusAnimation() case JAMMED: return new BusAnimation()
.addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(-25, 0, 0, 250, IType.SIN_FULL).addPos(-25, 0, 0, 1250).addPos(0, 0, 0, 350, IType.SIN_FULL)) .addBus("LIFT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(-25, 0, 0, 250, IType.SIN_FULL).addPos(-25, 0, 0, 1250).addPos(0, 0, 0, 350, IType.SIN_FULL))
.addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 1000).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100).addPos(0, 0, 0, 250).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100)); .addBus("BOLT", new BusAnimationSequence().addPos(0, 0, 0, 1000).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100).addPos(0, 0, 0, 250).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100))
.addBus("PLUG", new BusAnimationSequence().addPos(0, 0, 0, 1000).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100).addPos(0, 0, 0, 250).addPos(0, 0, -3.25, 150).addPos(0, 0, 0, 100));
} }
return null; return null;

View File

@ -2,6 +2,7 @@ package com.hbm.items.weapon.sedna.factory;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import java.util.function.Function;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.ItemEnums.EnumCasingType; import com.hbm.items.ItemEnums.EnumCasingType;
@ -15,6 +16,7 @@ import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality; import com.hbm.items.weapon.sedna.ItemGunBaseNT.WeaponQuality;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload; import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.particle.SpentCasing; import com.hbm.particle.SpentCasing;
@ -53,7 +55,8 @@ public class XFactory9mm {
.setupStandardFire().recoil(LAMBDA_RECOIL_GREASEGUN)) .setupStandardFire().recoil(LAMBDA_RECOIL_GREASEGUN))
.setupStandardConfiguration() .setupStandardConfiguration()
.anim(LAMBDA_GREASEGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_GREASEGUN) .anim(LAMBDA_GREASEGUN_ANIMS).orchestra(Orchestras.ORCHESTRA_GREASEGUN)
).setUnlocalizedName("gun_greasegun"); ).setNameMutator(LAMBDA_NAME_GREASEGUN)
.setUnlocalizedName("gun_greasegun");
ModItems.gun_lag = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() ModItems.gun_lag = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()
.dura(1_700).draw(7).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) .dura(1_700).draw(7).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE)
@ -75,7 +78,8 @@ public class XFactory9mm {
.setupStandardFire().recoil(LAMBDA_RECOIL_UZI)) .setupStandardFire().recoil(LAMBDA_RECOIL_UZI))
.setupStandardConfiguration() .setupStandardConfiguration()
.anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI) .anim(LAMBDA_UZI_ANIMS).orchestra(Orchestras.ORCHESTRA_UZI)
).setUnlocalizedName("gun_uzi"); ).setNameMutator(LAMBDA_NAME_UZI)
.setUnlocalizedName("gun_uzi");
ModItems.gun_uzi_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE, ModItems.gun_uzi_akimbo = new ItemGunBaseNT(WeaponQuality.B_SIDE,
new GunConfig().dura(3_000).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE) new GunConfig().dura(3_000).draw(15).inspect(31).crosshair(Crosshair.CIRCLE).smoke(LAMBDA_SMOKE)
.rec(new Receiver(0) .rec(new Receiver(0)
@ -98,6 +102,16 @@ public class XFactory9mm {
).setUnlocalizedName("gun_uzi_akimbo"); ).setUnlocalizedName("gun_uzi_akimbo");
} }
public static Function<ItemStack, String> LAMBDA_NAME_GREASEGUN = (stack) -> {
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_GREASEGUN_CLEAN)) return stack.getUnlocalizedName() + "_m3";
return null;
};
public static Function<ItemStack, String> LAMBDA_NAME_UZI = (stack) -> {
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER)) return stack.getUnlocalizedName() + "_richter";
return null;
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_RECOIL_GREASEGUN = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_RECOIL_GREASEGUN = (stack, ctx) -> {
ItemGunBaseNT.setupRecoil(2, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5)); ItemGunBaseNT.setupRecoil(2, (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.5));
}; };

View File

@ -13,7 +13,7 @@ import net.minecraft.item.ItemStack;
public class MagazineBelt implements IMagazine<BulletConfig> { public class MagazineBelt implements IMagazine<BulletConfig> {
protected List<BulletConfig> acceptedBullets = new ArrayList(); public List<BulletConfig> acceptedBullets = new ArrayList();
public MagazineBelt addConfigs(BulletConfig... cfgs) { for(BulletConfig cfg : cfgs) acceptedBullets.add(cfg); return this; } public MagazineBelt addConfigs(BulletConfig... cfgs) { for(BulletConfig cfg : cfgs) acceptedBullets.add(cfg); return this; }

View File

@ -19,7 +19,7 @@ public abstract class MagazineSingleTypeBase implements IMagazine<BulletConfig>
public static final String KEY_MAG_PREV = "magprev"; public static final String KEY_MAG_PREV = "magprev";
public static final String KEY_MAG_AFTER = "magafter"; public static final String KEY_MAG_AFTER = "magafter";
protected List<BulletConfig> acceptedBullets = new ArrayList(); public List<BulletConfig> acceptedBullets = new ArrayList();
/** A number so the gun tell multiple mags apart */ /** A number so the gun tell multiple mags apart */
public int index; public int index;

View File

@ -0,0 +1,33 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.function.BiFunction;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.factory.XFactory556mm;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.render.anim.HbmAnimations.AnimType;
import net.minecraft.item.ItemStack;
public class WeapnModG3SawedOff extends WeaponModBase {
public WeapnModG3SawedOff(int id) {
super(id, "SHIELD");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == GunConfig.I_DRAWDURATION) return cast(5, base);
if(key == GunConfig.FUN_ANIMNATIONS) return (T) LAMBDA_G3_ANIMS;
return base;
}
@SuppressWarnings("incomplete-switch") public static BiFunction<ItemStack, AnimType, BusAnimation> LAMBDA_G3_ANIMS = (stack, type) -> {
switch(type) {
case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(45, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_FULL));
}
return XFactory556mm.LAMBDA_G3_ANIMS.apply(stack, type);
};
}

View File

@ -1,6 +1,11 @@
package com.hbm.items.weapon.sedna.mods; package com.hbm.items.weapon.sedna.mods;
public abstract class WeaponModBase implements IWeaponMod { public abstract class WeaponModBase implements IWeaponMod {
public static final int PRIORITY_SET = Integer.MAX_VALUE;
public static final int PRIORITY_MULTIPLICATIVE = 1_000;
public static final int PRIORITY_ADDITIVE = 500;
public static final int PRIORITY_MULT_FINAL = -1;
public String[] slots; public String[] slots;
public int priority = 0; public int priority = 0;
@ -20,5 +25,5 @@ public abstract class WeaponModBase implements IWeaponMod {
* @param Any value with the type that should be cast to * @param Any value with the type that should be cast to
* @return * @return
*/ */
public <T> T fagSlop(Object arg, T castTo) { return (T) arg; } //TODO: rename this to something more tactful public <T> T cast(Object arg, T castTo) { return (T) arg; }
} }

View File

@ -0,0 +1,59 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.ArrayList;
import java.util.List;
import com.hbm.items.weapon.sedna.BulletConfig;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.mags.MagazineBelt;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mags.MagazineSingleReload;
import net.minecraft.item.ItemStack;
public class WeaponModCaliber extends WeaponModBase {
protected static MagazineSingleReload DUMMY_SINGLE = new MagazineSingleReload(0, 0);
protected static MagazineFullReload DUMMY_FULL = new MagazineFullReload(0, 0);
protected static MagazineBelt DUMMY_BELT = new MagazineBelt();
protected final List<BulletConfig> cfg = new ArrayList();
protected final int count;
protected final float baseDamage;
public WeaponModCaliber(int id, int count, float baseDamage, BulletConfig... cfg) {
super(id, "CALIBER");
this.setPriority(PRIORITY_SET);
for(BulletConfig conf : cfg) this.cfg.add(conf);
this.count = count;
this.baseDamage = baseDamage;
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.O_MAGAZINE) {
if(base instanceof MagazineSingleReload) {
MagazineSingleReload original = (MagazineSingleReload) base;
DUMMY_SINGLE.acceptedBullets = cfg;
DUMMY_SINGLE.capacity = count;
DUMMY_SINGLE.index = original.index;
return (T) DUMMY_SINGLE;
}
if(base instanceof MagazineFullReload) {
MagazineFullReload original = (MagazineFullReload) base;
DUMMY_FULL.acceptedBullets = cfg;
DUMMY_FULL.capacity = count;
DUMMY_FULL.index = original.index;
return (T) DUMMY_FULL;
}
if(base instanceof MagazineBelt) {
MagazineBelt original = (MagazineBelt) base;
DUMMY_BELT.acceptedBullets = cfg;
return (T) DUMMY_BELT;
}
}
if(key == Receiver.F_BASEDAMAGE) {
return cast(baseDamage, base);
}
return base;
}
}

View File

@ -0,0 +1,19 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import net.minecraft.item.ItemStack;
public class WeaponModChoke extends WeaponModBase {
public WeaponModChoke(int id) {
super(id, "BARREL");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.F_SPREADAMMO) { return cast((Float) base * 0.5F, base); }
return base;
}
}

View File

@ -0,0 +1,23 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import net.minecraft.item.ItemStack;
public class WeaponModGenericDamage extends WeaponModBase {
public WeaponModGenericDamage(int id) {
super(id, "GENERIC_DAMAGE");
this.setPriority(PRIORITY_MULTIPLICATIVE);
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(parent instanceof Receiver && key == Receiver.F_BASEDAMAGE && base instanceof Float) {
return cast((Float) base * 1.33F, base);
}
return base;
}
}

View File

@ -0,0 +1,23 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.GunConfig;
import net.minecraft.item.ItemStack;
public class WeaponModGenericDurability extends WeaponModBase {
public WeaponModGenericDurability(int id) {
super(id, "GENERIC_DURABILITY");
this.setPriority(PRIORITY_MULTIPLICATIVE);
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(parent instanceof GunConfig && key == GunConfig.F_DURABILITY && base instanceof Float) {
return cast((Float) base * 2F, base);
}
return base;
}
}

View File

@ -0,0 +1,50 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.function.BiConsumer;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.factory.Orchestras;
import com.hbm.particle.SpentCasing;
import com.hbm.particle.helper.CasingCreator;
import com.hbm.render.anim.HbmAnimations.AnimType;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
public class WeaponModGreasegun extends WeaponModBase {
public WeaponModGreasegun(int id) {
super(id, "FURNITURE");
this.setPriority(PRIORITY_ADDITIVE);
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == GunConfig.F_DURABILITY) return cast((Float) base * 3F, base);
if(key == Receiver.F_BASEDAMAGE) return cast((Float) base + 2F, base);
if(key == Receiver.F_SPREADINNATE) return cast(0F, base);
if(key == Receiver.I_DELAYAFTERFIRE) return cast((Integer) base / 2, base);
if(key == GunConfig.CON_ORCHESTRA) return (T) ORCHESTRA_GREASEGUN;
return base;
}
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA_GREASEGUN = (stack, ctx) -> {
EntityLivingBase entity = ctx.entity;
if(entity.worldObj.isRemote) return;
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
boolean aiming = ItemGunBaseNT.getIsAiming(stack);
if(type == AnimType.CYCLE) {
if(timer == 1) {
SpentCasing casing = ctx.config.getReceivers(stack)[0].getMagazine(stack).getCasing(stack, ctx.inventory);
if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity, 0.55, aiming ? 0 : -0.125, aiming ? 0 : -0.25D, 0, 0.18, -0.12, 0.01, -7.5F + (float)entity.getRNG().nextGaussian() * 5F, 12F + (float)entity.getRNG().nextGaussian() * 5F, casing.getName());
}
return;
}
Orchestras.ORCHESTRA_GREASEGUN.accept(stack, ctx);
};
}

View File

@ -0,0 +1,57 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.function.BiFunction;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.factory.XFactory12ga;
import com.hbm.items.weapon.sedna.mags.IMagazine;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mags.MagazineSingleReload;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.render.anim.HbmAnimations.AnimType;
import net.minecraft.item.ItemStack;
public class WeaponModLiberatorSpeedloader extends WeaponModBase {
public static MagazineFullReload MAG = new MagazineFullReload(0, 4);
public WeaponModLiberatorSpeedloader(int id) {
super(id, "SPEEDLOADER");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == GunConfig.FUN_ANIMNATIONS) { return (T) LAMBDA_LIBERATOR_ANIMS; }
if(parent instanceof Receiver && base instanceof IMagazine && key == Receiver.O_MAGAZINE) {
MagazineSingleReload originalMag = (MagazineSingleReload) base;
if(MAG.acceptedBullets.isEmpty()) MAG.acceptedBullets.addAll(originalMag.acceptedBullets);
return (T) MAG;
}
return base;
}
@SuppressWarnings("incomplete-switch") public static BiFunction<ItemStack, AnimType, BusAnimation> LAMBDA_LIBERATOR_ANIMS = (stack, type) -> {
switch(type) {
case RELOAD: return new BusAnimation()
.addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 100))
.addBus("BREAK", new BusAnimationSequence().addPos(0, 0, 0, 100).addPos(60, 0, 0, 350, IType.SIN_DOWN))
.addBus("SHELL1", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP))
.addBus("SHELL2", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP))
.addBus("SHELL3", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP))
.addBus("SHELL4", new BusAnimationSequence().addPos(2, -4, -2, 0).addPos(2, -4, -2, 400).addPos(0, 0, -2, 450, IType.SIN_FULL).addPos(0, 0, 0, 50, IType.SIN_UP));
case RELOAD_END: return new BusAnimation()
.addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 0).addPos(15, 0, 0, 250).addPos(0, 0, 0, 50))
.addBus("BREAK", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_UP));
case JAMMED: return new BusAnimation()
.addBus("LATCH", new BusAnimationSequence().addPos(15, 0, 0, 0).addPos(15, 0, 0, 250).addPos(0, 0, 0, 50).addPos(0, 0, 0, 550).addPos(15, 0, 0, 100).addPos(15, 0, 0, 600).addPos(0, 0, 0, 50))
.addBus("BREAK", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_UP).addPos(0, 0, 0, 600).addPos(45, 0, 0, 250, IType.SIN_DOWN).addPos(45, 0, 0, 300).addPos(0, 0, 0, 150, IType.SIN_UP));
}
return XFactory12ga.LAMBDA_LIBERATOR_ANIMS.apply(stack, type);
};
}

View File

@ -0,0 +1,78 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.factory.Orchestras;
import com.hbm.items.weapon.sedna.factory.XFactory44;
import com.hbm.items.weapon.sedna.factory.XFactory762mm;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.render.anim.HbmAnimations.AnimType;
import com.hbm.util.EntityDamageUtil;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
public class WeaponModMASBayonet extends WeaponModBase {
public WeaponModMASBayonet(int id) {
super(id, "BAYONET");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == GunConfig.FUN_ANIMNATIONS) return (T) LAMBDA_MAS36_ANIMS;
if(key == GunConfig.I_INSPECTDURATION) return cast(30, base);
if(key == GunConfig.CON_ONPRESSSECONDARY) return (T) XFactory44.SMACK_A_FUCKER;
if(key == GunConfig.CON_ORCHESTRA) return (T) ORCHESTRA_MAS36;
if(key == GunConfig.I_INSPECTCANCEL) return cast(false, base);
return base;
}
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA_MAS36 = (stack, ctx) -> {
EntityLivingBase entity = ctx.entity;
if(entity.worldObj.isRemote) return;
AnimType type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
if(type == AnimType.INSPECT) {
if(timer == 15 && ctx.getPlayer() != null) {
MovingObjectPosition mop = EntityDamageUtil.getMouseOver(ctx.getPlayer(), 3.0D);
if(mop != null) {
if(mop.typeOfHit == mop.typeOfHit.ENTITY) {
float damage = 10F;
mop.entityHit.attackEntityFrom(DamageSource.causePlayerDamage(ctx.getPlayer()), damage);
mop.entityHit.motionX *= 2;
mop.entityHit.motionZ *= 2;
entity.worldObj.playSoundAtEntity(mop.entityHit, "hbm:weapon.fire.stab", 1F, 0.9F + entity.getRNG().nextFloat() * 0.2F);
}
if(mop.typeOfHit == mop.typeOfHit.BLOCK) {
Block b = entity.worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ);
entity.worldObj.playSoundEffect(mop.hitVec.xCoord, mop.hitVec.yCoord, mop.hitVec.zCoord, b.stepSound.getStepResourcePath(), 2F, 0.9F + entity.getRNG().nextFloat() * 0.2F);
}
}
}
return;
}
Orchestras.ORCHESTRA_MAS36.accept(stack, ctx);
};
@SuppressWarnings("incomplete-switch") public static BiFunction<ItemStack, AnimType, BusAnimation> LAMBDA_MAS36_ANIMS = (stack, type) -> {
switch(type) {
case INSPECT: return new BusAnimation()
.addBus("STAB", new BusAnimationSequence().addPos(0, 1, -2, 250, IType.SIN_DOWN).hold(250).addPos(0, 1, 5, 250, IType.SIN_UP).hold(250).addPos(0, 0, 0, 500, IType.SIN_FULL));
}
return XFactory762mm.LAMBDA_MAS36_ANIMS.apply(stack, type);
};
}

View File

@ -8,7 +8,20 @@ import java.util.List;
import com.google.common.collect.HashBiMap; import com.google.common.collect.HashBiMap;
import com.hbm.inventory.RecipesCommon.ComparableStack; import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.BulletConfig;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.factory.XFactory9mm;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModCaliber;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModGeneric;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModSpecial;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModTest; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumModTest;
import com.hbm.items.weapon.sedna.factory.XFactory22lr;
import com.hbm.items.weapon.sedna.factory.XFactory357;
import com.hbm.items.weapon.sedna.factory.XFactory44;
import com.hbm.items.weapon.sedna.factory.XFactory45;
import com.hbm.items.weapon.sedna.factory.XFactory50;
import com.hbm.items.weapon.sedna.factory.XFactory556mm;
import com.hbm.items.weapon.sedna.factory.XFactory762mm;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
@ -35,15 +48,139 @@ public class WeaponModManager {
public static void init() { public static void init() {
/* ORDER MATTERS! */ /* ORDER MATTERS! */
/* CTOR contains registering to the ID_LIST, avoid reordering to prevent ID shifting! */ /* CTOR contains registering to the idToMod, avoid reordering to prevent ID shifting! */
IWeaponMod TEST_FIRERATE = new WeaponModTestFirerate(0); /// TEST ///
IWeaponMod TEST_DAMAGE = new WeaponModTestDamage(1); IWeaponMod TEST_FIRERATE = new WeaponModTestFirerate(0, "FIRERATE");
IWeaponMod TEST_MULTI = new WeaponModTestMulti(2); IWeaponMod TEST_DAMAGE = new WeaponModTestDamage(1, "DAMAGE");
IWeaponMod TEST_MULTI = new WeaponModTestMulti(2, "MULTI");
new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.FIRERATE.ordinal())).addDefault(TEST_FIRERATE); new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.FIRERATE.ordinal())).addDefault(TEST_FIRERATE);
new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.DAMAGE.ordinal())).addDefault(TEST_DAMAGE); new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.DAMAGE.ordinal())).addDefault(TEST_DAMAGE);
new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.MULTI.ordinal())).addDefault(TEST_MULTI); new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_test, 1, EnumModTest.MULTI.ordinal())).addDefault(TEST_MULTI);
new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_generic, 1, EnumModGeneric.IRON_DAMAGE.ordinal())).addMod(ModItems.gun_pepperbox, new WeaponModGenericDamage(100));
new WeaponModDefinition(new ItemStack(ModItems.weapon_mod_generic, 1, EnumModGeneric.IRON_DURA.ordinal())).addMod(ModItems.gun_pepperbox, new WeaponModGenericDurability(101));
Item[] steelGuns = new Item[] {
ModItems.gun_light_revolver, ModItems.gun_light_revolver_atlas,
ModItems.gun_henry,
ModItems.gun_henry_lincoln,
ModItems.gun_greasegun,
ModItems.gun_maresleg, ModItems.gun_maresleg_akimbo,
ModItems.gun_flaregun };
Item[] duraGuns = new Item[] {
ModItems.gun_am180,
ModItems.gun_liberator,
ModItems.gun_congolake,
ModItems.gun_flamer,
ModItems.gun_flamer_topaz };
Item[] deshGuns = new Item[] {
ModItems.gun_heavy_revolver,
ModItems.gun_carbine,
ModItems.gun_uzi, ModItems.gun_uzi_akimbo,
ModItems.gun_spas12,
ModItems.gun_panzerschreck };
Item[] wsteelGuns = new Item[] {
ModItems.gun_g3,
ModItems.gun_stinger,
ModItems.gun_chemthrower };
Item[] ferroGuns = new Item[] {
ModItems.gun_m2,
ModItems.gun_autoshotgun, ModItems.gun_autoshotgun_shredder,
ModItems.gun_quadro };
Item[] tcalloyGuns = new Item[] {
ModItems.gun_lag,
ModItems.gun_minigun,
ModItems.gun_missile_launcher,
ModItems.gun_tesla_cannon };
Item[] bigmtGuns = new Item[] {
ModItems.gun_stg77,
ModItems.gun_fatman,
ModItems.gun_tau };
Item[] bronzeGuns = new Item[] {
ModItems.gun_lasrifle };
new WeaponModDefinition(EnumModGeneric.STEEL_DAMAGE).addMod(steelGuns, new WeaponModGenericDamage(102));
new WeaponModDefinition(EnumModGeneric.STEEL_DURA).addMod(steelGuns, new WeaponModGenericDurability(103));
new WeaponModDefinition(EnumModGeneric.DURA_DAMAGE).addMod(duraGuns, new WeaponModGenericDamage(104));
new WeaponModDefinition(EnumModGeneric.DURA_DURA).addMod(duraGuns, new WeaponModGenericDurability(105));
new WeaponModDefinition(EnumModGeneric.DESH_DAMAGE).addMod(deshGuns, new WeaponModGenericDamage(106));
new WeaponModDefinition(EnumModGeneric.DESH_DURA).addMod(deshGuns, new WeaponModGenericDurability(107));
new WeaponModDefinition(EnumModGeneric.WSTEEL_DAMAGE).addMod(wsteelGuns, new WeaponModGenericDamage(108));
new WeaponModDefinition(EnumModGeneric.WSTEEL_DURA).addMod(wsteelGuns, new WeaponModGenericDurability(109));
new WeaponModDefinition(EnumModGeneric.FERRO_DAMAGE).addMod(ferroGuns, new WeaponModGenericDamage(110));
new WeaponModDefinition(EnumModGeneric.FERRO_DURA).addMod(ferroGuns, new WeaponModGenericDurability(111));
new WeaponModDefinition(EnumModGeneric.TCALLOY_DAMAGE).addMod(tcalloyGuns, new WeaponModGenericDamage(112));
new WeaponModDefinition(EnumModGeneric.TCALLOY_DURA).addMod(tcalloyGuns, new WeaponModGenericDurability(113));
new WeaponModDefinition(EnumModGeneric.BIGMT_DAMAGE).addMod(bigmtGuns, new WeaponModGenericDamage(114));
new WeaponModDefinition(EnumModGeneric.BIGMT_DURA).addMod(bigmtGuns, new WeaponModGenericDurability(115));
new WeaponModDefinition(EnumModGeneric.BRONZE_DAMAGE).addMod(bronzeGuns, new WeaponModGenericDamage(116));
new WeaponModDefinition(EnumModGeneric.BRONZE_DURA).addMod(bronzeGuns, new WeaponModGenericDurability(117));
new WeaponModDefinition(EnumModSpecial.SPEEDLOADER).addMod(ModItems.gun_liberator, new WeaponModLiberatorSpeedloader(200));
new WeaponModDefinition(EnumModSpecial.SILENCER).addMod(new Item[] {ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_g3}, new WeaponModSilencer(ID_SILENCER));
new WeaponModDefinition(EnumModSpecial.SCOPE).addMod(new Item[] {ModItems.gun_heavy_revolver, ModItems.gun_g3, ModItems.gun_mas36}, new WeaponModScope(ID_SCOPE));
new WeaponModDefinition(EnumModSpecial.SAW)
.addMod(new Item[] {ModItems.gun_maresleg, ModItems.gun_double_barrel}, new WeaponModSawedOff(ID_SAWED_OFF))
.addMod(ModItems.gun_panzerschreck, new WeaponModPanzerschreckSawedOff(ID_NO_SHIELD))
.addMod(ModItems.gun_g3, new WeapnModG3SawedOff(ID_NO_STOCK));
new WeaponModDefinition(EnumModSpecial.GREASEGUN).addMod(ModItems.gun_greasegun, new WeaponModGreasegun(ID_GREASEGUN_CLEAN));
new WeaponModDefinition(EnumModSpecial.SLOWDOWN).addMod(ModItems.gun_minigun, new WeaponModSlowdown(207));
new WeaponModDefinition(EnumModSpecial.SPEEDUP)
.addMod(ModItems.gun_minigun, new WeaponModMinigunSpeedup(208))
.addMod(new Item[] {ModItems.gun_autoshotgun, ModItems.gun_autoshotgun_shredder}, new WeaponModShredderSpeedup(209));
new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12}, new WeaponModChoke(210));
new WeaponModDefinition(EnumModSpecial.FURNITURE_GREEN).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_GREEN));
new WeaponModDefinition(EnumModSpecial.FURNITURE_BLACK).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_BLACK));
new WeaponModDefinition(EnumModSpecial.BAYONET).addMod(ModItems.gun_mas36, new WeaponModMASBayonet(ID_MAS_BAYONET));
new WeaponModDefinition(EnumModSpecial.STACK_MAG).addMod(new Item[] {ModItems.gun_greasegun, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_aberrator, ModItems.gun_aberrator_eott}, new WeaponModStackMag(214));
BulletConfig[] p9 = new BulletConfig[] {XFactory9mm.p9_sp, XFactory9mm.p9_fmj, XFactory9mm.p9_jhp, XFactory9mm.p9_ap};
BulletConfig[] p45 = new BulletConfig[] {XFactory45.p45_sp, XFactory45.p45_fmj, XFactory45.p45_jhp, XFactory45.p45_ap, XFactory45.p45_du};
BulletConfig[] p22 = new BulletConfig[] {XFactory22lr.p22_sp, XFactory22lr.p22_fmj, XFactory22lr.p22_jhp, XFactory22lr.p22_ap};
BulletConfig[] m357 = new BulletConfig[] {XFactory357.m357_sp, XFactory357.m357_fmj, XFactory357.m357_jhp, XFactory357.m357_ap, XFactory357.m357_express};
BulletConfig[] m44 = new BulletConfig[] {XFactory44.m44_sp, XFactory44.m44_fmj, XFactory44.m44_jhp, XFactory44.m44_ap, XFactory44.m44_express};
BulletConfig[] r556 = new BulletConfig[] {XFactory556mm.r556_sp, XFactory556mm.r556_fmj, XFactory556mm.r556_jhp, XFactory556mm.r556_ap};
BulletConfig[] r762 = new BulletConfig[] {XFactory762mm.r762_sp, XFactory762mm.r762_fmj, XFactory762mm.r762_jhp, XFactory762mm.r762_ap, XFactory762mm.r762_du, XFactory762mm.r762_he};
BulletConfig[] bmg50 = new BulletConfig[] {XFactory50.bmg50_sp, XFactory50.bmg50_fmj, XFactory50.bmg50_jhp, XFactory50.bmg50_ap, XFactory50.bmg50_du, XFactory50.bmg50_he};
new WeaponModDefinition(EnumModCaliber.P9)
.addMod(ModItems.gun_henry, new WeaponModCaliber(300, 28, 10F, p9));
new WeaponModDefinition(EnumModCaliber.P45)
.addMod(ModItems.gun_henry, new WeaponModCaliber(310, 28, 10F, p45))
.addMod(ModItems.gun_greasegun, new WeaponModCaliber(311, 24, 3F, p45))
.addMod(ModItems.gun_uzi, new WeaponModCaliber(312, 24, 3F, p45))
.addMod(ModItems.gun_uzi_akimbo, new WeaponModCaliber(313, 24, 3F, p45))
.addMod(ModItems.gun_lag, new WeaponModCaliber(314, 24, 25F, p45));
new WeaponModDefinition(EnumModCaliber.P22)
.addMod(ModItems.gun_henry, new WeaponModCaliber(320, 28, 10F, p22))
.addMod(ModItems.gun_uzi, new WeaponModCaliber(321, 40, 3F, p22))
.addMod(ModItems.gun_uzi_akimbo, new WeaponModCaliber(322, 40, 3F, p22));
new WeaponModDefinition(EnumModCaliber.M357)
.addMod(ModItems.gun_henry, new WeaponModCaliber(330, 20, 10F, m357))
.addMod(ModItems.gun_lag, new WeaponModCaliber(331, 15, 25F, m357));
new WeaponModDefinition(EnumModCaliber.M44)
.addMod(ModItems.gun_lag, new WeaponModCaliber(340, 13, 25F, m44));
new WeaponModDefinition(EnumModCaliber.R556)
.addMod(ModItems.gun_henry, new WeaponModCaliber(350, 10, 10F, r556))
.addMod(ModItems.gun_carbine, new WeaponModCaliber(351, 20, 15F, r556))
.addMod(ModItems.gun_minigun, new WeaponModCaliber(352, 0, 6F, r556));
new WeaponModDefinition(EnumModCaliber.R762)
.addMod(ModItems.gun_henry, new WeaponModCaliber(360, 8, 10F, r762))
.addMod(ModItems.gun_g3, new WeaponModCaliber(361, 24, 5F, r762));
new WeaponModDefinition(EnumModCaliber.BMG50)
.addMod(ModItems.gun_henry, new WeaponModCaliber(370, 5, 10F, bmg50))
.addMod(ModItems.gun_minigun, new WeaponModCaliber(371, 0, 6F, bmg50));
} }
public static final int ID_SILENCER = 201;
public static final int ID_SCOPE = 202;
public static final int ID_SAWED_OFF = 203;
public static final int ID_NO_SHIELD = 204;
public static final int ID_NO_STOCK = 205;
public static final int ID_GREASEGUN_CLEAN = 206;
public static final int ID_FURNITURE_GREEN = 211;
public static final int ID_FURNITURE_BLACK = 212;
public static final int ID_MAS_BAYONET = 213;
public static ItemStack[] getUpgradeItems(ItemStack stack, int cfg) { public static ItemStack[] getUpgradeItems(ItemStack stack, int cfg) {
if(!stack.hasTagCompound()) return new ItemStack[0]; if(!stack.hasTagCompound()) return new ItemStack[0];
@ -60,6 +197,15 @@ public class WeaponModManager {
return mods; return mods;
} }
public static boolean hasUpgrade(ItemStack stack, int cfg, int id) {
if(!stack.hasTagCompound()) return false;
int[] modIds = stack.stackTagCompound.getIntArray(KEY_MOD_LIST + cfg);
for(int i = 0; i < modIds.length; i++) {
if(modIds[i] == id) return true;
}
return false;
}
/** Installs the supplied mods to the gun */ /** Installs the supplied mods to the gun */
public static void install(ItemStack stack, int cfg, ItemStack... mods) { public static void install(ItemStack stack, int cfg, ItemStack... mods) {
List<IWeaponMod> toInstall = new ArrayList(); List<IWeaponMod> toInstall = new ArrayList();
@ -104,7 +250,9 @@ public class WeaponModManager {
if(checkMutex) for(int i : gun.stackTagCompound.getIntArray(KEY_MOD_LIST + cfg)) { if(checkMutex) for(int i : gun.stackTagCompound.getIntArray(KEY_MOD_LIST + cfg)) {
IWeaponMod iMod = idToMod.get(i); IWeaponMod iMod = idToMod.get(i);
if(iMod != null) for(String mutex0 : newMod.getSlots()) for(String mutex1 : iMod.getSlots()) if(mutex0.equals(mutex1)) return false; //if any of the mod's slots are already taken if(iMod != null) for(String mutex0 : newMod.getSlots()) for(String mutex1 : iMod.getSlots()) {
if(mutex0.equals(mutex1)) return false; //if any of the mod's slots are already taken
}
} }
return true; //yippie! return true; //yippie!
@ -143,12 +291,30 @@ public class WeaponModManager {
this.stack = stack; this.stack = stack;
stackToMod.put(new ComparableStack(stack), this); stackToMod.put(new ComparableStack(stack), this);
} }
public WeaponModDefinition(EnumModGeneric num) {
this(new ItemStack(ModItems.weapon_mod_generic, 1, num.ordinal()));
}
public WeaponModDefinition(EnumModSpecial num) {
this(new ItemStack(ModItems.weapon_mod_special, 1, num.ordinal()));
}
public WeaponModDefinition(EnumModCaliber num) {
this(new ItemStack(ModItems.weapon_mod_caliber, 1, num.ordinal()));
}
public WeaponModDefinition addMod(ItemStack gun, IWeaponMod mod) { return addMod(new ComparableStack(gun), mod); } public WeaponModDefinition addMod(ItemStack gun, IWeaponMod mod) { return addMod(new ComparableStack(gun), mod); }
public WeaponModDefinition addMod(Item gun, IWeaponMod mod) { return addMod(new ComparableStack(gun), mod); } public WeaponModDefinition addMod(Item gun, IWeaponMod mod) { return addMod(new ComparableStack(gun), mod); }
public WeaponModDefinition addMod(Item[] gun, IWeaponMod mod) { for(Item item : gun) addMod(new ComparableStack(item), mod); return this; }
public WeaponModDefinition addMod(ComparableStack gun, IWeaponMod mod) { public WeaponModDefinition addMod(ComparableStack gun, IWeaponMod mod) {
modByGun.put(gun, mod); modByGun.put(gun, mod);
modToStack.put(mod, stack); modToStack.put(mod, stack);
if(gun != null) {
ItemGunBaseNT nt = (ItemGunBaseNT) gun.item;
ComparableStack comp = new ComparableStack(stack);
if(!nt.recognizedMods.contains(comp)) nt.recognizedMods.add(comp);
}
return this; return this;
} }

View File

@ -0,0 +1,19 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import net.minecraft.item.ItemStack;
public class WeaponModMinigunSpeedup extends WeaponModBase {
public WeaponModMinigunSpeedup(int id) {
super(id, "SPEED");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.I_ROUNDSPERCYCLE) return cast((Integer) base * 3, base);
if(key == Receiver.F_SPREADINNATE) return cast((Float) base * 1.5F, base);
return base;
}
}

View File

@ -0,0 +1,49 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.function.BiConsumer;
import java.util.function.BiFunction;
import com.hbm.extprop.HbmLivingProps;
import com.hbm.items.weapon.sedna.BulletConfig;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.factory.Lego;
import com.hbm.items.weapon.sedna.factory.XFactoryRocket;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.render.anim.HbmAnimations.AnimType;
import com.hbm.util.EntityDamageUtil;
import com.hbm.util.DamageResistanceHandler.DamageClass;
import net.minecraft.item.ItemStack;
public class WeaponModPanzerschreckSawedOff extends WeaponModBase {
public WeaponModPanzerschreckSawedOff(int id) {
super(id, "SHIELD");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == GunConfig.I_DRAWDURATION) return cast(5, base);
if(key == Receiver.CON_ONFIRE) { return (T) LAMBDA_FIRE; }
return base;
}
@SuppressWarnings("incomplete-switch") public static BiFunction<ItemStack, AnimType, BusAnimation> LAMBDA_PANZERSCHRECK_ANIMS = (stack, type) -> {
switch(type) {
case EQUIP: return new BusAnimation().addBus("EQUIP", new BusAnimationSequence().addPos(60, 0, 0, 0).addPos(0, 0, 0, 250, IType.SIN_DOWN));
}
return XFactoryRocket.LAMBDA_PANZERSCHRECK_ANIMS.apply(stack, type);
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_FIRE = (stack, ctx) -> {
Lego.LAMBDA_STANDARD_FIRE.accept(stack, ctx);
if(ctx.entity != null) {
HbmLivingProps.getData(ctx.entity).fire += 100;
EntityDamageUtil.attackEntityFromNT(ctx.entity, BulletConfig.getDamage(ctx.entity, ctx.entity, DamageClass.FIRE), 4F, true, false, 0F, 0F, 0F);
}
};
}

View File

@ -0,0 +1,27 @@
package com.hbm.items.weapon.sedna.mods;
import java.util.function.BiConsumer;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import net.minecraft.item.ItemStack;
public class WeaponModPolymerFurniture extends WeaponModBase {
public WeaponModPolymerFurniture(int id) {
super(id, "FURNITURE");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.CON_ONRECOIL) return (T) LAMBDA_RECOIL_G3;
return base;
}
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_RECOIL_G3 = (stack, ctx) -> {
ItemGunBaseNT.setupRecoil((float) (ctx.getPlayer().getRNG().nextGaussian() * 0.125), (float) (ctx.getPlayer().getRNG().nextGaussian() * 0.125));
};
}

View File

@ -0,0 +1,30 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.factory.XFactory12ga;
import net.minecraft.item.ItemStack;
public class WeaponModSawedOff extends WeaponModBase {
public WeaponModSawedOff(int id) {
super(id, "BARREL");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.F_SPREADINNATE) { return cast(Math.max(0.025F, (Float) base), base); }
if(key == Receiver.F_SPREADAMMO) { return cast((Float) base * 1.5F, base); }
if(key == Receiver.F_BASEDAMAGE) { return cast((Float) base * 1.35F, base); }
if(gun.getItem() == ModItems.gun_maresleg) {
if(key == GunConfig.FUN_ANIMNATIONS) return (T) XFactory12ga.LAMBDA_MARESLEG_SHORT_ANIMS;
if(key == GunConfig.I_DRAWDURATION) return cast(5, base);
}
return base;
}
}

View File

@ -0,0 +1,23 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.factory.XFactory44;
import net.minecraft.item.ItemStack;
public class WeaponModScope extends WeaponModBase {
public WeaponModScope(int id) {
super(id, "SCOPE");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == GunConfig.O_SCOPETEXTURE) {
return (T) XFactory44.scope_lilmac;
}
return base;
}
}

View File

@ -0,0 +1,19 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import net.minecraft.item.ItemStack;
public class WeaponModShredderSpeedup extends WeaponModBase {
public WeaponModShredderSpeedup(int id) {
super(id, "SPEED");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.I_DELAYAFTERFIRE) return cast((Integer) base / 2, base);
if(key == Receiver.I_DELAYAFTERDRYFIRE) return cast((Integer) base / 2, base);
return base;
}
}

View File

@ -0,0 +1,22 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import net.minecraft.item.ItemStack;
public class WeaponModSilencer extends WeaponModBase {
public WeaponModSilencer(int id) {
super(id, "SILENCER");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.S_FIRESOUND) {
return (T) "hbm:weapon.fire.silenced";
}
return base;
}
}

View File

@ -0,0 +1,19 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import net.minecraft.item.ItemStack;
public class WeaponModSlowdown extends WeaponModBase {
public WeaponModSlowdown(int id) {
super(id, "SPEED");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.I_DELAYAFTERFIRE) return cast((Integer) base * 2, base);
if(key == Receiver.F_SPREADINNATE) return cast(0F, base);
return base;
}
}

View File

@ -0,0 +1,41 @@
package com.hbm.items.weapon.sedna.mods;
import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.mags.MagazineFullReload;
import com.hbm.items.weapon.sedna.mags.MagazineSingleReload;
import net.minecraft.item.ItemStack;
public class WeaponModStackMag extends WeaponModBase {
// we can get away with reusing and re-adjusting these single instances because magazines
// aren't permanent objects, they are not cached anywhere, a magazine is only relevant
// for accessing the itemstack's ammo info and for the state machine's reload operation
protected static MagazineSingleReload DUMMY_SINGLE = new MagazineSingleReload(0, 0);
protected static MagazineFullReload DUMMY_FULL = new MagazineFullReload(0, 0);
public WeaponModStackMag(int id) {
super(id, "MAG");
}
@Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(key == Receiver.O_MAGAZINE) {
if(base instanceof MagazineSingleReload) {
MagazineSingleReload original = (MagazineSingleReload) base;
DUMMY_SINGLE.acceptedBullets = original.acceptedBullets;
DUMMY_SINGLE.capacity = original.capacity * 3 / 2;
DUMMY_SINGLE.index = original.index;
return (T) DUMMY_SINGLE;
}
if(base instanceof MagazineFullReload) {
MagazineFullReload original = (MagazineFullReload) base;
DUMMY_FULL.acceptedBullets = original.acceptedBullets;
DUMMY_FULL.capacity = original.capacity * 3 / 2;
DUMMY_FULL.index = original.index;
return (T) DUMMY_FULL;
}
}
return base;
}
}

View File

@ -8,13 +8,14 @@ public class WeaponModTestDamage extends WeaponModBase {
public WeaponModTestDamage(int id, String... slots) { public WeaponModTestDamage(int id, String... slots) {
super(id, slots); super(id, slots);
this.setPriority(PRIORITY_MULT_FINAL);
} }
@Override @Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) { public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(parent instanceof Receiver && key == Receiver.F_BASEDAMAGE && base instanceof Float) { if(parent instanceof Receiver && key == Receiver.F_BASEDAMAGE && base instanceof Float) {
return fagSlop((Float) base * 1.5F, base); return cast((Float) base * 1.5F, base);
} }
return base; return base;

View File

@ -8,13 +8,14 @@ public class WeaponModTestFirerate extends WeaponModBase {
public WeaponModTestFirerate(int id, String... slots) { public WeaponModTestFirerate(int id, String... slots) {
super(id, slots); super(id, slots);
this.setPriority(PRIORITY_MULT_FINAL);
} }
@Override @Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) { public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(parent instanceof Receiver && key == Receiver.I_DELAYAFTERFIRE && base instanceof Integer) { if(parent instanceof Receiver && key == Receiver.I_DELAYAFTERFIRE && base instanceof Integer) {
return fagSlop(Math.max((Integer) base / 2, 1), base); return cast(Math.max((Integer) base / 2, 1), base);
} }
return base; return base;

View File

@ -8,13 +8,14 @@ public class WeaponModTestMulti extends WeaponModBase {
public WeaponModTestMulti(int id, String... slots) { public WeaponModTestMulti(int id, String... slots) {
super(id, slots); super(id, slots);
this.setPriority(PRIORITY_MULT_FINAL);
} }
@Override @Override
public <T> T eval(T base, ItemStack gun, String key, Object parent) { public <T> T eval(T base, ItemStack gun, String key, Object parent) {
if(parent instanceof Receiver && key == Receiver.I_ROUNDSPERCYCLE && base instanceof Integer) { if(parent instanceof Receiver && key == Receiver.I_ROUNDSPERCYCLE && base instanceof Integer) {
return fagSlop((Integer) base * 3, base); return cast((Integer) base * 3, base);
} }
return base; return base;

View File

@ -308,7 +308,7 @@ public class CraftingManager {
addRecipeAuto(DictFrame.fromOne(ModItems.arc_electrode, EnumElectrodeType.DESH), new Object[] { "C", "T", "C", 'C', DESH.ingot(), 'T', W.ingot() }); addRecipeAuto(DictFrame.fromOne(ModItems.arc_electrode, EnumElectrodeType.DESH), new Object[] { "C", "T", "C", 'C', DESH.ingot(), 'T', W.ingot() });
addRecipeAuto(DictFrame.fromOne(ModItems.arc_electrode, EnumElectrodeType.SATURNITE), new Object[] { "C", "T", "C", 'C', BIGMT.ingot(), 'T', NB.ingot() }); addRecipeAuto(DictFrame.fromOne(ModItems.arc_electrode, EnumElectrodeType.SATURNITE), new Object[] { "C", "T", "C", 'C', BIGMT.ingot(), 'T', NB.ingot() });
addRecipeAuto(new ItemStack(ModItems.detonator, 1), new Object[] { " W", "SC", "CE", 'S', STEEL.plate(), 'W', MINGRADE.wireFine(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'E', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.detonator, 1), new Object[] { "C", "S", 'S', STEEL.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), });
addShapelessAuto(new ItemStack(ModItems.detonator_multi, 1), new Object[] { ModItems.detonator, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) }); addShapelessAuto(new ItemStack(ModItems.detonator_multi, 1), new Object[] { ModItems.detonator, DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) });
addRecipeAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', DIAMOND.gem(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', DIAMOND.gem(), 'I', STEEL.ingot() });
addRecipeAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', EMERALD.gem(), 'I', STEEL.ingot() }); addRecipeAuto(new ItemStack(ModItems.detonator_laser, 1), new Object[] { "RRD", "PIC", " P", 'P', STEEL.plate(), 'R', REDSTONE.dust(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED), 'D', EMERALD.gem(), 'I', STEEL.ingot() });

View File

@ -3,8 +3,6 @@ package com.hbm.main;
import com.hbm.blocks.ILookOverlay; import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ModBlocks; import com.hbm.blocks.ModBlocks;
import com.hbm.blocks.generic.BlockAshes; import com.hbm.blocks.generic.BlockAshes;
import com.hbm.blocks.generic.BlockCrate;
import com.hbm.blocks.generic.BlockStorageCrate;
import com.hbm.config.ClientConfig; import com.hbm.config.ClientConfig;
import com.hbm.config.GeneralConfig; import com.hbm.config.GeneralConfig;
import com.hbm.entity.mob.EntityHunterChopper; import com.hbm.entity.mob.EntityHunterChopper;
@ -61,7 +59,6 @@ import com.hbm.tileentity.bomb.TileEntityNukeCustom;
import com.hbm.tileentity.bomb.TileEntityNukeCustom.CustomNukeEntry; import com.hbm.tileentity.bomb.TileEntityNukeCustom.CustomNukeEntry;
import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumEntryType; import com.hbm.tileentity.bomb.TileEntityNukeCustom.EnumEntryType;
import com.hbm.tileentity.machine.TileEntityNukeFurnace; import com.hbm.tileentity.machine.TileEntityNukeFurnace;
import com.hbm.tileentity.machine.storage.TileEntityCrateBase;
import com.hbm.util.*; import com.hbm.util.*;
import com.hbm.util.ArmorRegistry.HazardClass; import com.hbm.util.ArmorRegistry.HazardClass;
import com.hbm.wiaj.GuiWorldInAJar; import com.hbm.wiaj.GuiWorldInAJar;
@ -103,7 +100,6 @@ import net.minecraft.init.Items;
import net.minecraft.inventory.Slot; import net.minecraft.inventory.Slot;
import net.minecraft.item.Item; import net.minecraft.item.Item;
import net.minecraft.item.ItemArmor; import net.minecraft.item.ItemArmor;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.play.client.C03PacketPlayer; import net.minecraft.network.play.client.C03PacketPlayer;
import net.minecraft.network.play.client.C0CPacketInput; import net.minecraft.network.play.client.C0CPacketInput;
@ -121,7 +117,6 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.ElementType;
import net.minecraftforge.client.event.sound.PlaySoundEvent17; import net.minecraftforge.client.event.sound.PlaySoundEvent17;
import net.minecraftforge.common.ForgeHooks; import net.minecraftforge.common.ForgeHooks;
import net.minecraftforge.event.entity.player.ItemTooltipEvent; import net.minecraftforge.event.entity.player.ItemTooltipEvent;
import net.minecraftforge.event.entity.player.PlayerInteractEvent;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;

View File

@ -942,6 +942,7 @@ public class ResourceManager {
public static final ResourceLocation henry_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/henry.png"); public static final ResourceLocation henry_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/henry.png");
public static final ResourceLocation henry_lincoln_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/henry_lincoln.png"); public static final ResourceLocation henry_lincoln_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/henry_lincoln.png");
public static final ResourceLocation greasegun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/greasegun.png"); public static final ResourceLocation greasegun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/greasegun.png");
public static final ResourceLocation greasegun_clean_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/greasegun_clean.png");
public static final ResourceLocation maresleg_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg.png"); public static final ResourceLocation maresleg_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg.png");
public static final ResourceLocation maresleg_broken_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg_broken.png"); public static final ResourceLocation maresleg_broken_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/maresleg_broken.png");
public static final ResourceLocation flaregun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flaregun.png"); public static final ResourceLocation flaregun_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flaregun.png");
@ -959,6 +960,9 @@ public class ResourceManager {
public static final ResourceLocation uzi_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi.png"); public static final ResourceLocation uzi_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/uzi.png");
public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png"); public static final ResourceLocation panzerschreck_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/panzerschreck.png");
public static final ResourceLocation g3_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3.png"); public static final ResourceLocation g3_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3.png");
public static final ResourceLocation g3_green_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_green.png");
public static final ResourceLocation g3_black_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_polymer_black.png");
public static final ResourceLocation g3_attachments = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/g3_attachments.png");
public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png"); public static final ResourceLocation shredder_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder.png");
public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png"); public static final ResourceLocation shredder_orig_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/shredder_orig.png");
public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy.png"); public static final ResourceLocation sexy_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/sexy.png");

View File

@ -1,7 +1,5 @@
package com.hbm.packet.threading; package com.hbm.packet.threading;
import io.netty.buffer.ByteBuf;
/** /**
* Abstract class for precompiled packets. * Abstract class for precompiled packets.
* Contains no content of its own; purely for distinction between precompiling and normal packets. * Contains no content of its own; purely for distinction between precompiling and normal packets.

View File

@ -4,6 +4,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -172,6 +173,6 @@ public class ItemRenderDoubleBarrel extends ItemRenderWeaponBase {
} }
public boolean isSawedOff(ItemStack stack) { public boolean isSawedOff(ItemStack stack) {
return stack.getItem() == ModItems.gun_double_barrel_sacred_dragon; return stack.getItem() == ModItems.gun_double_barrel_sacred_dragon || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SAWED_OFF);
} }
} }

View File

@ -121,6 +121,8 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase {
public void renderOther(ItemStack stack, ItemRenderType type) { public void renderOther(ItemStack stack, ItemRenderType type) {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
boolean isLoaded = gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null) > 0;
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_tex); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_tex);
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
@ -128,10 +130,10 @@ public class ItemRenderFatMan extends ItemRenderWeaponBase {
ResourceManager.fatman.renderPart("Handle"); ResourceManager.fatman.renderPart("Handle");
ResourceManager.fatman.renderPart("Gauge"); ResourceManager.fatman.renderPart("Gauge");
ResourceManager.fatman.renderPart("Lid"); ResourceManager.fatman.renderPart("Lid");
if(!isLoaded) GL11.glTranslated(0, 0, 3);
ResourceManager.fatman.renderPart("Piston"); ResourceManager.fatman.renderPart("Piston");
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_mininuke_tex); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.fatman_mininuke_tex);
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); if(isLoaded) ResourceManager.fatman.renderPart("MiniNuke");
if(gun.getConfig(stack, 0).getReceivers(stack)[0].getMagazine(stack).getAmount(stack, null) > 0) ResourceManager.fatman.renderPart("MiniNuke");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
} }

View File

@ -3,11 +3,13 @@ package com.hbm.render.item.weapon.sedna;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.ResourceLocation;
public class ItemRenderG3 extends ItemRenderWeaponBase { public class ItemRenderG3 extends ItemRenderWeaponBase {
@ -17,24 +19,28 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
@Override @Override
public float getViewFOV(ItemStack stack, float fov) { public float getViewFOV(ItemStack stack, float fov) {
float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp;
return fov * (1 - aimingProgress * 0.33F); return fov * (1 - aimingProgress * (isScoped(stack) ? 0.66F : 0.33F));
} }
@Override @Override
public void setupFirstPerson(ItemStack stack) { public void setupFirstPerson(ItemStack stack) {
GL11.glTranslated(0, 0, 0.875); GL11.glTranslated(0, 0, 0.875);
boolean isScoped = this.isScoped(stack);
float offset = 0.8F; float offset = 0.8F;
standardAimingTransform(stack, standardAimingTransform(stack,
-1.25F * offset, -1F * offset, 2.75F * offset, -1.25F * offset, -1F * offset, 2.75F * offset,
0, -3.5625 / 8D, 1.75); 0, isScoped ? (-5.53125 / 8D) : (-3.5625 / 8D), isScoped ? 1.46875 : 1.75);
} }
@Override @Override
public void renderFirstPerson(ItemStack stack) { public void renderFirstPerson(ItemStack stack) {
boolean isScoped = this.isScoped(stack);
if(isScoped && ItemGunBaseNT.prevAimingProgress == 1 && ItemGunBaseNT.aimingProgress == 1) return;
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.g3_tex); Minecraft.getMinecraft().renderEngine.bindTexture(getTexture(stack));
double scale = 0.375D; double scale = 0.375D;
GL11.glScaled(scale, scale, scale); GL11.glScaled(scale, scale, scale);
@ -44,6 +50,7 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
double[] mag = HbmAnimations.getRelevantTransformation("MAG"); double[] mag = HbmAnimations.getRelevantTransformation("MAG");
double[] speen = HbmAnimations.getRelevantTransformation("SPEEN"); double[] speen = HbmAnimations.getRelevantTransformation("SPEEN");
double[] bolt = HbmAnimations.getRelevantTransformation("BOLT"); double[] bolt = HbmAnimations.getRelevantTransformation("BOLT");
double[] plug = HbmAnimations.getRelevantTransformation("PLUG");
double[] handle = HbmAnimations.getRelevantTransformation("HANDLE"); double[] handle = HbmAnimations.getRelevantTransformation("HANDLE");
double[] bullet = HbmAnimations.getRelevantTransformation("BULLET"); double[] bullet = HbmAnimations.getRelevantTransformation("BULLET");
@ -60,10 +67,12 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.g3.renderPart("Rifle"); ResourceManager.g3.renderPart("Rifle");
ResourceManager.g3.renderPart("Stock"); if(hasStock(stack)) ResourceManager.g3.renderPart("Stock");
ResourceManager.g3.renderPart("Flash_Hider"); boolean silenced = hasSilencer(stack);
ResourceManager.g3.renderPart("Trigger_Rifle.002"); if(!silenced) ResourceManager.g3.renderPart("Flash_Hider");
ResourceManager.g3.renderPart("Trigger");
Minecraft.getMinecraft().renderEngine.bindTexture(getTexture(stack));
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(mag[0], mag[1], mag[2]); GL11.glTranslated(mag[0], mag[1], mag[2]);
GL11.glTranslated(0, -1.75, -0.5); GL11.glTranslated(0, -1.75, -0.5);
@ -76,10 +85,20 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(0, 0, bolt[2]); GL11.glTranslated(0, 0, bolt[2]);
ResourceManager.g3.renderPart("Bolt"); ResourceManager.g3.renderPart("Guide_And_Bolt");
GL11.glTranslated(0, 0.625, 0); GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(0, 0.625, plug[2]);
GL11.glRotated(handle[2], 0, 0, 1); GL11.glRotated(handle[2], 0, 0, 1);
GL11.glTranslated(0, -0.625, 0); GL11.glTranslated(0, -0.625, 0);
ResourceManager.g3.renderPart("Plug");
GL11.glTranslated(0, 0.625, 5.25);
GL11.glRotated(22.5, 0, 0, 1);
GL11.glRotated(handle[1], 0, 1, 0);
GL11.glRotated(-22.5, 0, 0, 1);
GL11.glTranslated(0, -0.625, -5.25);
ResourceManager.g3.renderPart("Handle"); ResourceManager.g3.renderPart("Handle");
GL11.glPopMatrix(); GL11.glPopMatrix();
@ -87,27 +106,35 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
GL11.glTranslated(0, -0.875, -3.5); GL11.glTranslated(0, -0.875, -3.5);
GL11.glRotated(-30 * (1 - ItemGunBaseNT.getMode(stack, 0)), 1, 0, 0); GL11.glRotated(-30 * (1 - ItemGunBaseNT.getMode(stack, 0)), 1, 0, 0);
GL11.glTranslated(0, 0.875, 3.5); GL11.glTranslated(0, 0.875, 3.5);
ResourceManager.g3.renderPart("Selector_Rifle.001"); ResourceManager.g3.renderPart("Selector");
GL11.glPopMatrix();
double smokeScale = 0.75;
GL11.glPushMatrix();
GL11.glTranslated(0, 0, 13);
GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(smokeScale, smokeScale, smokeScale);
this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.5D);
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT); if(silenced || isScoped) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.g3_attachments);
if(silenced) ResourceManager.g3.renderPart("Silencer");
if(isScoped) ResourceManager.g3.renderPart("Scope");
}
GL11.glPushMatrix(); if(!silenced) {
GL11.glTranslated(0, 0, 12); double smokeScale = 0.75;
GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(-25 + gun.shotRand * 10, 1, 0, 0); GL11.glPushMatrix();
GL11.glScaled(0.75, 0.75, 0.75); GL11.glTranslated(0, 0, 13);
this.renderMuzzleFlash(gun.lastShot[0], 75, 10); GL11.glRotated(90, 0, 1, 0);
GL11.glPopMatrix(); GL11.glScaled(smokeScale, smokeScale, smokeScale);
this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.5D);
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPushMatrix();
GL11.glTranslated(0, 0, 12);
GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(-25 + gun.shotRand * 10, 1, 0, 0);
GL11.glScaled(0.75, 0.75, 0.75);
this.renderMuzzleFlash(gun.lastShot[0], 75, 10);
GL11.glPopMatrix();
}
} }
@Override @Override
@ -122,11 +149,19 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
@Override @Override
public void setupInv(ItemStack stack) { public void setupInv(ItemStack stack) {
super.setupInv(stack); super.setupInv(stack);
double scale = 0.875D; if(hasStock(stack)) {
GL11.glScaled(scale, scale, scale); double scale = 0.875D;
GL11.glRotated(25, 1, 0, 0); GL11.glScaled(scale, scale, scale);
GL11.glRotated(45, 0, 1, 0); GL11.glRotated(25, 1, 0, 0);
GL11.glTranslated(-0.5, 0.5, 0); GL11.glRotated(hasSilencer(stack) ? 50 : 45, 0, 1, 0);
GL11.glTranslated(hasSilencer(stack) ? 0.75 : -0.5, 0.5, 0);
} else {
double scale = 1.125D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(hasSilencer(stack) ? 55 : 45, 0, 1, 0); //preserves proportions whilst limiting size
GL11.glTranslated(2.5, 0.5, 0);
}
} }
@Override @Override
@ -141,22 +176,49 @@ public class ItemRenderG3 extends ItemRenderWeaponBase {
public void renderOther(ItemStack stack, ItemRenderType type) { public void renderOther(ItemStack stack, ItemRenderType type) {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
boolean silenced = hasSilencer(stack);
boolean isScoped = this.isScoped(stack);
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.g3_tex); Minecraft.getMinecraft().renderEngine.bindTexture(getTexture(stack));
ResourceManager.g3.renderPart("Rifle"); ResourceManager.g3.renderPart("Rifle");
ResourceManager.g3.renderPart("Stock"); if(hasStock(stack)) ResourceManager.g3.renderPart("Stock");
ResourceManager.g3.renderPart("Magazine"); ResourceManager.g3.renderPart("Magazine");
ResourceManager.g3.renderPart("Flash_Hider"); if(!silenced)ResourceManager.g3.renderPart("Flash_Hider");
ResourceManager.g3.renderPart("Bolt"); ResourceManager.g3.renderPart("Guide_And_Bolt");
ResourceManager.g3.renderPart("Handle"); ResourceManager.g3.renderPart("Handle");
ResourceManager.g3.renderPart("Trigger_Rifle.002"); ResourceManager.g3.renderPart("Trigger");
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(0, -0.875, -3.5); GL11.glTranslated(0, -0.875, -3.5);
GL11.glRotated(-30, 1, 0, 0); GL11.glRotated(-30, 1, 0, 0);
GL11.glTranslated(0, 0.875, 3.5); GL11.glTranslated(0, 0.875, 3.5);
ResourceManager.g3.renderPart("Selector_Rifle.001"); ResourceManager.g3.renderPart("Selector");
GL11.glPopMatrix(); GL11.glPopMatrix();
if(silenced || isScoped) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.g3_attachments);
if(silenced) ResourceManager.g3.renderPart("Silencer");
if(isScoped) ResourceManager.g3.renderPart("Scope");
}
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public boolean hasStock(ItemStack stack) {
return !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_STOCK);
}
public boolean hasSilencer(ItemStack stack) {
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SILENCER);
}
public boolean isScoped(ItemStack stack) {
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
}
public ResourceLocation getTexture(ItemStack stack) {
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_GREEN)) return ResourceManager.g3_green_tex;
if(WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_FURNITURE_BLACK)) return ResourceManager.g3_black_tex;
return ResourceManager.g3_tex;
}
} }

View File

@ -3,6 +3,7 @@ package com.hbm.render.item.weapon.sedna;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -34,7 +35,7 @@ public class ItemRenderGreasegun extends ItemRenderWeaponBase {
public void renderFirstPerson(ItemStack stack) { public void renderFirstPerson(ItemStack stack) {
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.greasegun_tex); Minecraft.getMinecraft().renderEngine.bindTexture(isRefurbished(stack) ? ResourceManager.greasegun_clean_tex : ResourceManager.greasegun_tex);
double scale = 0.375D; double scale = 0.375D;
GL11.glScaled(scale, scale, scale); GL11.glScaled(scale, scale, scale);
@ -146,8 +147,12 @@ public class ItemRenderGreasegun extends ItemRenderWeaponBase {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.greasegun_tex); Minecraft.getMinecraft().renderEngine.bindTexture(isRefurbished(stack) ? ResourceManager.greasegun_clean_tex : ResourceManager.greasegun_tex);
ResourceManager.greasegun.renderAll(); ResourceManager.greasegun.renderAll();
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public boolean isRefurbished(ItemStack stack) {
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_GREASEGUN_CLEAN);
}
} }

View File

@ -4,6 +4,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -116,12 +117,6 @@ public class ItemRenderHeavyRevolver extends ItemRenderWeaponBase {
GL11.glTranslated(0.125, 2.5, 0); GL11.glTranslated(0.125, 2.5, 0);
this.renderGapFlash(gun.lastShot[0]); this.renderGapFlash(gun.lastShot[0]);
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(-9.5, 2.5, 0);
GL11.glRotated(90 * gun.shotRand, 1, 0, 0);
//this.renderMuzzleFlash(gun.lastShot);
GL11.glPopMatrix();
} }
@Override @Override
@ -181,6 +176,6 @@ public class ItemRenderHeavyRevolver extends ItemRenderWeaponBase {
} }
public boolean isScoped(ItemStack stack) { public boolean isScoped(ItemStack stack) {
return stack.getItem() == ModItems.gun_heavy_revolver_lilmac; return stack.getItem() == ModItems.gun_heavy_revolver_lilmac || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
} }
} }

View File

@ -5,6 +5,7 @@ import java.nio.DoubleBuffer;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -20,7 +21,7 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase {
@Override @Override
public float getViewFOV(ItemStack stack, float fov) { public float getViewFOV(ItemStack stack, float fov) {
float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp; float aimingProgress = ItemGunBaseNT.prevAimingProgress + (ItemGunBaseNT.aimingProgress - ItemGunBaseNT.prevAimingProgress) * interp;
return fov * (1 - aimingProgress * 0.33F); return fov * (1 - aimingProgress * (isScoped(stack) ? 0.66F : 0.33F));
} }
@Override @Override
@ -28,18 +29,24 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase {
GL11.glTranslated(0, 0, 0.875); GL11.glTranslated(0, 0, 0.875);
float offset = 0.8F; float offset = 0.8F;
standardAimingTransform(stack,
if(isScoped(stack)) {
standardAimingTransform(stack,
-1.5F * offset, -1.25F * offset, 1.75F * offset, -1.5F * offset, -1.25F * offset, 1.75F * offset,
0, -4.6825 / 8D, 0.75); -0.2, -5.875 / 8D, 1.125);
/*standardAimingTransform(stack, } else {
-1.5F * offset, -1.25F * offset, 1.75F * offset, standardAimingTransform(stack,
-0.2, -5.875 / 8D, 1.125);*/ -1.5F * offset, -1.25F * offset, 1.75F * offset,
0, -4.6825 / 8D, 0.75);
}
} }
private static DoubleBuffer buf = null; private static DoubleBuffer buf = null;
@Override @Override
public void renderFirstPerson(ItemStack stack) { public void renderFirstPerson(ItemStack stack) {
boolean isScoped = isScoped(stack);
if(isScoped && ItemGunBaseNT.prevAimingProgress == 1 && ItemGunBaseNT.aimingProgress == 1) return;
if(buf == null) buf = GLAllocation.createDirectByteBuffer(8*4).asDoubleBuffer(); if(buf == null) buf = GLAllocation.createDirectByteBuffer(8*4).asDoubleBuffer();
ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem(); ItemGunBaseNT gun = (ItemGunBaseNT) stack.getItem();
@ -57,16 +64,20 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase {
double[] showClip = HbmAnimations.getRelevantTransformation("SHOW_CLIP"); double[] showClip = HbmAnimations.getRelevantTransformation("SHOW_CLIP");
double[] clip = HbmAnimations.getRelevantTransformation("CLIP"); double[] clip = HbmAnimations.getRelevantTransformation("CLIP");
double[] bullets = HbmAnimations.getRelevantTransformation("BULLETS"); double[] bullets = HbmAnimations.getRelevantTransformation("BULLETS");
double[] stab = HbmAnimations.getRelevantTransformation("STAB");
GL11.glTranslated(0, -3, -3); GL11.glTranslated(0, -3, -3);
GL11.glRotated(equip[0], 1, 0, 0); GL11.glRotated(equip[0], 1, 0, 0);
GL11.glRotated(lift[0], 1, 0, 0); GL11.glRotated(lift[0], 1, 0, 0);
GL11.glTranslated(0, 3, 3); GL11.glTranslated(0, 3, 3);
GL11.glTranslated(stab[0], stab[1], stab[2]);
GL11.glTranslated(0, 0, recoil[2]); GL11.glTranslated(0, 0, recoil[2]);
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.mas36.renderPart("Gun"); ResourceManager.mas36.renderPart("Gun");
if(hasBayonet(stack)) ResourceManager.mas36.renderPart("Bayonet");
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(0, 0.3125, -2.125); GL11.glTranslated(0, 0.3125, -2.125);
@ -88,7 +99,7 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase {
ResourceManager.mas36.renderPart("Bullet"); ResourceManager.mas36.renderPart("Bullet");
GL11.glPopMatrix(); GL11.glPopMatrix();
//ResourceManager.mas36.renderPart("Scope"); if(isScoped) ResourceManager.mas36.renderPart("Scope");
if(showClip[0] != 0) { if(showClip[0] != 0) {
GL11.glPushMatrix(); GL11.glPushMatrix();
@ -161,8 +172,8 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase {
ResourceManager.mas36.renderPart("Gun"); ResourceManager.mas36.renderPart("Gun");
ResourceManager.mas36.renderPart("Stock"); ResourceManager.mas36.renderPart("Stock");
ResourceManager.mas36.renderPart("Bolt"); ResourceManager.mas36.renderPart("Bolt");
//ResourceManager.mas36.renderPart("Scope"); if(isScoped(stack)) ResourceManager.mas36.renderPart("Scope");
//ResourceManager.mas36.renderPart("Bayonet"); if(hasBayonet(stack)) ResourceManager.mas36.renderPart("Bayonet");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
@ -175,9 +186,17 @@ public class ItemRenderMAS36 extends ItemRenderWeaponBase {
ResourceManager.mas36.renderPart("Gun"); ResourceManager.mas36.renderPart("Gun");
ResourceManager.mas36.renderPart("Stock"); ResourceManager.mas36.renderPart("Stock");
ResourceManager.mas36.renderPart("Bolt"); ResourceManager.mas36.renderPart("Bolt");
//ResourceManager.mas36.renderPart("Scope"); if(isScoped(stack)) ResourceManager.mas36.renderPart("Scope");
GL11.glTranslated(0, -1, -6); GL11.glTranslated(0, -1, -6);
//ResourceManager.mas36.renderPart("Bayonet"); if(hasBayonet(stack)) ResourceManager.mas36.renderPart("Bayonet");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public boolean isScoped(ItemStack stack) {
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SCOPE);
}
public boolean hasBayonet(ItemStack stack) {
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_MAS_BAYONET);
}
} }

View File

@ -4,6 +4,7 @@ import org.lwjgl.opengl.GL11;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -170,6 +171,6 @@ public class ItemRenderMaresleg extends ItemRenderWeaponBase {
} }
public boolean getShort(ItemStack stack) { public boolean getShort(ItemStack stack) {
return stack.getItem() == ModItems.gun_maresleg_broken; return stack.getItem() == ModItems.gun_maresleg_broken || WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_SAWED_OFF);
} }
} }

View File

@ -3,6 +3,7 @@ package com.hbm.render.item.weapon.sedna;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -53,7 +54,7 @@ public class ItemRenderPanzerschreck extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.panzerschreck.renderPart("Tube"); ResourceManager.panzerschreck.renderPart("Tube");
ResourceManager.panzerschreck.renderPart("Shield"); if(hasShield(stack)) ResourceManager.panzerschreck.renderPart("Shield");
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(rocket[0], rocket[1], rocket[2]); GL11.glTranslated(rocket[0], rocket[1], rocket[2]);
@ -104,7 +105,11 @@ public class ItemRenderPanzerschreck extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.panzerschreck_tex); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.panzerschreck_tex);
ResourceManager.panzerschreck.renderPart("Tube"); ResourceManager.panzerschreck.renderPart("Tube");
ResourceManager.panzerschreck.renderPart("Shield"); if(hasShield(stack)) ResourceManager.panzerschreck.renderPart("Shield");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public boolean hasShield(ItemStack stack) {
return !WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_NO_SHIELD);
}
} }

View File

@ -3,6 +3,7 @@ package com.hbm.render.item.weapon.sedna;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -65,6 +66,9 @@ public class ItemRenderUzi extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.uzi.renderPart("Gun"); ResourceManager.uzi.renderPart("Gun");
boolean silenced = hasSilencer(stack, 0);
if(silenced) ResourceManager.uzi.renderPart("Silencer");
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(0, 0.3125D, -5.75); GL11.glTranslated(0, 0.3125D, -5.75);
GL11.glRotated(180 - stockFront[0], 1, 0, 0); GL11.glRotated(180 - stockFront[0], 1, 0, 0);
@ -88,23 +92,25 @@ public class ItemRenderUzi extends ItemRenderWeaponBase {
if(bullet[0] == 1) ResourceManager.uzi.renderPart("Bullet"); if(bullet[0] == 1) ResourceManager.uzi.renderPart("Bullet");
GL11.glPopMatrix(); GL11.glPopMatrix();
double smokeScale = 0.5; if(!silenced) {
double smokeScale = 0.5;
GL11.glPushMatrix();
GL11.glTranslated(0, 0.75, 8.5); GL11.glPushMatrix();
GL11.glRotated(90, 0, 1, 0); GL11.glTranslated(0, 0.75, 8.5);
GL11.glScaled(smokeScale, smokeScale, smokeScale); GL11.glRotated(90, 0, 1, 0);
this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.75D); GL11.glScaled(smokeScale, smokeScale, smokeScale);
GL11.glPopMatrix(); this.renderSmokeNodes(gun.getConfig(stack, 0).smokeNodes, 0.75D);
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPushMatrix();
GL11.glTranslated(0, 0.75, 8.5); GL11.glPushMatrix();
GL11.glRotated(90, 0, 1, 0); GL11.glTranslated(0, 0.75, 8.5);
GL11.glRotated(90 * gun.shotRand, 1, 0, 0); GL11.glRotated(90, 0, 1, 0);
this.renderMuzzleFlash(gun.lastShot[0], 75, 7.5); GL11.glRotated(90 * gun.shotRand, 1, 0, 0);
GL11.glPopMatrix(); this.renderMuzzleFlash(gun.lastShot[0], 75, 7.5);
GL11.glPopMatrix();
}
} }
@Override @Override
@ -133,7 +139,7 @@ public class ItemRenderUzi extends ItemRenderWeaponBase {
} }
@Override @Override
public void renderOther(ItemStack stack, ItemRenderType type) { public void renderModTable(ItemStack stack, int index) {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
@ -143,6 +149,34 @@ public class ItemRenderUzi extends ItemRenderWeaponBase {
ResourceManager.uzi.renderPart("StockFront"); ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide"); ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(hasSilencer(stack, index)) ResourceManager.uzi.renderPart("Silencer");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
@Override
public void renderOther(ItemStack stack, ItemRenderType type) {
GL11.glEnable(GL11.GL_LIGHTING);
boolean silenced = hasSilencer(stack, 0);
if(silenced) {
double scale = 0.625D;
GL11.glScaled(scale, scale, scale);
GL11.glTranslated(0, 0, -4);
}
GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex);
ResourceManager.uzi.renderPart("Gun");
ResourceManager.uzi.renderPart("StockBack");
ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine");
if(silenced) ResourceManager.uzi.renderPart("Silencer");
GL11.glShadeModel(GL11.GL_FLAT);
}
public boolean hasSilencer(ItemStack stack, int cfg) {
return WeaponModManager.hasUpgrade(stack, cfg, WeaponModManager.ID_SILENCER);
}
} }

View File

@ -3,6 +3,7 @@ package com.hbm.render.item.weapon.sedna;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations; import com.hbm.render.anim.HbmAnimations;
@ -56,7 +57,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
double[] speen = HbmAnimations.getRelevantTransformation("SPEEN", index); double[] speen = HbmAnimations.getRelevantTransformation("SPEEN", index);
GL11.glTranslated(yeet[0], yeet[1], yeet[2]); GL11.glTranslated(yeet[0], yeet[1], yeet[2]);
GL11.glRotated(speen[0], 0, 0, 1); GL11.glRotated(speen[0], 0, 0, i);
GL11.glTranslated(0, -2, -4); GL11.glTranslated(0, -2, -4);
GL11.glRotated(equip[0], 1, 0, 0); GL11.glRotated(equip[0], 1, 0, 0);
@ -70,6 +71,9 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
ResourceManager.uzi.renderPart(index == 0 ? "GunMirror" : "Gun"); ResourceManager.uzi.renderPart(index == 0 ? "GunMirror" : "Gun");
boolean silenced = hasSilencer(stack, index);
if(silenced) ResourceManager.uzi.renderPart("Silencer");
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(0, 0.3125D, -5.75); GL11.glTranslated(0, 0.3125D, -5.75);
@ -93,24 +97,26 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(bullet[0] == 1) ResourceManager.uzi.renderPart("Bullet"); if(bullet[0] == 1) ResourceManager.uzi.renderPart("Bullet");
GL11.glPopMatrix(); GL11.glPopMatrix();
double smokeScale = 0.5;
GL11.glPushMatrix(); if(!silenced) {
GL11.glTranslated(0, 0.75, 8.5); double smokeScale = 0.5;
GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(smokeScale, smokeScale, smokeScale); GL11.glPushMatrix();
this.renderSmokeNodes(gun.getConfig(stack, index).smokeNodes, 0.75D); GL11.glTranslated(0, 0.75, 8.5);
GL11.glPopMatrix(); GL11.glRotated(90, 0, 1, 0);
GL11.glScaled(smokeScale, smokeScale, smokeScale);
GL11.glShadeModel(GL11.GL_FLAT); this.renderSmokeNodes(gun.getConfig(stack, index).smokeNodes, 0.75D);
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(0, 0.75, 8.5); GL11.glShadeModel(GL11.GL_FLAT);
GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(90 * gun.shotRand, 1, 0, 0); GL11.glPushMatrix();
this.renderMuzzleFlash(gun.lastShot[index], 75, 7.5); GL11.glTranslated(0, 0.75, 8.5);
GL11.glPopMatrix(); GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(90 * gun.shotRand, 1, 0, 0);
this.renderMuzzleFlash(gun.lastShot[index], 75, 7.5);
GL11.glPopMatrix();
}
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
@ -156,6 +162,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
ResourceManager.uzi.renderPart("StockFront"); ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide"); ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(hasSilencer(stack, 1)) ResourceManager.uzi.renderPart("Silencer");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
@ -169,6 +176,7 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
ResourceManager.uzi.renderPart("StockFront"); ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide"); ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(hasSilencer(stack, 0)) ResourceManager.uzi.renderPart("Silencer");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
@ -178,11 +186,12 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex);
ResourceManager.uzi.renderPart(index == 1 ? "GunMirror" : "Gun"); ResourceManager.uzi.renderPart(index == 0 ? "GunMirror" : "Gun");
ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockBack");
ResourceManager.uzi.renderPart("StockFront"); ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide"); ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(hasSilencer(stack, index)) ResourceManager.uzi.renderPart("Silencer");
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
@ -191,6 +200,10 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH); GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.uzi_tex);
boolean silencer0 = hasSilencer(stack, 1);
boolean silencer1 = hasSilencer(stack, 0);
boolean anySilenced = silencer0 || silencer1;
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glRotated(225, 0, 0, 1); GL11.glRotated(225, 0, 0, 1);
@ -198,11 +211,17 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
GL11.glRotated(25, 1, 0, 0); GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(45, 0, 1, 0); GL11.glRotated(45, 0, 1, 0);
GL11.glTranslated(0, 1, 0); GL11.glTranslated(0, 1, 0);
if(anySilenced) {
double scale = 0.625D;
GL11.glScaled(scale, scale, scale);
GL11.glTranslated(0, 0, -4);
}
ResourceManager.uzi.renderPart("Gun"); ResourceManager.uzi.renderPart("Gun");
ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockBack");
ResourceManager.uzi.renderPart("StockFront"); ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide"); ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(silencer0) ResourceManager.uzi.renderPart("Silencer");
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glTranslated(0, 0, 5); GL11.glTranslated(0, 0, 5);
@ -214,13 +233,23 @@ public class ItemRenderUziAkimbo extends ItemRenderWeaponBase {
GL11.glRotated(25, 1, 0, 0); GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(-45, 0, 1, 0); GL11.glRotated(-45, 0, 1, 0);
GL11.glTranslated(0, 1, 0); GL11.glTranslated(0, 1, 0);
if(anySilenced) {
double scale = 0.625D;
GL11.glScaled(scale, scale, scale);
GL11.glTranslated(0, 0, -4);
}
ResourceManager.uzi.renderPart("GunMirror"); ResourceManager.uzi.renderPart("GunMirror");
ResourceManager.uzi.renderPart("StockBack"); ResourceManager.uzi.renderPart("StockBack");
ResourceManager.uzi.renderPart("StockFront"); ResourceManager.uzi.renderPart("StockFront");
ResourceManager.uzi.renderPart("Slide"); ResourceManager.uzi.renderPart("Slide");
ResourceManager.uzi.renderPart("Magazine"); ResourceManager.uzi.renderPart("Magazine");
if(silencer1) ResourceManager.uzi.renderPart("Silencer");
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public boolean hasSilencer(ItemStack stack, int cfg) {
return WeaponModManager.hasUpgrade(stack, cfg, WeaponModManager.ID_SILENCER);
}
} }

View File

@ -22,7 +22,6 @@ import com.hbm.inventory.recipes.RotaryFurnaceRecipes.RotaryFurnaceRecipe;
import com.hbm.lib.Library; import com.hbm.lib.Library;
import com.hbm.main.MainRegistry; import com.hbm.main.MainRegistry;
import com.hbm.module.ModuleBurnTime; import com.hbm.module.ModuleBurnTime;
import com.hbm.packet.PacketDispatcher;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.tileentity.*; import com.hbm.tileentity.*;
import com.hbm.util.CrucibleUtil; import com.hbm.util.CrucibleUtil;

View File

@ -48,20 +48,22 @@ public class CompatRecipeRegistry {
public static void registerPress(StampType stamp, AStack input, ItemStack output) { public static void registerPress(StampType stamp, AStack input, ItemStack output) {
PressRecipes.recipes.put(new Pair(input, stamp), output); PressRecipes.recipes.put(new Pair(input, stamp), output);
} }
/** Same loose rules as BlastFurnaceRecipes, valid inputs are Items, Blocks, ItemStacks, ComparableStacks, Strings (for oredict) and DictFrames */ /** Same loose rules as BlastFurnaceRecipes, valid inputs are Items, Blocks, ItemStacks, ComparableStacks, Strings (for oredict) and DictFrames */
public static void registerBlastFurnace(Object[] inputs, ItemStack output) { public static void registerBlastFurnace(Object[] inputs, ItemStack output) {
if(inputs.length != 2) return; if(inputs.length != 2) return;
BlastFurnaceRecipes.addRecipe(inputs[0], inputs[1], output); BlastFurnaceRecipes.addRecipe(inputs[0], inputs[1], output);
} }
public static void registerShredder(AStack input, ItemStack output) { public static void registerShredder(AStack input, ItemStack output) {
for(ItemStack allItems : input.extractForNEI()) { for(ItemStack allItems : input.extractForNEI()) {
ComparableStack comp = new ComparableStack(allItems); ComparableStack comp = new ComparableStack(allItems);
ShredderRecipes.shredderRecipes.put(comp, output); ShredderRecipes.shredderRecipes.put(comp, output);
if (ShredderRecipes.neiShredderRecipes != null)
ShredderRecipes.neiShredderRecipes.put(comp, output);
} }
} }
/** Items should strictly be categorized as pcb, topping or solder. An item that is used as a topping in one recipe should not be a pcb in another. /** Items should strictly be categorized as pcb, topping or solder. An item that is used as a topping in one recipe should not be a pcb in another.
* This is because the soldering station's item IO will automatically place items based on this category, and having items in more than one category would break it. */ * This is because the soldering station's item IO will automatically place items based on this category, and having items in more than one category would break it. */
public static void registerSoldering(ItemStack output, int time, long power, FluidStack fluid, AStack[] toppings, AStack[] pcb, AStack[] solder) { public static void registerSoldering(ItemStack output, int time, long power, FluidStack fluid, AStack[] toppings, AStack[] pcb, AStack[] solder) {
@ -77,29 +79,29 @@ public class CompatRecipeRegistry {
if(outputFluids != null) recipe.outputFluids(copyFirst(outputFluids, 2)); if(outputFluids != null) recipe.outputFluids(copyFirst(outputFluids, 2));
ChemplantRecipes.recipes.add(recipe); ChemplantRecipes.recipes.add(recipe);
} }
/** Either solid or liquid output can be null */ /** Either solid or liquid output can be null */
public static void registerCombination(AStack input, ItemStack output, FluidStack fluid) { public static void registerCombination(AStack input, ItemStack output, FluidStack fluid) {
if(output == null && fluid == null) return; if(output == null && fluid == null) return;
Object o = input instanceof OreDictStack ? ((OreDictStack) input).name : input; Object o = input instanceof OreDictStack ? ((OreDictStack) input).name : input;
CombinationRecipes.recipes.put(o, new Pair(output, fluid)); CombinationRecipes.recipes.put(o, new Pair(output, fluid));
} }
/** Crucible recipes need unique IDs, game will crash when an ID collision is detected! */ /** Crucible recipes need unique IDs, game will crash when an ID collision is detected! */
public static void registerCrucible(int index, String name, int frequency, ItemStack icon, MaterialStack[] input, MaterialStack[] output) { public static void registerCrucible(int index, String name, int frequency, ItemStack icon, MaterialStack[] input, MaterialStack[] output) {
CrucibleRecipe recipe = new CrucibleRecipe(index, name, frequency, icon).inputs(input).outputs(output); CrucibleRecipe recipe = new CrucibleRecipe(index, name, frequency, icon).inputs(input).outputs(output);
CrucibleRecipes.recipes.add(recipe); CrucibleRecipes.recipes.add(recipe);
} }
public static void registerCentrifuge(AStack input, ItemStack[] outputs) { public static void registerCentrifuge(AStack input, ItemStack[] outputs) {
CentrifugeRecipes.recipes.put(input, copyFirst(outputs, 4)); CentrifugeRecipes.recipes.put(input, copyFirst(outputs, 4));
} }
public static void registerCrystallizer(AStack input, ItemStack output, int time, float productivity, FluidStack fluid) { public static void registerCrystallizer(AStack input, ItemStack output, int time, float productivity, FluidStack fluid) {
CrystallizerRecipe recipe = new CrystallizerRecipe(output, time).prod(productivity); CrystallizerRecipe recipe = new CrystallizerRecipe(output, time).prod(productivity);
CrystallizerRecipes.registerRecipe(input instanceof OreDictStack ? ((OreDictStack) input).name : input, recipe, fluid); CrystallizerRecipes.registerRecipe(input instanceof OreDictStack ? ((OreDictStack) input).name : input, recipe, fluid);
} }
/** Fractions always use 100mB of input fluid per operation. None of the outputs can be null. */ /** Fractions always use 100mB of input fluid per operation. None of the outputs can be null. */
public static void registerFraction(FluidType input, FluidStack[] output) { public static void registerFraction(FluidType input, FluidStack[] output) {
if(output.length != 2) return; if(output.length != 2) return;
@ -111,7 +113,7 @@ public class CompatRecipeRegistry {
if(output.length != 2) return; if(output.length != 2) return;
CrackingRecipes.cracking.put(input, new Pair(output[0], output[1])); CrackingRecipes.cracking.put(input, new Pair(output[0], output[1]));
} }
/** Reforming always uses 100mB of input fluid per operation. None of the outputs can be null. */ /** Reforming always uses 100mB of input fluid per operation. None of the outputs can be null. */
public static void registerReforming(FluidType input, FluidStack[] output) { public static void registerReforming(FluidType input, FluidStack[] output) {
output = copyFirst(output, 3); output = copyFirst(output, 3);
@ -125,87 +127,87 @@ public class CompatRecipeRegistry {
if(output.length < 2) return; if(output.length < 2) return;
HydrotreatingRecipes.recipes.put(input, new Triplet(hydrogen, output[0], output[1])); HydrotreatingRecipes.recipes.put(input, new Triplet(hydrogen, output[0], output[1]));
} }
public static void registerLiquefaction(AStack input, FluidStack output) { public static void registerLiquefaction(AStack input, FluidStack output) {
LiquefactionRecipes.recipes.put(input instanceof OreDictStack ? ((OreDictStack) input).name : input, output); LiquefactionRecipes.recipes.put(input instanceof OreDictStack ? ((OreDictStack) input).name : input, output);
} }
public static void registerSolidifying(FluidStack input, ItemStack output) { public static void registerSolidifying(FluidStack input, ItemStack output) {
SolidificationRecipes.recipes.put(input.type, new Pair(input.fill, output)); SolidificationRecipes.recipes.put(input.type, new Pair(input.fill, output));
} }
public static void registerCoker(FluidStack input, ItemStack output, FluidStack fluid) { public static void registerCoker(FluidStack input, ItemStack output, FluidStack fluid) {
CokerRecipes.recipes.put(input.type, new Triplet(input.fill, output, fluid)); CokerRecipes.recipes.put(input.type, new Triplet(input.fill, output, fluid));
} }
/** Registers a coker recipe based on the standardized fluid to coke values */ /** Registers a coker recipe based on the standardized fluid to coke values */
public static void registerCokerAuto(FluidType input, FluidType output) { public static void registerCokerAuto(FluidType input, FluidType output) {
CokerRecipes.registerAuto(input, output); CokerRecipes.registerAuto(input, output);
} }
public static void registerPyro(FluidStack inputFluid, AStack inputItem, FluidStack outputFluid, ItemStack outputItem, int duration) { public static void registerPyro(FluidStack inputFluid, AStack inputItem, FluidStack outputFluid, ItemStack outputItem, int duration) {
PyroOvenRecipes.recipes.add(new PyroOvenRecipe(duration).in(inputFluid).in(inputItem).out(outputFluid).out(outputItem)); PyroOvenRecipes.recipes.add(new PyroOvenRecipe(duration).in(inputFluid).in(inputItem).out(outputFluid).out(outputItem));
} }
/** Registers a pyro oven recipe based on the standardized fluid to solid fuel values */ /** Registers a pyro oven recipe based on the standardized fluid to solid fuel values */
public static void registerPyroAuto(FluidType input) { public static void registerPyroAuto(FluidType input) {
PyroOvenRecipes.registerSFAuto(input); PyroOvenRecipes.registerSFAuto(input);
} }
/** Breeding reactor does not handle OreDictStacks */ /** Breeding reactor does not handle OreDictStacks */
public static void registerBreeder(ComparableStack input, ItemStack output, int flux) { public static void registerBreeder(ComparableStack input, ItemStack output, int flux) {
BreederRecipes.recipes.put(input, new BreederRecipe(output, flux)); BreederRecipes.recipes.put(input, new BreederRecipe(output, flux));
} }
public static void registerCyclotron(ComparableStack box, AStack target, ItemStack output, int antimatter) { public static void registerCyclotron(ComparableStack box, AStack target, ItemStack output, int antimatter) {
CyclotronRecipes.recipes.put(new Pair(box, target), new Pair(output, antimatter)); CyclotronRecipes.recipes.put(new Pair(box, target), new Pair(output, antimatter));
} }
/** Fuel pools do not handle OreDictStacks */ /** Fuel pools do not handle OreDictStacks */
public static void registerFuelPool(ComparableStack input, ItemStack output) { public static void registerFuelPool(ComparableStack input, ItemStack output) {
FuelPoolRecipes.recipes.put(input, output); FuelPoolRecipes.recipes.put(input, output);
} }
//TBI mixer //TBI mixer
public static void registerOutgasser(AStack input, ItemStack output, FluidStack fluid) { public static void registerOutgasser(AStack input, ItemStack output, FluidStack fluid) {
OutgasserRecipes.recipes.put(input, new Pair(output, fluid)); OutgasserRecipes.recipes.put(input, new Pair(output, fluid));
} }
public static void registerCompressor(FluidStack input, FluidStack output, int time) { public static void registerCompressor(FluidStack input, FluidStack output, int time) {
CompressorRecipes.recipes.put(new Pair(input.type, input.pressure), new CompressorRecipe(input.fill, output, time)); CompressorRecipes.recipes.put(new Pair(input.type, input.pressure), new CompressorRecipe(input.fill, output, time));
} }
/** Byproduct array can be null, fluid output length must be 2 */ /** Byproduct array can be null, fluid output length must be 2 */
public static void registerElectrolyzerFluid(FluidStack input, FluidStack[] output, ItemStack[] byproduct, int time) { public static void registerElectrolyzerFluid(FluidStack input, FluidStack[] output, ItemStack[] byproduct, int time) {
output = copyFirst(output, 2); output = copyFirst(output, 2);
if(output.length < 2) return; if(output.length < 2) return;
if(byproduct != null) byproduct = copyFirst(byproduct, 3); if(byproduct != null) byproduct = copyFirst(byproduct, 3);
ElectrolyserFluidRecipes.recipes.put(input.type, new ElectrolysisRecipe(input.fill, output[0], output[1], time, byproduct)); ElectrolyserFluidRecipes.recipes.put(input.type, new ElectrolysisRecipe(input.fill, output[0], output[1], time, byproduct));
} }
/** Output array length must be 2, outputs can be null. Byproduct array can be null. */ /** Output array length must be 2, outputs can be null. Byproduct array can be null. */
public static void registerElectrolyzerMetal(AStack input, MaterialStack[] output, ItemStack[] byproduct, int time) { public static void registerElectrolyzerMetal(AStack input, MaterialStack[] output, ItemStack[] byproduct, int time) {
output = copyFirst(output, 2); output = copyFirst(output, 2);
if(byproduct != null) byproduct = copyFirst(byproduct, 6); if(byproduct != null) byproduct = copyFirst(byproduct, 6);
ElectrolyserMetalRecipes.recipes.put(input, new ElectrolysisMetalRecipe(output[0], output[1], time, byproduct)); ElectrolyserMetalRecipes.recipes.put(input, new ElectrolysisMetalRecipe(output[0], output[1], time, byproduct));
} }
public static void registerArcWelder(ItemStack output, int time, long power, FluidStack fluid, AStack[] inputs) { public static void registerArcWelder(ItemStack output, int time, long power, FluidStack fluid, AStack[] inputs) {
ArcWelderRecipes.recipes.add(new ArcWelderRecipe(output, time, power, fluid, copyFirst(inputs, 3))); ArcWelderRecipes.recipes.add(new ArcWelderRecipe(output, time, power, fluid, copyFirst(inputs, 3)));
} }
public static void registerRotaryFurnace(MaterialStack output, int time, int steam, FluidStack fluid, AStack[] inputs) { public static void registerRotaryFurnace(MaterialStack output, int time, int steam, FluidStack fluid, AStack[] inputs) {
RotaryFurnaceRecipes.recipes.add(new RotaryFurnaceRecipe(output, time, steam, fluid, copyFirst(inputs, 3))); RotaryFurnaceRecipes.recipes.add(new RotaryFurnaceRecipe(output, time, steam, fluid, copyFirst(inputs, 3)));
} }
/** Particles will always perform 8 recipes */ /** Particles will always perform 8 recipes */
public static void registerExposureChamber(AStack particle, AStack input, ItemStack output) { public static void registerExposureChamber(AStack particle, AStack input, ItemStack output) {
ExposureChamberRecipes.recipes.add(new ExposureChamberRecipe(particle, input, output)); ExposureChamberRecipes.recipes.add(new ExposureChamberRecipe(particle, input, output));
} }
/** Input needs two AStacks, output can take 1-2 ItemStacks. If the same recipe with different /** Input needs two AStacks, output can take 1-2 ItemStacks. If the same recipe with different
* momentum should yield different results, register the lower momentum recipes first. */ * momentum should yield different results, register the lower momentum recipes first. */
public static void registerParticleAccelerator(AStack[] input, int momentum, ItemStack[] output) { public static void registerParticleAccelerator(AStack[] input, int momentum, ItemStack[] output) {
@ -215,47 +217,47 @@ public class CompatRecipeRegistry {
if(output.length < 1) return; if(output.length < 1) return;
ParticleAcceleratorRecipes.recipes.add(new ParticleAcceleratorRecipe(input[0], input[1], momentum, output[0], output.length > 1 ? output[1] : null)); ParticleAcceleratorRecipes.recipes.add(new ParticleAcceleratorRecipe(input[0], input[1], momentum, output[0], output.length > 1 ? output[1] : null));
} }
public static void registerAmmoPress(ItemStack output, AStack[] input) { public static void registerAmmoPress(ItemStack output, AStack[] input) {
if(input.length != 9) return; if(input.length != 9) return;
AmmoPressRecipes.recipes.add(new AmmoPressRecipe(output, input)); AmmoPressRecipes.recipes.add(new AmmoPressRecipe(output, input));
} }
public static void registerAssembler(ItemStack output, AStack[] input, int time) { public static void registerAssembler(ItemStack output, AStack[] input, int time) {
AssemblerRecipes.makeRecipe(new ComparableStack(output), copyFirst(input, 12), time); AssemblerRecipes.makeRecipe(new ComparableStack(output), copyFirst(input, 12), time);
} }
/** Registers an assembler recipe but with the template only being obtainable via the specified folders */ /** Registers an assembler recipe but with the template only being obtainable via the specified folders */
public static void registerAssembler(ItemStack output, AStack[] input, int time, Item... folder) { public static void registerAssembler(ItemStack output, AStack[] input, int time, Item... folder) {
AssemblerRecipes.makeRecipe(new ComparableStack(output), copyFirst(input, 12), time, folder); AssemblerRecipes.makeRecipe(new ComparableStack(output), copyFirst(input, 12), time, folder);
} }
public static void registerAnvilConstruction(AStack[] input, AnvilOutput[] output, int tier, int overlayIndex) { public static void registerAnvilConstruction(AStack[] input, AnvilOutput[] output, int tier, int overlayIndex) {
AnvilRecipes.constructionRecipes.add(new AnvilConstructionRecipe(input, output).setTier(tier).setOverlay(EnumUtil.grabEnumSafely(OverlayType.class, overlayIndex))); AnvilRecipes.constructionRecipes.add(new AnvilConstructionRecipe(input, output).setTier(tier).setOverlay(EnumUtil.grabEnumSafely(OverlayType.class, overlayIndex)));
} }
public static void registerAnvilConstruction(AStack[] input, AnvilOutput[] output, int tierLower, int tierUpper, int overlayIndex) { public static void registerAnvilConstruction(AStack[] input, AnvilOutput[] output, int tierLower, int tierUpper, int overlayIndex) {
AnvilRecipes.constructionRecipes.add(new AnvilConstructionRecipe(input, output).setTierRange(tierLower, tierUpper).setOverlay(EnumUtil.grabEnumSafely(OverlayType.class, overlayIndex))); AnvilRecipes.constructionRecipes.add(new AnvilConstructionRecipe(input, output).setTierRange(tierLower, tierUpper).setOverlay(EnumUtil.grabEnumSafely(OverlayType.class, overlayIndex)));
} }
public static void registerPedestal(ItemStack output, AStack[] input) { public static void registerPedestal(ItemStack output, AStack[] input) {
registerPedestal(output, input, 0); registerPedestal(output, input, 0);
} }
public static void registerPedestal(ItemStack output, AStack[] input, int condition) { public static void registerPedestal(ItemStack output, AStack[] input, int condition) {
input = copyFirst(input, 9); input = copyFirst(input, 9);
if(input.length < 9) return; if(input.length < 9) return;
PedestalRecipes.recipes.add(new PedestalRecipe(output, input).extra(EnumUtil.grabEnumSafely(PedestalExtraCondition.class, condition))); PedestalRecipes.recipes.add(new PedestalRecipe(output, input).extra(EnumUtil.grabEnumSafely(PedestalExtraCondition.class, condition)));
} }
/** Either output or fluid can be null */ /** Either output or fluid can be null */
public static void registerArcFurnace(AStack input, ItemStack output, MaterialStack fluid) { public static void registerArcFurnace(AStack input, ItemStack output, MaterialStack fluid) {
if(output == null && fluid == null) return; if(output == null && fluid == null) return;
ArcFurnaceRecipes.recipeList.add(new Pair(input, new ArcFurnaceRecipe().solid(output).fluid(fluid))); ArcFurnaceRecipes.recipeList.add(new Pair(input, new ArcFurnaceRecipe().solid(output).fluid(fluid)));
} }
///////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////
/** If the supplied array exceeds the specified length, creates a copy and trunkates the array. Otherwise, returns the original array */ /** If the supplied array exceeds the specified length, creates a copy and trunkates the array. Otherwise, returns the original array */
private static <T> T[] copyFirst(T[] array, int amount) { private static <T> T[] copyFirst(T[] array, int amount) {
if(array.length <= amount) return array; if(array.length <= amount) return array;

View File

@ -461,6 +461,7 @@ container.uf6_tank=UF6 Tank
container.vacuumDistill=Vakuumraffinerie container.vacuumDistill=Vakuumraffinerie
container.wasteDrum=Abklingbecken-Trommel container.wasteDrum=Abklingbecken-Trommel
container.watzPowerplant=Watzkraftwerk container.watzPowerplant=Watzkraftwerk
container.weaponsTable=Waffenmodifikationstisch
container.zirnox=ZIRNOX Atomreaktor container.zirnox=ZIRNOX Atomreaktor
crucible.aa=Herstellung - Fortgeschrittene Legierung crucible.aa=Herstellung - Fortgeschrittene Legierung
@ -1266,6 +1267,11 @@ item.ammo_standard.p22_ap.name=.22 lfB Patrone (Panzerbrechend)
item.ammo_standard.p22_fmj.name=.22 lfB Patrone (Vollmantelgeschoss) item.ammo_standard.p22_fmj.name=.22 lfB Patrone (Vollmantelgeschoss)
item.ammo_standard.p22_jhp.name=.22 lfB Patrone (Hohlspitz) item.ammo_standard.p22_jhp.name=.22 lfB Patrone (Hohlspitz)
item.ammo_standard.p22_sp.name=.22 lfB Patrone (Teilmantelgeschoss) item.ammo_standard.p22_sp.name=.22 lfB Patrone (Teilmantelgeschoss)
item.ammo_standard.p45_ap.name=.45 Patrone (Panzerbrechend)
item.ammo_standard.p45_du.name=.45 Patrone (Urangeschoss)
item.ammo_standard.p45_fmj.name=.45 Patrone (Vollmantelgeschoss)
item.ammo_standard.p45_jhp.name=.45 Patrone (Hohlspitz)
item.ammo_standard.p45_sp.name=.45 Patrone (Teilmantelgeschoss)
item.ammo_standard.p9_ap.name=9mm Patrone (Panzerbrechend) item.ammo_standard.p9_ap.name=9mm Patrone (Panzerbrechend)
item.ammo_standard.p9_fmj.name=9mm Patrone (Vollmantelgeschoss) item.ammo_standard.p9_fmj.name=9mm Patrone (Vollmantelgeschoss)
item.ammo_standard.p9_jhp.name=9mm Patrone (Hohlspitz) item.ammo_standard.p9_jhp.name=9mm Patrone (Hohlspitz)
@ -2206,162 +2212,67 @@ item.grenade_zomg.name=Negativenergie-Paarvernichtungsgranate
item.gun_aberrator.name=Aberrator item.gun_aberrator.name=Aberrator
item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_aberrator_eott.name=Eyes Of The Tempest
item.gun_am180.name=Schallgedämpfte Maschinenpistole item.gun_am180.name=Schallgedämpfte Maschinenpistole
item.gun_ar15.name=Josh
item.gun_autoshotgun.name=Auto-Flinte item.gun_autoshotgun.name=Auto-Flinte
item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_sexy.name=Sexy
item.gun_autoshotgun_shredder.name=Shredder item.gun_autoshotgun_shredder.name=Shredder
item.gun_avenger.name=CZ57 Avenger-Minigun
item.gun_b92.name=§9B92 Energiepistole§r item.gun_b92.name=§9B92 Energiepistole§r
item.gun_b92_ammo.name=§9B92-Energiezelle§r item.gun_b92_ammo.name=§9B92-Energiezelle§r
item.gun_b93.name=§cB93 Energiemod§r
item.gun_bf.name=BEL
item.gun_bf_ammo.name=Balefire-Geschoss
item.gun_bio_revolver.name=Atlas
item.gun_bolt_action.name=Dream-Repetiergewehr (Original)
item.gun_bolt_action_ammo.name=12x74 Brenneke (LEGACY)
item.gun_bolt_action_green.name=Dream-Repetiergewehr (Grün)
item.gun_bolt_action_saturnite.name=Saturnitbüchse
item.gun_bolter.name=Boltergewehr item.gun_bolter.name=Boltergewehr
item.gun_bolter_digamma.name=Digammagewehr
item.gun_calamity.name=Knochensäge
item.gun_calamity_ammo.name=.50 BMG Patrone (LEGACY)
item.gun_calamity_dual.name=Sattelkanone
item.gun_carbine.name=Karabiner item.gun_carbine.name=Karabiner
item.gun_chemthrower.name=Chemowerfer item.gun_chemthrower.name=Chemowerfer
item.gun_coilgun.name=Gaußpistole item.gun_coilgun.name=Gaußpistole
item.gun_cryocannon.name=Kyro-Kanone item.gun_cryocannon.name=Kyro-Kanone
item.gun_cryolator.name=Der Cryolator
item.gun_cryolator_ammo.name=Kryozelle item.gun_cryolator_ammo.name=Kryozelle
item.gun_dampfmaschine.name=Garantiert keine Scherzwaffe
item.gun_darter.name=Dartgewehr
item.gun_deagle.name=Großes Eisen
item.gun_defabricator.name=Defabrikator
item.gun_defabricator_ammo.name=Defabrikator-Energiezelle
item.gun_detonator.name=Laserzünder item.gun_detonator.name=Laserzünder
item.gun_double_barrel.name=Ein alter Klassiker item.gun_double_barrel.name=Ein alter Klassiker
item.gun_double_barrel_sacred_dragon.name=Sacred Dragon item.gun_double_barrel_sacred_dragon.name=Sacred Dragon
item.gun_emp.name=EMP-Waffe item.gun_fatman.name=Fat Man
item.gun_emp_ammo.name=Energiezelle
item.gun_euthanasia.name=Euthanasia
item.gun_euthanasia_ammo.name=Spritze
item.gun_fatman.name=M42 Nukleares Katapult "Fat Man"
item.gun_fatman_ammo.name=Miniatombombe (LEGACY)
item.gun_fireext.name=Feuerlöscher item.gun_fireext.name=Feuerlöscher
item.gun_flamer.name=Flammenwerfer item.gun_flamer.name=Flammenwerfer
item.gun_flamer_daybreaker.name=Daybreaker item.gun_flamer_daybreaker.name=Daybreaker
item.gun_flamer_topaz.name=Mister Topaz item.gun_flamer_topaz.name=Mister Topaz
item.gun_flaregun.name=Signalpistole item.gun_flaregun.name=Signalpistole
item.gun_flechette.name=Flechet-Gewehr
item.gun_folly.name=Folly item.gun_folly.name=Folly
item.gun_g3.name=Sturmgewehr item.gun_g3.name=Sturmgewehr
item.gun_g3_a3.name=G3A3
item.gun_g3_infiltrator.name=Infiltrierer
item.gun_greasegun.name=Grease Gun item.gun_greasegun.name=Grease Gun
item.gun_greasegun_m3.name=M3
item.gun_hangman.name=Hangman item.gun_hangman.name=Hangman
item.gun_heavy_revolver.name=Schwerer Revolver item.gun_heavy_revolver.name=Schwerer Revolver
item.gun_heavy_revolver_lilmac.name=Little Macintosh item.gun_heavy_revolver_lilmac.name=Little Macintosh
item.gun_heavy_revolver_protege.name=Protège item.gun_heavy_revolver_protege.name=Protège
item.gun_heavy_revolver_scoped.name=.44er Magnum mit Zielvorrichtung
item.gun_henry.name=Repetiergewehr item.gun_henry.name=Repetiergewehr
item.gun_henry_lincoln.name=Lincolns Repetiergewehr item.gun_henry_lincoln.name=Lincolns Repetiergewehr
item.gun_hk69.name=Granatenpistole
item.gun_hp.name=HPP Lazerjet
item.gun_hp_ammo.name=Tintenpatrone
item.gun_immolator.name=Der Immolator
item.gun_immolator_ammo.name=Immolatorkraftstoff
item.gun_jack.name=Jackhammer
item.gun_jack_ammo.name=Vierfache Schrotpatrone
item.gun_karl.name=Karl
item.gun_kit_1.name=Waffenöl item.gun_kit_1.name=Waffenöl
item.gun_kit_2.name=Waffenreparatursatz item.gun_kit_2.name=Waffenreparatursatz
item.gun_ks23.name=Samuel die dicke Flinte
item.gun_lacunae.name=CZ33 Abaddon
item.gun_lacunae_ammo.name=5mm Patrone (LEGACY)
item.gun_lag.name=Komisch lange Pistole item.gun_lag.name=Komisch lange Pistole
item.gun_lasrifle.name=Lasergewehr item.gun_lasrifle.name=Lasergewehr
item.gun_lever_action.name=Mare's Leg (Original)
item.gun_lever_action_ammo.name=12x74 Schrotmunition (LEGACY)
item.gun_lever_action_dark.name=Mare's Leg (Dunkel)
item.gun_lever_action_sonata.name=Verkehrter Mare's Leg
item.gun_lever_action_sonata_2.name=§cSonatas Mikrophon§r
item.gun_liberator.name=Liberator item.gun_liberator.name=Liberator
item.gun_light_revolver.name=Kipplaufrevolver item.gun_light_revolver.name=Kipplaufrevolver
item.gun_light_revolver_atlas.name=Atlas item.gun_light_revolver_atlas.name=Atlas
item.gun_light_revolver_dani.name=Tag und Nacht item.gun_light_revolver_dani.name=Tag und Nacht
item.gun_lunatic_marksman.name=Lunatic-Scharfschützengewehr
item.gun_m2.name=üsMG item.gun_m2.name=üsMG
item.gun_maresleg.name=Repetierflinte item.gun_maresleg.name=Repetierflinte
item.gun_maresleg_akimbo.name=Repetierflinten item.gun_maresleg_akimbo.name=Repetierflinten
item.gun_maresleg_broken.name=Broken item.gun_maresleg_broken.name=Broken
item.gun_maresleg_short.name=Mare's Leg
item.gun_mas36.name=Südstern item.gun_mas36.name=Südstern
item.gun_minigun.name=Minigun item.gun_minigun.name=Minigun
item.gun_minigun_lacunae.name=Lacunae item.gun_minigun_lacunae.name=Lacunae
item.gun_mirv.name=M42 Nukleares Katapult "Experimentelles MIRV"
item.gun_mirv_ammo.name=Achtfaches MIRV (LEGACY)
item.gun_missile_launcher.name=Raketenwerfer item.gun_missile_launcher.name=Raketenwerfer
item.gun_moist_nugget.name=Mosin-Nagant
item.gun_mp.name=Maschinengewehr des Pazifisten
item.gun_mp40.name=Maschinenpistole
item.gun_mp40_ammo.name=SMG-Patrone (LEGACY)
item.gun_pepperbox.name=Bündelrevolver item.gun_pepperbox.name=Bündelrevolver
item.gun_pm_ammo.name=Kleine treibmittellose MG-Patrone
item.gun_mymy.name=Nietes
item.gun_osipr.name=Standartausrüstung für Sicherheitskräfte
item.gun_osipr_ammo.name=Dunkler Energiepuls-Plug
item.gun_osipr_ammo2.name=Combine Ball
item.gun_panzerschreck.name=Panzerschreck item.gun_panzerschreck.name=Panzerschreck
item.gun_proto.name=M42 Nukleares Katapult "Proto MIRV"
item.gun_quadro.name=Vierfachraketenwerfer item.gun_quadro.name=Vierfachraketenwerfer
item.gun_remington.name=バイデン ブラスト [BIDEN BLAST]
item.gun_revolver.name=Verbesserter Revolver
item.gun_revolver_ammo.name=Bleipatrone
item.gun_revolver_blackjack.name=Blackjack Five-Shooter
item.gun_revolver_cursed.name=Verfluchte Pistole
item.gun_revolver_cursed_ammo.name=Stahlpatrone
item.gun_revolver_gold.name=Goldener Revolver
item.gun_revolver_gold_ammo.name=Goldene Kugel
item.gun_revolver_inverted.name=Umgedrehter Revolver
item.gun_revolver_iron.name=Einfacher Revolver
item.gun_revolver_iron_ammo.name=Patrone
item.gun_revolver_lead.name=Nuka-Revolver
item.gun_revolver_lead_ammo.name=Mit Glas umhüllte Atompatrone
item.gun_revolver_nightmare.name=Nightmare-Revolver (Original)
item.gun_revolver_nightmare2.name=Nightmare-Revolver (Dunkel)
item.gun_revolver_nightmare2_ammo.name=Laserschrot
item.gun_revolver_nightmare_ammo.name=Nightmare-Kugel
item.gun_revolver_nopip.name=Schwerer Revolver
item.gun_revolver_nopip_ammo.name=.44 Magnumpatrone (LEGACY)
item.gun_revolver_pip.name=Lil' Pipsqueak
item.gun_revolver_pip_ammo.name=Verdorbene Patrone (LEGACY)
item.gun_revolver_red.name=Roter Schlüssel-Revolver
item.gun_revolver_saturnite.name=Saturnitknarre
item.gun_revolver_schrabidium.name=Schrabidiumrevolver
item.gun_revolver_schrabidium_ammo.name=Schrabidiumpatrone
item.gun_revolver_silver.name=Geliehene Kanone
item.gun_rpg.name=Carl Gustav Reaktive Panzerbüchse
item.gun_rpg_ammo.name=Rakete
item.gun_sauer.name=Stan Sauers Schrotflinte
item.gun_skystinger.name=The One Sky Stinger
item.gun_spark.name=Die Zündkerze
item.gun_spark_ammo.name=Elektromagnetische Katusche
item.gun_spas12.name=SPAS-12 item.gun_spas12.name=SPAS-12
item.gun_stg77.name=StG 77 item.gun_stg77.name=StG 77
item.gun_stinger.name=FIM-92 Stinger item.gun_stinger.name=FIM-92 Stinger
item.gun_stinger_ammo.name=Stinger-Rakete (LEGACY)
item.gun_super_shotgun.name=Super Shotgun
item.gun_supershotgun.name=Super Shotgun
item.gun_tau.name=Taukanone item.gun_tau.name=Taukanone
item.gun_tesla_cannon.name=Teslakanone item.gun_tesla_cannon.name=Teslakanone
item.gun_thompson.name=Thompson Maschinenpistole
item.gun_uac_pistol.name=UAC .45 Pistole
item.gun_uboinik.name=Ubojnik
item.gun_uboinik_ammo.name=12x70 Schrotmunition (LEGACY)
item.gun_uzi.name=Uzi item.gun_uzi.name=Uzi
item.gun_uzi_richter.name=Richter
item.gun_uzi_akimbo.name=Uzis item.gun_uzi_akimbo.name=Uzis
item.gun_uzi_ammo.name=.22 lfB Patrone (LEGACY)
item.gun_uzi_saturnite.name=Saturnit-Uzi
item.gun_uzi_saturnite_silencer.name=Saturnit-Uzi mit Schalldämpfer
item.gun_uzi_silencer.name=IMI Uzi mit Schalldämpfer
item.gun_xvl1456.name=XVL1456 Tau-Kanone Prototyp
item.gun_xvl1456_ammo.name=Kiste mit erschöpftem Uran-235
item.gun_zomg.name=ZOMG Kanone
item.hand_drill.name=Handbohrer item.hand_drill.name=Handbohrer
item.hand_drill_desh.name=Desh-Handbohrer item.hand_drill_desh.name=Desh-Handbohrer
item.hazmat_boots.name=Strahlenschutzstiefel item.hazmat_boots.name=Strahlenschutzstiefel
@ -3782,14 +3693,44 @@ item.watz_pellet_depleted.nqd.name=Angereichertes Naquadah-Watzpellet (Erschöpf
item.watz_pellet_depleted.nqr.name=Naquadria-Watzpellet (Erschöpft) item.watz_pellet_depleted.nqr.name=Naquadria-Watzpellet (Erschöpft)
item.watz_pellet_depleted.hen.name=HEN-Watzpellet (Erschöpft) item.watz_pellet_depleted.hen.name=HEN-Watzpellet (Erschöpft)
item.watz_pellet_depleted.schrabidium.name=Schrabidium-Watzpellet (Erschöpft) item.watz_pellet_depleted.schrabidium.name=Schrabidium-Watzpellet (Erschöpft)
item.wd40.name=VT-40
item.weapon_bat.name=Richards Standard item.weapon_bat.name=Richards Standard
item.weapon_bat_nail.name=Das Klischee item.weapon_bat_nail.name=Das Klischee
item.weapon_golf_club.name=Schläger des russischen Mafiosos item.weapon_golf_club.name=Schläger des russischen Mafiosos
item.weapon_mod_generic.bigmt_damage.name=Optimierter Saturnit-Verschluss
item.weapon_mod_generic.bigmt_dura.name=Langlebige Saturnit-Teile
item.weapon_mod_generic.bronze_damage.name=Optimierter Bronzeverschluss
item.weapon_mod_generic.bronze_dura.name=Langlebige Bronzeteile
item.weapon_mod_generic.desh_damage.name=Optimierter Deshverschluss
item.weapon_mod_generic.desh_dura.name=Langlebige Deshteile
item.weapon_mod_generic.dura_damage.name=Optimierter HSS-Verschluss
item.weapon_mod_generic.dura_dura.name=Langlebige HSS-Teile
item.weapon_mod_generic.ferro_damage.name=Optimierter Ferrouranverschluss
item.weapon_mod_generic.ferro_dura.name=Langlebige Ferrouranteile
item.weapon_mod_generic.iron_damage.name=Optimierter Eisenverschluss
item.weapon_mod_generic.iron_dura.name=Langlebige Eisenteile
item.weapon_mod_generic.steel_damage.name=Optimierter Stahlverschluss
item.weapon_mod_generic.steel_dura.name=Langlebige Stahlteile
item.weapon_mod_generic.tcalloy_damage.name=Optimierter Legierungsverschluss
item.weapon_mod_generic.tcalloy_dura.name=Langlebige Legierungsteile
item.weapon_mod_generic.wsteel_damage.name=Optimierter Waffenstahl-Verschluss
item.weapon_mod_generic.wsteel_dura.name=Langlebige Waffenstahl-Teile
item.weapon_mod_special.bayonet.name=Bayonet
item.weapon_mod_special.choke.name=Choke
item.weapon_mod_special.furniture_black.name=Polymergriff (Schwarz)
item.weapon_mod_special.furniture_green.name=Polymergriff (Grün)
item.weapon_mod_special.greasegun.name=Grease Gun Modernisierungskit
item.weapon_mod_special.saw.name=Bügelsäge
item.weapon_mod_special.scope.name=Ziehlvorrichtung
item.weapon_mod_special.silencer.name=Schalldämpfer
item.weapon_mod_special.slowdown.name=Rädergetriebe
item.weapon_mod_special.speedloader.name=Schnelllader
item.weapon_mod_special.speedup.name=Elektrischer Servomotor
item.weapon_mod_special.stack_mag.name=Zweistapel-Magazin
item.weapon_pipe_lead.name=Die Handüberbrückung item.weapon_pipe_lead.name=Die Handüberbrückung
item.weapon_pipe_rusty.name=Der Einstellungskorrigierer item.weapon_pipe_rusty.name=Der Einstellungskorrigierer
item.weapon_saw.name=Ärztlich autorisierter Mord item.weapon_saw.name=Ärztlich autorisierter Mord
item.weaponized_starblaster_cell.name=§cManipulierte Sternenblaster-Energiezelle§r item.weaponized_starblaster_cell.name=§cManipulierte Sternenblaster-Energiezelle§r
item.wd40.name=VT-40
item.wild_p.name=Wild Pegasus Trockener Whisky item.wild_p.name=Wild Pegasus Trockener Whisky
item.wings_limp.name=Schlaffe Flügel item.wings_limp.name=Schlaffe Flügel
item.wings_murk.name=Trübe Flügel item.wings_murk.name=Trübe Flügel
@ -4630,6 +4571,7 @@ tile.machine_turbofan.name=Turbofan
tile.machine_uf6_tank.name=Uranhexafluorid-Tank tile.machine_uf6_tank.name=Uranhexafluorid-Tank
tile.machine_vacuum_distill.name=Vakuumraffinerie tile.machine_vacuum_distill.name=Vakuumraffinerie
tile.machine_waste_drum.name=Abklingbecken-Trommel tile.machine_waste_drum.name=Abklingbecken-Trommel
tile.machine_weapon_table.name=Waffenmodifikationstisch
tile.machine_wood_burner.name=Brennholzgenerator tile.machine_wood_burner.name=Brennholzgenerator
tile.machine_wood_burner.desc=Erzeugt 100HE/t aus Items$Sammelt Asche$Kann 40mB/s Flüssigkeiten mit 50%% Effizienz verbrennen tile.machine_wood_burner.desc=Erzeugt 100HE/t aus Items$Sammelt Asche$Kann 40mB/s Flüssigkeiten mit 50%% Effizienz verbrennen
tile.machine_well.name=Ölbohrturm tile.machine_well.name=Ölbohrturm

View File

@ -867,6 +867,7 @@ container.uf6_tank=UF6 Tank
container.vacuumDistill=Vacuum Refinery container.vacuumDistill=Vacuum Refinery
container.wasteDrum=Spent Fuel Pool Drum container.wasteDrum=Spent Fuel Pool Drum
container.watzPowerplant=Watz Power Plant container.watzPowerplant=Watz Power Plant
container.weaponsTable=Weapon Modification Table
container.zirnox=ZIRNOX Nuclear Reactor container.zirnox=ZIRNOX Nuclear Reactor
copytool.filter=Filter copytool.filter=Filter
@ -1991,6 +1992,11 @@ item.ammo_standard.p22_ap.name=.22 LR Round (Armor Piercing)
item.ammo_standard.p22_fmj.name=.22 LR Round (Full Metal Jacket) item.ammo_standard.p22_fmj.name=.22 LR Round (Full Metal Jacket)
item.ammo_standard.p22_jhp.name=.22 LR Round (Jacketed Hollow Point) item.ammo_standard.p22_jhp.name=.22 LR Round (Jacketed Hollow Point)
item.ammo_standard.p22_sp.name=.22 LR Round (Soft Point) item.ammo_standard.p22_sp.name=.22 LR Round (Soft Point)
item.ammo_standard.p45_ap.name=.45 Round (Armor Piercing)
item.ammo_standard.p45_du.name=.45 Round (Depleted Uranium)
item.ammo_standard.p45_fmj.name=.45 Round (Full Metal Jacket)
item.ammo_standard.p45_jhp.name=.45 Round (Jacketed Hollow Point)
item.ammo_standard.p45_sp.name=.45 Round (Soft Point)
item.ammo_standard.p9_ap.name=9mm Round (Armor Piercing) item.ammo_standard.p9_ap.name=9mm Round (Armor Piercing)
item.ammo_standard.p9_fmj.name=9mm Round (Full Metal Jacket) item.ammo_standard.p9_fmj.name=9mm Round (Full Metal Jacket)
item.ammo_standard.p9_jhp.name=9mm Round (Jacketed Hollow Point) item.ammo_standard.p9_jhp.name=9mm Round (Jacketed Hollow Point)
@ -3014,166 +3020,68 @@ item.glyphid_gland_empty.name= Glyphid's Fluid Gland
item.gun_aberrator.name=Aberrator item.gun_aberrator.name=Aberrator
item.gun_aberrator_eott.name=Eyes Of The Tempest item.gun_aberrator_eott.name=Eyes Of The Tempest
item.gun_am180.name=Silenced Submachine Gun item.gun_am180.name=Silenced Submachine Gun
item.gun_ar15.name=Josh
item.gun_autoshotgun.name=Auto Shotgun item.gun_autoshotgun.name=Auto Shotgun
item.gun_autoshotgun_sexy.name=Sexy item.gun_autoshotgun_sexy.name=Sexy
item.gun_autoshotgun_shredder.name=Shredder item.gun_autoshotgun_shredder.name=Shredder
item.gun_avenger.name=CZ57 Avenger Minigun
item.gun_b92.name=§9B92 Energy Pistol§r item.gun_b92.name=§9B92 Energy Pistol§r
item.gun_b92_ammo.name=§9B92 Energy Cell§r item.gun_b92_ammo.name=§9B92 Energy Cell§r
item.gun_b93.name=§cB93 Energy Mod§r
item.gun_benelli.name=Benelli Autoshotgun (Drum Mod)
item.gun_bf.name=BEL
item.gun_bf_ammo.name=Balefire Shell
item.gun_bio_revolver.name=Atlas
item.gun_bolt_action.name=Dream Bolt-Action Rifle (Original)
item.gun_bolt_action_ammo.name=12x74 Slug (LEGACY)
item.gun_bolt_action_green.name=Dream Bolt-Action Rifle (Green)
item.gun_bolt_action_saturnite.name=Saturnite Rifle
item.gun_bolter.name=Bolter item.gun_bolter.name=Bolter
item.gun_bolter_digamma.name=Digamma Gun
item.gun_calamity.name=Buzzsaw
item.gun_calamity_ammo.name=.50 BMG Round (LEGACY)
item.gun_calamity_dual.name=Saddle Gun
item.gun_carbine.name=Carbine item.gun_carbine.name=Carbine
item.gun_chemthrower.name=Chemthrower item.gun_chemthrower.name=Chemthrower
item.gun_coilgun.name=Coilgun item.gun_coilgun.name=Coilgun
item.gun_congolake.name=Congo Lake item.gun_congolake.name=Congo Lake
item.gun_cryocannon.name=Cryo Cannon item.gun_cryocannon.name=Cryo Cannon
item.gun_cryolator.name=The Cryolator
item.gun_cryolator_ammo.name=Cryo Cell item.gun_cryolator_ammo.name=Cryo Cell
item.gun_dampfmaschine.name=Totally Not a Joke Weapon
item.gun_darter.name=Dart Gun
item.gun_deagle.name=Big Iron
item.gun_defabricator.name=Defabricator
item.gun_defabricator_ammo.name=Defabricator Energy Cell
item.gun_detonator.name=Laser Detonator item.gun_detonator.name=Laser Detonator
item.gun_double_barrel.name=An Old Classic item.gun_double_barrel.name=An Old Classic
item.gun_double_barrel_sacred_dragon.name=Sacred Dragon item.gun_double_barrel_sacred_dragon.name=Sacred Dragon
item.gun_emp.name=EMP Gun item.gun_fatman.name=Fat Man
item.gun_emp_ammo.name=Energy Cell
item.gun_euthanasia.name=Euthanasia
item.gun_euthanasia_ammo.name=Syringe
item.gun_fatman.name=M42 Nuclear Catapult "Fat Man"
item.gun_fatman_ammo.name=Mini Nuke (LEGACY)
item.gun_fireext.name=Fire Extinguisher item.gun_fireext.name=Fire Extinguisher
item.gun_flamer.name=Flamethrower item.gun_flamer.name=Flamethrower
item.gun_flamer_daybreaker.name=Daybreaker item.gun_flamer_daybreaker.name=Daybreaker
item.gun_flamer_topaz.name=Mister Topaz item.gun_flamer_topaz.name=Mister Topaz
item.gun_flaregun.name=Flare Gun item.gun_flaregun.name=Flare Gun
item.gun_flechette.name=Flechette Rifle
item.gun_folly.name=Folly item.gun_folly.name=Folly
item.gun_g3.name=Assault Rifle item.gun_g3.name=Assault Rifle
item.gun_glass_cannon.name=The Glass Cannon item.gun_g3_a3.name=G3A3
item.gun_g3_infiltrator.name=Infiltrator
item.gun_greasegun.name=Grease Gun item.gun_greasegun.name=Grease Gun
item.gun_greasegun_m3.name=M3
item.gun_hangman.name=Hangman item.gun_hangman.name=Hangman
item.gun_heavy_revolver.name=Heavy Revolver item.gun_heavy_revolver.name=Heavy Revolver
item.gun_heavy_revolver_lilmac.name=Little Macintosh item.gun_heavy_revolver_lilmac.name=Little Macintosh
item.gun_heavy_revolver_protege.name=Protège item.gun_heavy_revolver_protege.name=Protège
item.gun_heavy_revolver_scoped.name=Scoped .44 Magnum
item.gun_henry.name=Lever Action Rifle item.gun_henry.name=Lever Action Rifle
item.gun_henry_lincoln.name=Lincoln's Repeater item.gun_henry_lincoln.name=Lincoln's Repeater
item.gun_hk69.name=Grenade Pistol
item.gun_hp.name=HPP Lazerjet
item.gun_hp_ammo.name=Ink Cartridge
item.gun_immolator.name=The Immolator
item.gun_immolator_ammo.name=Immolator Fuel
item.gun_jack.name=Jackhammer
item.gun_jack_ammo.name=Quadruple Shotgun Shell
item.gun_karl.name=Karl
item.gun_kit_1.name=Gun Oil item.gun_kit_1.name=Gun Oil
item.gun_kit_2.name=Gun Repair Kit item.gun_kit_2.name=Gun Repair Kit
item.gun_ks23.name=Samuel the Big Shotgun
item.gun_lacunae.name=CZ33 Abaddon
item.gun_lacunae_ammo.name=5mm Round (LEGACY)
item.gun_lag.name=Comically Long Pistol item.gun_lag.name=Comically Long Pistol
item.gun_lasrifle.name=Laser Rifle item.gun_lasrifle.name=Laser Rifle
item.gun_lever_action.name=Mare's Leg (Original)
item.gun_lever_action_ammo.name=12x74 Buckshot (LEGACY)
item.gun_lever_action_dark.name=Mare's Leg (Dark)
item.gun_lever_action_sonata.name=Flipped Mare's Leg
item.gun_lever_action_sonata_2.name=§cSonata's Microphone§r
item.gun_liberator.name=Liberator item.gun_liberator.name=Liberator
item.gun_light_revolver.name=Break-Action Revolver item.gun_light_revolver.name=Break-Action Revolver
item.gun_light_revolver_atlas.name=Atlas item.gun_light_revolver_atlas.name=Atlas
item.gun_light_revolver_dani.name=Day And Night item.gun_light_revolver_dani.name=Day And Night
item.gun_lunatic_marksman.name=Lunatic Sniper Rifle
item.gun_m2.name=Ma Deuce item.gun_m2.name=Ma Deuce
item.gun_maresleg.name=Lever Action Shotgun item.gun_maresleg.name=Lever Action Shotgun
item.gun_maresleg_akimbo.name=Lever Action Shotguns item.gun_maresleg_akimbo.name=Lever Action Shotguns
item.gun_maresleg_broken.name=Broken item.gun_maresleg_broken.name=Broken
item.gun_maresleg_short.name=Mare's Leg
item.gun_mas36.name=South Star item.gun_mas36.name=South Star
item.gun_minigun.name=Minigun item.gun_minigun.name=Minigun
item.gun_minigun_lacunae.name=Lacunae item.gun_minigun_lacunae.name=Lacunae
item.gun_mirv.name=M42 Nuclear Catapult "Experimental MIRV"
item.gun_mirv_ammo.name=Eightfold MIRV (LEGACY)
item.gun_missile_launcher.name=Missile Launcher item.gun_missile_launcher.name=Missile Launcher
item.gun_moist_nugget.name=Mosin-Nagant
item.gun_mp.name=Pacifist's Machine Gun
item.gun_mp40.name=Submachine Gun
item.gun_mp40_ammo.name=Submachine Gun Round (LEGACY)
item.gun_pepperbox.name=Pepperbox item.gun_pepperbox.name=Pepperbox
item.gun_pm_ammo.name=Small Propellantless Machine Gun Round
item.gun_mymy.name=Nietes
item.gun_osipr.name=Overwatch Standard Issue Pulse Rifle
item.gun_osipr_ammo.name=Dark Energy Pulse Plug
item.gun_osipr_ammo2.name=Combine Ball
item.gun_panzerschreck.name=Panzerschreck item.gun_panzerschreck.name=Panzerschreck
item.gun_proto.name=M42 Nuclear Catapult "Proto MIRV"
item.gun_quadro.name=Quad Rocket Launcher item.gun_quadro.name=Quad Rocket Launcher
item.gun_remington.name=バイデン ブラスト [BIDEN BLAST]
item.gun_revolver.name=Enhanced Revolver
item.gun_revolver_ammo.name=Lead Bullet
item.gun_revolver_blackjack.name=Blackjack Five-Shooter
item.gun_revolver_cursed.name=Cursed Revolver
item.gun_revolver_cursed_ammo.name=Steel Bullet
item.gun_revolver_gold.name=Golden Revolver
item.gun_revolver_gold_ammo.name=Golden Bullet
item.gun_revolver_inverted.name=Flipped Revolver
item.gun_revolver_iron.name=Simple Revolver
item.gun_revolver_iron_ammo.name=Bullet
item.gun_revolver_lead.name=Nuka Revolver
item.gun_revolver_lead_ammo.name=Glass Covered Nuclear Bullet
item.gun_revolver_nightmare.name=Nightmare Revolver (Original)
item.gun_revolver_nightmare2.name=Nightmare Revolver (Dark)
item.gun_revolver_nightmare2_ammo.name=Laser Buckshot
item.gun_revolver_nightmare_ammo.name=Nightmare Bullet
item.gun_revolver_nopip.name=Heavy Revolver
item.gun_revolver_nopip_ammo.name=.44 Magnum Bullet (LEGACY)
item.gun_revolver_pip.name=Lil' Pipsqueak
item.gun_revolver_pip_ammo.name=Tainted Bullet (LEGACY)
item.gun_revolver_red.name=Red Key Revolver
item.gun_revolver_saturnite.name=Saturnite Shooter
item.gun_revolver_schrabidium.name=Schrabidium Revolver
item.gun_revolver_schrabidium_ammo.name=Schrabidium Bullet
item.gun_revolver_silver.name=Lent Gun
item.gun_rpg.name=Carl Gustav Recoilless Rifle
item.gun_rpg_ammo.name=Rocket (LEGACY)
item.gun_sauer.name=Stan Sauer's Shotgun
item.gun_skystinger.name=The One Sky Stinger
item.gun_spark.name=Spark Plug
item.gun_spark_ammo.name=Electromagnetic Cartridge
item.gun_spas12.name=SPAS-12 item.gun_spas12.name=SPAS-12
item.gun_stg77.name=StG 77 item.gun_stg77.name=StG 77
item.gun_stinger.name=FIM-92 Stinger item.gun_stinger.name=FIM-92 Stinger
item.gun_stinger_ammo.name=Stinger Rocket (LEGACY)
item.gun_super_shotgun.name=Super Shotgun
item.gun_super_shotgun.desc=It's super broken!
item.gun_supershotgun.name=Super Shotgun
item.gun_tau.name=Tau Cannon item.gun_tau.name=Tau Cannon
item.gun_tesla_cannon.name=Tesla Cannon item.gun_tesla_cannon.name=Tesla Cannon
item.gun_thompson.name=Thompson Submachine Gun
item.gun_uac_pistol.name=UAC .45 Pistol
item.gun_uboinik.name=Uboinik
item.gun_uboinik_ammo.name=12x70 Buckshot (LEGACY)
item.gun_uzi.name=Uzi item.gun_uzi.name=Uzi
item.gun_uzi_richter.name=Richter
item.gun_uzi_akimbo.name=Uzis item.gun_uzi_akimbo.name=Uzis
item.gun_uzi_ammo.name=.22 LR Round (LEGACY)
item.gun_uzi_saturnite.name=Saturnite Uzi
item.gun_uzi_saturnite_silencer.name=Saturnite Uzi with Silencer
item.gun_uzi_silencer.name=IMI Uzi with Silencer
item.gun_xvl1456.name=XVL1456 Tau Cannon Prototype
item.gun_xvl1456_ammo.name=Depleted Uranium-235 Box
item.gun_zomg.name=ZOMG Cannon
item.hand_drill.name=Hand Drill item.hand_drill.name=Hand Drill
item.hand_drill_desh.name=Desh Hand Drill item.hand_drill_desh.name=Desh Hand Drill
item.hazmat_boots.name=Hazmat Boots item.hazmat_boots.name=Hazmat Boots
@ -4812,14 +4720,44 @@ item.watz_pellet_depleted.nqd.name=Enriched Naquadah Watz Pellet (Depleted)
item.watz_pellet_depleted.nqr.name=Naquadria Watz Pellet (Depleted) item.watz_pellet_depleted.nqr.name=Naquadria Watz Pellet (Depleted)
item.watz_pellet_depleted.hen.name=HEN Watz Pellet (Depleted) item.watz_pellet_depleted.hen.name=HEN Watz Pellet (Depleted)
item.watz_pellet_depleted.schrabidium.name=Schrabidium Watz Pellet (Depleted) item.watz_pellet_depleted.schrabidium.name=Schrabidium Watz Pellet (Depleted)
item.wd40.name=VT-40
item.weapon_bat.name=Richard's Default item.weapon_bat.name=Richard's Default
item.weapon_bat_nail.name=The Cliché item.weapon_bat_nail.name=The Cliché
item.weapon_golf_club.name=Russian Mobster's Club item.weapon_golf_club.name=Russian Mobster's Club
item.weapon_mod_generic.bigmt_damage.name=Optimized Saturnite Receiver
item.weapon_mod_generic.bigmt_dura.name=High-Durability Saturnite Parts
item.weapon_mod_generic.bronze_damage.name=Optimized Bronze Receiver
item.weapon_mod_generic.bronze_dura.name=High-Durability Bronze Parts
item.weapon_mod_generic.desh_damage.name=Optimized Desh Receiver
item.weapon_mod_generic.desh_dura.name=High-Durability Desh Parts
item.weapon_mod_generic.dura_damage.name=Optimized HSS Receiver
item.weapon_mod_generic.dura_dura.name=High-Durability HSS Parts
item.weapon_mod_generic.ferro_damage.name=Optimized Ferrouranium Receiver
item.weapon_mod_generic.ferro_dura.name=High-Durability Ferrouranium Parts
item.weapon_mod_generic.iron_damage.name=Optimized Iron Receiver
item.weapon_mod_generic.iron_dura.name=High-Durability Iron Parts
item.weapon_mod_generic.steel_damage.name=Optimized Steel Receiver
item.weapon_mod_generic.steel_dura.name=High-Durability Steel Parts
item.weapon_mod_generic.tcalloy_damage.name=Optimized Resistant Alloy Receiver
item.weapon_mod_generic.tcalloy_dura.name=High-Durability Resistant Alloy Parts
item.weapon_mod_generic.wsteel_damage.name=Optimized Weapon Steel Receiver
item.weapon_mod_generic.wsteel_dura.name=High-Durability Weapon Steel Parts
item.weapon_mod_special.bayonet.name=Bayonet
item.weapon_mod_special.choke.name=Choke
item.weapon_mod_special.furniture_black.name=Polymer Furniture (Black)
item.weapon_mod_special.furniture_green.name=Polymer Furniture (Green)
item.weapon_mod_special.greasegun.name=Grease Gun Modernization Kit
item.weapon_mod_special.saw.name=Hacksaw
item.weapon_mod_special.scope.name=Scope
item.weapon_mod_special.silencer.name=Silencer
item.weapon_mod_special.slowdown.name=Gear Train
item.weapon_mod_special.speedloader.name=Speedloader
item.weapon_mod_special.speedup.name=Auxiliary Electric Engine
item.weapon_mod_special.stack_mag.name=Double-Stacked Magazine
item.weapon_pipe_lead.name=The Manual Override item.weapon_pipe_lead.name=The Manual Override
item.weapon_pipe_rusty.name=The Attitude Adjuster item.weapon_pipe_rusty.name=The Attitude Adjuster
item.weapon_saw.name=Doctor Assisted Homicide item.weapon_saw.name=Doctor Assisted Homicide
item.weaponized_starblaster_cell.name=§cRigged Star Blaster Energy Cell§r item.weaponized_starblaster_cell.name=§cRigged Star Blaster Energy Cell§r
item.wd40.name=VT-40
item.wild_p.name=Wild Pegasus Dry Whiskey item.wild_p.name=Wild Pegasus Dry Whiskey
item.wings_limp.name=Limp Wings item.wings_limp.name=Limp Wings
item.wings_murk.name=Murky Wings item.wings_murk.name=Murky Wings
@ -5761,6 +5699,7 @@ tile.machine_turbofan.name=Turbofan
tile.machine_uf6_tank.name=Uranium Hexafluoride Tank tile.machine_uf6_tank.name=Uranium Hexafluoride Tank
tile.machine_vacuum_distill.name=Vacuum Refinery tile.machine_vacuum_distill.name=Vacuum Refinery
tile.machine_waste_drum.name=Spent Fuel Pool Drum tile.machine_waste_drum.name=Spent Fuel Pool Drum
tile.machine_weapon_table.name=Weapon Modification Table
tile.machine_wood_burner.name=Wood-Burning Generator tile.machine_wood_burner.name=Wood-Burning Generator
tile.machine_wood_burner.desc=Generates 100HE/t when burning items$Collects ashes$Can burn fluids at 50%% efficiency at 40mB/s tile.machine_wood_burner.desc=Generates 100HE/t when burning items$Collects ashes$Can burn fluids at 50%% efficiency at 40mB/s
tile.machine_well.name=Oil Derrick tile.machine_well.name=Oil Derrick

File diff suppressed because it is too large Load Diff

View File

@ -251,6 +251,7 @@
"weapon.fire.uzi": {"category": "player", "sounds": ["weapon/fire/uzi"]}, "weapon.fire.uzi": {"category": "player", "sounds": ["weapon/fire/uzi"]},
"weapon.fire.tesla": {"category": "player", "sounds": ["weapon/fire/tesla"]}, "weapon.fire.tesla": {"category": "player", "sounds": ["weapon/fire/tesla"]},
"weapon.fire.aberrator": {"category": "player", "sounds": ["weapon/fire/aberrator"]}, "weapon.fire.aberrator": {"category": "player", "sounds": ["weapon/fire/aberrator"]},
"weapon.fire.stab": {"category": "player", "sounds": ["weapon/fire/stab1", "weapon/fire/stab2"]},
"weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]}, "weapon.reload.boltClose": {"category": "player", "sounds": ["weapon/reload/boltClose"]},
"weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]}, "weapon.reload.boltOpen": {"category": "player", "sounds": ["weapon/reload/boltOpen"]},

Binary file not shown.

After

Width:  |  Height:  |  Size: 203 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 261 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 289 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 255 B

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 291 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 251 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 290 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 293 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.6 KiB

After

Width:  |  Height:  |  Size: 6.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 264 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 298 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 254 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 283 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 314 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 334 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 300 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 284 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 302 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 269 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 279 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 308 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 B

Some files were not shown because too many files have changed in this diff Show More