Compare commits

..

No commits in common. "04708e8c90157be08443176a17f41f779f0fda3d" and "84344889b7bdfdbc4dab3d0dc3b1c2414e324e3b" have entirely different histories.

23 changed files with 256 additions and 436 deletions

View File

@ -2,14 +2,6 @@
* Target pistol * Target pistol
* Weapon steel tier pistol that holds 15 rounds and shoots .22 LR * Weapon steel tier pistol that holds 15 rounds and shoots .22 LR
* Accepts silencers * Accepts silencers
* NCR Ranger Power Armor
* Legendary set, like the remnants power armor
* Stats are largely similar, but has a speed boost when sprinting
* Comes with the power armor - melee controller item
* If the full set is equipped, the melee controller allows for powerful melee attacks
* Left click does two rapid swings, right click causes both arms to swing at once
* The NCRPA's blades are armor-piercing and gib enemies on death
* The blades do 250% damage on large enemies, i.e. ones with 100 or more max health
## Changed ## Changed
* Reworked the industrial turbine * Reworked the industrial turbine
@ -32,14 +24,6 @@
* Cleaned up a ton of unused assets * Cleaned up a ton of unused assets
* The old crucible smelting rules when not using a template can be restores with the `/ntmserver` value `LEGACY_CRUCIBLE_RULES` * The old crucible smelting rules when not using a template can be restores with the `/ntmserver` value `LEGACY_CRUCIBLE_RULES`
* Due to repeated complaints, power armor sounds are now generally more quiet, with 25% volume for steps and 50% volume for jumping and landing * Due to repeated complaints, power armor sounds are now generally more quiet, with 25% volume for steps and 50% volume for jumping and landing
* Reduced mask man's projectile resistance from 75% to 50%
* Reduced maskman's resistance to damage above 50 from 75% to 50%
* Remnants power armor can now use the melee controller, allowing Sergeant Arch Dornan to beat the snot out of people
* Improved gibbing
* All cybercrab variants can now be gibbed, turning into metal fragments
* Iron golems now also turn into metal instead of fleshy chunks
* Slimes can now be gibbed, turning into slime globs
* Creepers now also gib into slime instead of blood
# Fixed # Fixed
* Fixed proxy tiles that do not use electricity at all visually connecting to cables * Fixed proxy tiles that do not use electricity at all visually connecting to cables

View File

@ -66,13 +66,17 @@ public class EntityMaskMan extends EntityMob implements IBossDisplayData, IRadia
return true; return true;
} }
if(source.isFireDamage()) amount = 0; if(source.isFireDamage())
if(source.isMagicDamage()) amount = 0; amount = 0;
if(source.isProjectile()) amount *= 0.5F; if(source.isMagicDamage())
if(source.isExplosion()) amount *= 0.5F; amount = 0;
if(source.isProjectile())
amount *= 0.25F;
if(source.isExplosion())
amount *= 0.5F;
if(amount > 50) { if(amount > 50) {
amount = 50 + (amount - 50) * 0.5F; amount = 50 + (amount - 50) * 0.25F;
} }
return super.attackEntityFrom(source, amount); return super.attackEntityFrom(source, amount);

View File

@ -1,12 +1,7 @@
package com.hbm.items.armor; package com.hbm.items.armor;
import java.util.UUID;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.google.common.collect.Multimap;
import com.hbm.extprop.HbmPlayerProps;
import com.hbm.items.ModItems;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase; import com.hbm.render.item.ItemRenderBase;
import com.hbm.render.model.ModelArmorNCRPA; import com.hbm.render.model.ModelArmorNCRPA;
@ -16,12 +11,9 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelBiped;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.attributes.AttributeModifier;
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.world.World;
import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer;
public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider, IPAWeaponsProvider { public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider, IPAWeaponsProvider {
@ -37,34 +29,13 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) { public ModelBiped getArmorModel(EntityLivingBase entityLiving, ItemStack itemStack, int armorSlot) {
if(models == null) { if(models == null) { models = new ModelArmorNCRPA[4];
models = new ModelArmorNCRPA[4];
for(int i = 0; i < 4; i++) models[i] = new ModelArmorNCRPA(i); for(int i = 0; i < 4; i++) models[i] = new ModelArmorNCRPA(i);
} }
return models[armorSlot]; return models[armorSlot];
} }
private static final UUID speed = UUID.fromString("6ab858ba-d712-485c-bae9-e5e765fc555a");
@Override
public void onArmorTick(World world, EntityPlayer player, ItemStack stack) {
super.onArmorTick(world, player, stack);
if(this != ModItems.ncrpa_plate) return;
HbmPlayerProps props = HbmPlayerProps.getData(player);
/// SPEED ///
Multimap multimap = super.getAttributeModifiers(stack);
multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(speed, "NCRPA SPEED", 0.1, 0));
player.getAttributeMap().removeAttributeModifiers(multimap);
if(player.isSprinting()) {
player.getAttributeMap().applyAttributeModifiers(multimap);
}
}
@Override public Item getItemForRenderer() { return this; } @Override public Item getItemForRenderer() { return this; }
@Override @Override

View File

@ -2,86 +2,15 @@ package com.hbm.items.armor;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.factory.ConfettiUtil;
import com.hbm.items.weapon.sedna.factory.XFactoryPA;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.HbmAnimations;
import com.hbm.render.anim.AnimationEnums.GunAnimation;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.util.EntityDamageUtil;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
public class ArmorNCRPAMelee implements IPAMelee { public class ArmorNCRPAMelee implements IPAMelee {
@Override public void clickPrimary(ItemStack stack, LambdaContext ctx) { XFactoryPA.doSwing(stack, ctx, GunAnimation.CYCLE, 25); } public void setupFirstPerson(ItemStack stack) { }
@Override public void clickSecondary(ItemStack stack, LambdaContext ctx) { XFactoryPA.doSwing(stack, ctx, GunAnimation.ALT_CYCLE, 30); }
@Override
public void orchestra(ItemStack stack, LambdaContext ctx) {
EntityLivingBase entity = ctx.entity;
if(entity.worldObj.isRemote) return;
GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
boolean swings = type == GunAnimation.CYCLE && (timer == 5 || timer == 15);
boolean sweep = type == GunAnimation.ALT_CYCLE && timer == 5;
if((swings || sweep) && ctx.getPlayer() != null) {
MovingObjectPosition mop = EntityDamageUtil.getMouseOver(ctx.getPlayer(), 3.0D);
if(mop != null) {
if(mop.typeOfHit == mop.typeOfHit.ENTITY && mop.entityHit.isEntityAlive()) {
float damage = swings ? 15F : 35F;
float knockback = swings ? 0F : 1.5F;
float dt = swings ? 5F : 15F;
float pierce = swings ? 0.1F : 0.25F;
if(mop.entityHit instanceof EntityLivingBase) {
EntityLivingBase living = (EntityLivingBase) mop.entityHit;
if(living.getMaxHealth() >= 100) damage *= 2.5;
EntityDamageUtil.attackEntityFromNT((EntityLivingBase) mop.entityHit, DamageSource.causePlayerDamage(ctx.getPlayer()), damage, true, false, knockback, dt, pierce);
if(!living.isEntityAlive()) ConfettiUtil.gib(living);
} else {
mop.entityHit.attackEntityFrom(DamageSource.causePlayerDamage(ctx.getPlayer()), damage);
}
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);
}
}
}
}
@Override
public BusAnimation playAnim(ItemStack stack, GunAnimation type) {
if(type == GunAnimation.EQUIP) return new BusAnimation()
.addBus("EQUIP", new BusAnimationSequence().setPos(-1, 0, 0).addPos(0, 0, 0, 750, IType.SIN_DOWN));
if(type == GunAnimation.CYCLE) return new BusAnimation()
.addBus("SWINGRIGHT", new BusAnimationSequence().addPos(1, 0, 0, 250, IType.SIN_DOWN).addPos(0, 0, 0, 500, IType.SIN_FULL))
.addBus("SWINGLEFT", new BusAnimationSequence().addPos(0, 0, 0, 500).addPos(1, 0, 0, 250, IType.SIN_DOWN).addPos(0, 0, 0, 500, IType.SIN_FULL));
if(type == GunAnimation.ALT_CYCLE) return new BusAnimation()
.addBus("SWEEPTURN", new BusAnimationSequence().addPos(1, 0, 0, 100, IType.LINEAR).hold(350).addPos(0, 0, 0, 500, IType.LINEAR))
.addBus("SWEEPCUT", new BusAnimationSequence().hold(100).addPos(1, 0, 0, 250, IType.SIN_DOWN).hold(100).addPos(0, 0, 0, 500, IType.SIN_FULL));
return null;
}
@Override public void setupFirstPerson(ItemStack stack) { }
@Override
public void renderFirstPerson(ItemStack stack) { public void renderFirstPerson(ItemStack stack) {
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.ncrpa_arm); Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.ncrpa_arm);
@ -89,38 +18,31 @@ public class ArmorNCRPAMelee implements IPAMelee {
double scale = 0.125D; double scale = 0.125D;
GL11.glScaled(scale, scale, scale); GL11.glScaled(scale, scale, scale);
double[] equip = HbmAnimations.getRelevantTransformation("EQUIP"); double forwardTilt = 60;
double swingRight = HbmAnimations.getRelevantTransformation("SWINGRIGHT")[0];
double swingLeft = HbmAnimations.getRelevantTransformation("SWINGLEFT")[0];
double sweepTurn = HbmAnimations.getRelevantTransformation("SWEEPTURN")[0];
double sweepCut = HbmAnimations.getRelevantTransformation("SWEEPCUT")[0];
double forwardTilt = 60 - 60 * equip[0];
double offsetOutward = 3; double offsetOutward = 3;
double roll = 60; double roll = 60;
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glRotated(forwardTilt, 1, 0, 0);
GL11.glTranslated(-14 * swingLeft - 4 * sweepTurn, 6 * sweepCut, 2 * swingLeft + 8 * sweepCut);
GL11.glRotated(forwardTilt + swingRight * 40 - 60 * sweepCut, 1, 0, 0);
GL11.glTranslated(offsetOutward, 0, 0); GL11.glTranslated(offsetOutward, 0, 0);
GL11.glTranslated(6, 8, 0); GL11.glTranslated(6, 8, 0);
GL11.glRotated(90 * swingLeft, 0, 0, 1); GL11.glRotated(roll, 0, 1, 0);
GL11.glRotated(roll + 30 * swingLeft - 90 * sweepTurn, 0, 1, 0); GL11.glRotated(10, 0, 0, 1);
GL11.glTranslated(-6, -8, 0); GL11.glTranslated(-6, -8, 0);
ResourceManager.armor_ncr.renderPart("LeftArm"); ResourceManager.armor_ncr.renderPart("LeftArm");
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glTranslated(14 * swingRight + 4 * sweepTurn, 6 * sweepCut, 2 * swingRight + 8 * sweepCut); //GL11.glTranslated(7, 0, 4);
GL11.glRotated(forwardTilt + swingLeft * 40 - 60 * sweepCut, 1, 0, 0);
GL11.glRotated(forwardTilt, 1, 0, 0);
GL11.glTranslated(-offsetOutward, 0, 0); GL11.glTranslated(-offsetOutward, 0, 0);
GL11.glTranslated(-6, 8, 0); GL11.glTranslated(-6, 8, 0);
GL11.glRotated(-90 * swingRight, 0, 0, 1); GL11.glRotated(-90, 0, 0, 1);
GL11.glRotated(-roll - 30 * swingRight + 90 * sweepTurn, 0, 1, 0); GL11.glRotated(-roll - 30, 0, 1, 0);
GL11.glTranslated(6, -8, 0); GL11.glTranslated(6, -8, 0);
ResourceManager.armor_ncr.renderPart("RightArm"); ResourceManager.armor_ncr.renderPart("RightArm");
GL11.glPopMatrix(); GL11.glPopMatrix();

View File

@ -11,12 +11,11 @@ import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelBiped; import net.minecraft.client.model.ModelBiped;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
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.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer;
public class ArmorRPA extends ArmorFSBPowered implements IItemRendererProvider, IPAWeaponsProvider { public class ArmorRPA extends ArmorFSBPowered implements IItemRendererProvider {
public ArmorRPA(ArmorMaterial material, int slot, String texture, long maxPower, long chargeRate, long consumption, long drain) { public ArmorRPA(ArmorMaterial material, int slot, String texture, long maxPower, long chargeRate, long consumption, long drain) {
super(material, slot, texture, maxPower, chargeRate, consumption, drain); super(material, slot, texture, maxPower, chargeRate, consumption, drain);
@ -53,12 +52,4 @@ public class ArmorRPA extends ArmorFSBPowered implements IItemRendererProvider,
"Head", "Body,Fan,Glow", "LeftArm", "RightArm", "LeftLeg", "RightLeg", "LeftBoot", "RightBoot"); "Head", "Body,Fan,Glow", "LeftArm", "RightArm", "LeftLeg", "RightLeg", "LeftBoot", "RightBoot");
}}; }};
} }
public static final ArmorRPAMelee meleeComponent = new ArmorRPAMelee();
@Override
public IPAMelee getMeleeComponent(EntityPlayer entity) {
if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent;
return null;
}
} }

View File

@ -1,128 +0,0 @@
package com.hbm.items.armor;
import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.items.weapon.sedna.factory.ConfettiUtil;
import com.hbm.items.weapon.sedna.factory.XFactoryPA;
import com.hbm.main.ResourceManager;
import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.HbmAnimations;
import com.hbm.render.anim.AnimationEnums.GunAnimation;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import com.hbm.util.EntityDamageUtil;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MovingObjectPosition;
public class ArmorRPAMelee implements IPAMelee {
@Override public void clickPrimary(ItemStack stack, LambdaContext ctx) { XFactoryPA.doSwing(stack, ctx, GunAnimation.CYCLE, 14); }
@Override public void clickSecondary(ItemStack stack, LambdaContext ctx) { XFactoryPA.doSwing(stack, ctx, GunAnimation.ALT_CYCLE, 20); }
@Override
public void orchestra(ItemStack stack, LambdaContext ctx) {
EntityLivingBase entity = ctx.entity;
if(entity.worldObj.isRemote) return;
GunAnimation type = ItemGunBaseNT.getLastAnim(stack, ctx.configIndex);
int timer = ItemGunBaseNT.getAnimTimer(stack, ctx.configIndex);
boolean swings = type == GunAnimation.CYCLE && (timer == 3 || timer == 9);
boolean slap = type == GunAnimation.ALT_CYCLE && timer == 8;
if((swings || slap) && ctx.getPlayer() != null) {
MovingObjectPosition mop = EntityDamageUtil.getMouseOver(ctx.getPlayer(), 3.0D);
if(mop != null) {
if(mop.typeOfHit == mop.typeOfHit.ENTITY) {
float damage = swings ? 15F : 35F;
float knockback = swings ? 0F : 1.5F;
float dt = swings ? 5F : 15F;
float pierce = swings ? 0.1F : 0.25F;
if(mop.entityHit instanceof EntityLivingBase) {
EntityLivingBase living = (EntityLivingBase) mop.entityHit;
if(living.getMaxHealth() >= 100) damage *= 2.5;
EntityDamageUtil.attackEntityFromNT((EntityLivingBase) mop.entityHit, DamageSource.causePlayerDamage(ctx.getPlayer()), damage, true, false, knockback, dt, pierce);
if(living.getRNG().nextInt(slap ? 3 : 10) == 0 && !living.isEntityAlive()) ConfettiUtil.gib(living);
} else {
mop.entityHit.attackEntityFrom(DamageSource.causePlayerDamage(ctx.getPlayer()), damage);
}
entity.worldObj.playSoundAtEntity(mop.entityHit, "hbm:weapon.fire.smack", 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);
}
}
}
}
@Override
public BusAnimation playAnim(ItemStack stack, GunAnimation type) {
if(type == GunAnimation.EQUIP) return new BusAnimation()
.addBus("EQUIP", new BusAnimationSequence().setPos(-1, 0, 0).addPos(0, 0, 0, 250, IType.SIN_DOWN));
if(type == GunAnimation.CYCLE) return new BusAnimation()
.addBus("SWINGRIGHT", new BusAnimationSequence().addPos(1, 0, 0, 150, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL))
.addBus("SWINGLEFT", new BusAnimationSequence().addPos(0, 0, 0, 300).addPos(1, 0, 0, 150, IType.SIN_DOWN).addPos(0, 0, 0, 250, IType.SIN_FULL));
if(type == GunAnimation.ALT_CYCLE) return new BusAnimation()
.addBus("SLAPTURN", new BusAnimationSequence().addPos(1, 0, 0, 250, IType.LINEAR).hold(150).addPos(0, 0, 0, 350, IType.LINEAR))
.addBus("SLAP", new BusAnimationSequence().hold(250).addPos(1, 0, 0, 150, IType.SIN_DOWN).addPos(0, 0, 0, 350, IType.SIN_FULL));
return null;
}
@Override public void setupFirstPerson(ItemStack stack) { }
@Override
public void renderFirstPerson(ItemStack stack) {
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.rpa_arm);
GL11.glTranslated(0, -1.5, 0.5);
double scale = 0.125D;
GL11.glScaled(scale, scale, scale);
double[] equip = HbmAnimations.getRelevantTransformation("EQUIP");
double swingRight = HbmAnimations.getRelevantTransformation("SWINGRIGHT")[0];
double swingLeft = HbmAnimations.getRelevantTransformation("SWINGLEFT")[0];
double slapTurn = HbmAnimations.getRelevantTransformation("SLAPTURN")[0];
double slap = HbmAnimations.getRelevantTransformation("SLAP")[0];
double forwardTilt = 60 - 60 * equip[0];
double offsetOutward = 3;
double roll = 60;
GL11.glPushMatrix();
GL11.glTranslated(-12 * swingLeft + 2 * slapTurn - 5 * slap, 6 * slap, 5 * swingLeft + 8 * slap);
GL11.glRotated(forwardTilt - swingRight * 20, 1, 0, 0);
GL11.glTranslated(offsetOutward, 0, 0);
GL11.glTranslated(6, 8, 0);
GL11.glRotated(60 * swingLeft + 45 * slap, 0, 0, 1);
GL11.glRotated(roll + 15 * swingLeft + 45 * slapTurn, 0, 1, 0);
GL11.glTranslated(-6, -8, 0);
ResourceManager.armor_remnant.renderPart("LeftArm");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslated(12 * swingRight - 2 * slapTurn + 5 * slap, 6 * slap, 5 * swingRight + 8 * slap);
GL11.glRotated(forwardTilt - swingLeft * 20, 1, 0, 0);
GL11.glTranslated(-offsetOutward, 0, 0);
GL11.glTranslated(-6, 8, 0);
GL11.glRotated(-60 * swingRight - 45 * slap, 0, 0, 1);
GL11.glRotated(-roll - 15 * swingRight - 45 * slapTurn, 0, 1, 0);
GL11.glTranslated(6, -8, 0);
ResourceManager.armor_remnant.renderPart("RightArm");
GL11.glPopMatrix();
}
}

View File

@ -1,19 +1,9 @@
package com.hbm.items.armor; package com.hbm.items.armor;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import com.hbm.render.anim.AnimationEnums.GunAnimation;
import com.hbm.render.anim.BusAnimation;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
public interface IPAMelee { public interface IPAMelee {
public void setupFirstPerson(ItemStack stack); public void setupFirstPerson(ItemStack stack);
public void renderFirstPerson(ItemStack stack); public void renderFirstPerson(ItemStack stack);
public BusAnimation playAnim(ItemStack stack, GunAnimation type);
public void orchestra(ItemStack stack, LambdaContext ctx);
public void clickPrimary(ItemStack stack, LambdaContext ctx);
public void clickSecondary(ItemStack stack, LambdaContext ctx);
} }

View File

@ -3,7 +3,6 @@ package com.hbm.items.weapon.sedna.factory;
import java.util.Locale; import java.util.Locale;
import com.hbm.entity.mob.*; import com.hbm.entity.mob.*;
import com.hbm.entity.mob.botprime.EntityBOTPrimeBase;
import com.hbm.handler.threading.PacketThreading; import com.hbm.handler.threading.PacketThreading;
import com.hbm.packet.toclient.AuxParticlePacketNT; import com.hbm.packet.toclient.AuxParticlePacketNT;
import com.hbm.particle.helper.AshesCreator; import com.hbm.particle.helper.AshesCreator;
@ -12,13 +11,8 @@ import com.hbm.util.DamageResistanceHandler.DamageClass;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint; import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.monster.EntityBlaze;
import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityIronGolem;
import net.minecraft.entity.monster.EntityMagmaCube;
import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.entity.monster.EntitySlime; import net.minecraft.entity.monster.EntitySlime;
import net.minecraft.entity.passive.EntityOcelot;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.DamageSource; import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper; import net.minecraft.util.MathHelper;
@ -48,21 +42,10 @@ public class ConfettiUtil {
} }
public static void gib(EntityLivingBase entity) { public static void gib(EntityLivingBase entity) {
if(entity instanceof EntityOcelot) return; if(entity instanceof EntityCyberCrab) return;
if(entity instanceof EntityTeslaCrab) return;
int type = 0; if(entity instanceof EntityTaintCrab) return;
if(entity instanceof EntitySlime) type = 1; if(entity instanceof EntitySlime) return;
if(entity instanceof EntityMagmaCube) type = 1;
if(entity instanceof EntityCreeper) type = 1;
if(entity instanceof EntityIronGolem) type = 2;
if(entity instanceof EntityCyberCrab) type = 2;
if(entity instanceof EntityTeslaCrab) type = 2;
if(entity instanceof EntityTaintCrab) type = 2;
if(entity instanceof EntityBlaze) type = 2;
if(entity instanceof EntityFBIDrone) type = 2;
if(entity instanceof EntityRADBeast) type = 2;
if(entity instanceof EntityUFO) type = 2;
if(entity instanceof EntityBOTPrimeBase) type = 2;
SkeletonCreator.composeEffectGib(entity.worldObj, entity, 0.25F); SkeletonCreator.composeEffectGib(entity.worldObj, entity, 0.25F);
@ -71,7 +54,6 @@ public class ConfettiUtil {
NBTTagCompound vdat = new NBTTagCompound(); NBTTagCompound vdat = new NBTTagCompound();
vdat.setString("type", "giblets"); vdat.setString("type", "giblets");
vdat.setInteger("ent", entity.getEntityId()); vdat.setInteger("ent", entity.getEntityId());
vdat.setInteger("gibType", type);
PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(vdat, entity.posX, entity.posY + entity.height * 0.5, entity.posZ), new TargetPoint(entity.dimension, entity.posX, entity.posY + entity.height * 0.5, entity.posZ, 150)); PacketThreading.createAllAroundThreadedPacket(new AuxParticlePacketNT(vdat, entity.posX, entity.posY + entity.height * 0.5, entity.posZ), new TargetPoint(entity.dimension, entity.posX, entity.posY + entity.height * 0.5, entity.posZ, 150));
entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.zombie.woodbreak", 2.0F, 0.95F + entity.getRNG().nextFloat() * 0.2F); entity.worldObj.playSoundEffect(entity.posX, entity.posY, entity.posZ, "mob.zombie.woodbreak", 2.0F, 0.95F + entity.getRNG().nextFloat() * 0.2F);
} }

View File

@ -5,17 +5,16 @@ import java.util.function.BiConsumer;
import java.util.function.BiFunction; import java.util.function.BiFunction;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.armor.IPAMelee;
import com.hbm.items.armor.IPAWeaponsProvider;
import com.hbm.items.weapon.sedna.Crosshair; import com.hbm.items.weapon.sedna.Crosshair;
import com.hbm.items.weapon.sedna.GunConfig; import com.hbm.items.weapon.sedna.GunConfig;
import com.hbm.items.weapon.sedna.Receiver; import com.hbm.items.weapon.sedna.Receiver;
import com.hbm.items.weapon.sedna.ItemGunBaseNT; import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.GunState;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; 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.render.anim.BusAnimation; import com.hbm.render.anim.BusAnimation;
import com.hbm.render.anim.BusAnimationSequence;
import com.hbm.render.anim.AnimationEnums.GunAnimation; import com.hbm.render.anim.AnimationEnums.GunAnimation;
import com.hbm.render.anim.BusAnimationKeyframe.IType;
import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly; import cpw.mods.fml.relauncher.SideOnly;
@ -30,44 +29,27 @@ public class XFactoryPA {
.draw(10).inspect(55).crosshair(Crosshair.NONE) .draw(10).inspect(55).crosshair(Crosshair.NONE)
.rec(new Receiver(0) .rec(new Receiver(0)
.dmg(10F).delay(20).jam(0) .dmg(10F).delay(20).jam(0)
.offset(1, -0.0625 * 2.5, -0.25D)) .offset(1, -0.0625 * 2.5, -0.25D)
.pp(LAMBDA_CLICK_PRIMARY).ps(LAMBDA_CLICK_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER) .canFire(LAMBDA_MELEE_CAN_FIRE).fire(LAMBDA_MELEE_FIRE))
.anim(LAMBDA_MELEE_ANIMS).orchestra(ORCHESTRA) .pp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).rp(Lego.LAMBDA_STANDARD_CLICK_PRIMARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.anim(LAMBDA_MELEE_ANIMS).orchestra(Orchestras.ORCHESTRA_DRILL)
).setUnlocalizedName("gun_pa_melee"); ).setUnlocalizedName("gun_pa_melee");
} }
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA = (stack, ctx) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.orchestra(stack, ctx);
};
public static BiFunction<ItemStack, GunAnimation, BusAnimation> LAMBDA_MELEE_ANIMS = (stack, type) -> { public static BiFunction<ItemStack, GunAnimation, BusAnimation> LAMBDA_MELEE_ANIMS = (stack, type) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient(); if(type == GunAnimation.EQUIP) return new BusAnimation()
if(component != null) return component.playAnim(stack, type); .addBus("EQUIP", new BusAnimationSequence().setPos(-1, 0, 0).addPos(0, 0, 0, 750, IType.SIN_DOWN));
return null;
return new BusAnimation()
.addBus("SWING", new BusAnimationSequence().setPos(-1, 0, 0).addPos(0, 0, 0, 750, IType.SIN_DOWN));
}; };
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_PRIMARY = (stack, ctx) -> { public static BiFunction<ItemStack, LambdaContext, Boolean> LAMBDA_MELEE_CAN_FIRE = (stack, ctx) -> { return true; };
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.clickPrimary(stack, ctx);
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_SENONDARY = (stack, ctx) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.clickSecondary(stack, ctx);
};
public static void doSwing(ItemStack stack, LambdaContext ctx, GunAnimation anim, int cooldown) { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_MELEE_FIRE = (stack, ctx) -> {
EntityPlayer player = ctx.getPlayer(); EntityPlayer player = ctx.getPlayer();
int index = ctx.configIndex; ItemGunBaseNT.playAnimation(player, stack, ItemGunBaseNT.getPrimary(stack, 0) ? GunAnimation.CYCLE : GunAnimation.ALT_CYCLE, ctx.configIndex);
GunState state = ItemGunBaseNT.getState(stack, index); };
if(state == GunState.IDLE) {
ItemGunBaseNT.playAnimation(player, stack, anim, ctx.configIndex);
ItemGunBaseNT.setState(stack, index, GunState.COOLDOWN);
ItemGunBaseNT.setTimer(stack, index, cooldown);
}
}
public static class ItemGunMelee extends ItemGunBaseNT { public static class ItemGunMelee extends ItemGunBaseNT {

View File

@ -1817,7 +1817,6 @@ public class ClientProxy extends ServerProxy {
if("giblets".equals(type)) { if("giblets".equals(type)) {
int ent = data.getInteger("ent"); int ent = data.getInteger("ent");
int gibType = data.getInteger("gibType");
this.vanish(ent); this.vanish(ent);
Entity e = world.getEntityByID(ent); Entity e = world.getEntityByID(ent);
@ -1841,7 +1840,7 @@ public class ClientProxy extends ServerProxy {
mult *= 10; mult *= 10;
for(int i = 0; i < count; i++) { for(int i = 0; i < count; i++) {
Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleGiblet(man, world, x, y, z, rand.nextGaussian() * 0.25 * mult, rand.nextDouble() * mult, rand.nextGaussian() * 0.25 * mult, gibType)); Minecraft.getMinecraft().effectRenderer.addEffect(new ParticleGiblet(man, world, x, y, z, rand.nextGaussian() * 0.25 * mult, rand.nextDouble() * mult, rand.nextGaussian() * 0.25 * mult));
} }
} }

View File

@ -21,17 +21,14 @@ import net.minecraft.world.World;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class ParticleGiblet extends EntityFX { public class ParticleGiblet extends EntityFX {
private static final ResourceLocation textureMeat = new ResourceLocation(RefStrings.MODID + ":textures/particle/meat.png"); private static final ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/particle/meat.png");
private static final ResourceLocation textureSlime = new ResourceLocation(RefStrings.MODID + ":textures/particle/slime.png");
private static final ResourceLocation textureMetal = new ResourceLocation(RefStrings.MODID + ":textures/particle/metal.png");
private TextureManager theRenderEngine; private TextureManager theRenderEngine;
private float momentumYaw; private float momentumYaw;
private float momentumPitch; private float momentumPitch;
private int gibType;
public ParticleGiblet(TextureManager texman, World world, double x, double y, double z, double mX, double mY, double mZ, int gibType) { public ParticleGiblet(TextureManager texman, World world, double x, double y, double z, double mX, double mY, double mZ) {
super(world, x, y, z); super(world, x, y, z);
this.motionX = mX; this.motionX = mX;
this.motionY = mY; this.motionY = mY;
@ -39,9 +36,6 @@ public class ParticleGiblet extends EntityFX {
this.theRenderEngine = texman; this.theRenderEngine = texman;
this.particleMaxAge = 140 + rand.nextInt(20); this.particleMaxAge = 140 + rand.nextInt(20);
this.particleGravity = 2F; this.particleGravity = 2F;
this.gibType = gibType;
if(gibType == 2) this.particleGravity *= 2;
this.momentumYaw = (float) rand.nextGaussian() * 15F; this.momentumYaw = (float) rand.nextGaussian() * 15F;
this.momentumPitch = (float) rand.nextGaussian() * 15F; this.momentumPitch = (float) rand.nextGaussian() * 15F;
@ -63,9 +57,7 @@ public class ParticleGiblet extends EntityFX {
this.rotationPitch += this.momentumPitch; this.rotationPitch += this.momentumPitch;
this.rotationYaw += this.momentumYaw; this.rotationYaw += this.momentumYaw;
if(gibType == 2) return; EntityFX fx = new net.minecraft.client.particle.EntityBlockDustFX(worldObj, posX, posY, posZ, 0, 0, 0, Blocks.redstone_block, 0);
EntityFX fx = new net.minecraft.client.particle.EntityBlockDustFX(worldObj, posX, posY, posZ, 0, 0, 0, gibType == 1 ? Blocks.melon_block : Blocks.redstone_block, 0);
ReflectionHelper.setPrivateValue(EntityFX.class, fx, 20 + rand.nextInt(20), "particleMaxAge", "field_70547_e"); ReflectionHelper.setPrivateValue(EntityFX.class, fx, 20 + rand.nextInt(20), "particleMaxAge", "field_70547_e");
Minecraft.getMinecraft().effectRenderer.addEffect(fx); Minecraft.getMinecraft().effectRenderer.addEffect(fx);
} }
@ -77,8 +69,7 @@ public class ParticleGiblet extends EntityFX {
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_BLEND);
this.theRenderEngine.bindTexture(texture);
this.theRenderEngine.bindTexture(gibType == 2 ? textureMetal : gibType == 1 ? textureSlime : textureMeat);
/* use this instead of EntityFX.interpPosN since interpPosN isn't set up correctly for the current tick for layer 3 particles */ /* use this instead of EntityFX.interpPosN since interpPosN isn't set up correctly for the current tick for layer 3 particles */
EntityPlayer player = Minecraft.getMinecraft().thePlayer; EntityPlayer player = Minecraft.getMinecraft().thePlayer;

View File

@ -13,9 +13,6 @@ import net.minecraft.item.ItemStack;
public class ItemRenderPAMelee extends ItemRenderWeaponBase { public class ItemRenderPAMelee extends ItemRenderWeaponBase {
@Override public boolean isAkimbo(EntityLivingBase entity) { return true; } @Override public boolean isAkimbo(EntityLivingBase entity) { return true; }
@Override protected float getSwayMagnitude(ItemStack stack) { return 2F; }
@Override protected float getSwayPeriod(ItemStack stack) { return 0.5F; }
@Override @Override
public void setupFirstPerson(ItemStack stack) { public void setupFirstPerson(ItemStack stack) {
@ -56,19 +53,28 @@ public class ItemRenderPAMelee 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.ncrpa_arm); Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.maresleg_tex);
GL11.glPushMatrix(); GL11.glPushMatrix();
double scale = 0.3125D; GL11.glRotated(225, 0, 0, 1);
GL11.glScaled(scale, scale, scale); GL11.glRotated(90, 0, 1, 0);
GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(135, 0, 0, 1); GL11.glRotated(45, 0, 1, 0);
GL11.glRotated(135, 0, 1, 0); GL11.glTranslated(-1, 0, 0);
GL11.glTranslated(0, -5.5, 0); ResourceManager.maresleg.renderPart("Gun");
GL11.glTranslated(-3.5, 0, 0); ResourceManager.maresleg.renderPart("Lever");
ResourceManager.armor_ncr.renderPart("Leftarm"); GL11.glPopMatrix();
GL11.glTranslated(7, 1, -1);
ResourceManager.armor_ncr.renderPart("RightArm"); GL11.glTranslated(0, 0, 5);
GL11.glPushMatrix();
GL11.glRotated(225, 0, 0, 1);
GL11.glRotated(-90, 0, 1, 0);
GL11.glRotated(-90, 1, 0, 0);
GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(-45, 0, 1, 0);
GL11.glTranslated(1, 0, 0);
ResourceManager.maresleg.renderPart("Gun");
ResourceManager.maresleg.renderPart("Lever");
GL11.glPopMatrix(); GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);

View File

@ -191,7 +191,7 @@ public class TileEntityPWRController extends TileEntityMachineBase implements IG
BlockPos portPos = pos.offset(dir); BlockPos portPos = pos.offset(dir);
if(tanks[1].getFill() > 0) this.tryProvide(tanks[1], worldObj, portPos.getX(), portPos.getY(), portPos.getZ(), dir); if(tanks[1].getFill() > 0) this.tryProvide(tanks[1], worldObj, portPos.getX(), portPos.getY(), portPos.getZ(), dir);
this.trySubscribe(tanks[0].getTankType(), worldObj, portPos.getX(), portPos.getY(), portPos.getZ(), dir); if(worldObj.getTotalWorldTime() % 20 == 0) this.trySubscribe(tanks[0].getTankType(), worldObj, portPos.getX(), portPos.getY(), portPos.getZ(), dir);
} }
} }

View File

@ -2220,9 +2220,8 @@ item.gun_minigun_dual.name=Doppelete Miniguns
item.gun_minigun_lacunae.name=Lacunae item.gun_minigun_lacunae.name=Lacunae
item.gun_missile_launcher.name=Raketenwerfer item.gun_missile_launcher.name=Raketenwerfer
item.gun_n_i_4_n_i.name=N I 4 N I item.gun_n_i_4_n_i.name=N I 4 N I
item.gun_pa_melee.name=Powerrüstung - Nahkampfcontroller
item.gun_panzerschreck.name=Panzerschreck
item.gun_pepperbox.name=Bündelrevolver item.gun_pepperbox.name=Bündelrevolver
item.gun_panzerschreck.name=Panzerschreck
item.gun_quadro.name=Vierfachraketenwerfer item.gun_quadro.name=Vierfachraketenwerfer
item.gun_spas12.name=SPAS-12 item.gun_spas12.name=SPAS-12
item.gun_star_f.name=Sportpistole item.gun_star_f.name=Sportpistole

View File

@ -3063,9 +3063,8 @@ item.gun_minigun_dual.name=Dual Miniguns
item.gun_minigun_lacunae.name=Lacunae item.gun_minigun_lacunae.name=Lacunae
item.gun_missile_launcher.name=Missile Launcher item.gun_missile_launcher.name=Missile Launcher
item.gun_n_i_4_n_i.name=N I 4 N I item.gun_n_i_4_n_i.name=N I 4 N I
item.gun_pa_melee.name=Power Armor - Melee Controller
item.gun_panzerschreck.name=Panzerschreck
item.gun_pepperbox.name=Pepperbox item.gun_pepperbox.name=Pepperbox
item.gun_panzerschreck.name=Panzerschreck
item.gun_quadro.name=Quad Rocket Launcher item.gun_quadro.name=Quad Rocket Launcher
item.gun_spas12.name=SPAS-12 item.gun_spas12.name=SPAS-12
item.gun_star_f.name=Target Pistol item.gun_star_f.name=Target Pistol

View File

@ -3096,86 +3096,174 @@ item.grenade_tau.name=Тау-Граната
item.grenade_zomg.name=Граната аннигиляции пар отрицательной энергии item.grenade_zomg.name=Граната аннигиляции пар отрицательной энергии
item.glyphid_gland.name= Железа глифида: item.glyphid_gland.name= Железа глифида:
item.glyphid_gland_empty.name= Железа глифида item.glyphid_gland_empty.name= Железа глифида
item.gun_aberrator.name=Пистолет "Aberrator" item.gun_aberrator.name=Аберратор
item.gun_aberrator_eott.name=Пистолет "Eyes Of The Tempest" item.gun_aberrator_eott.name=Глаза бури
item.gun_am180.name=Пистолет-пулемёт .22 LR item.gun_am180.name=Пистолет-пулемёт .22 LR
item.gun_am180_silenced.name=Пистолет-пулемёт .22 LR с глушителем item.gun_am180_silenced.name=Пистолет-пулемёт .22 LR с глушителем
item.gun_amat.name=Крупнокалиберная снайперская винтовка item.gun_amat.name=Крупнокалиберная снайперская винтовка
item.gun_amat_penance.name=Крупнокалиберная снайперская винтовка "Penance" item.gun_amat_penance.name="Покаяние"
item.gun_amat_subtlety.name=Крупнокалиберная снайперская винтовка "Subtlety" item.gun_amat_subtlety.name="Тонкость"
item.gun_ar15.name="Джош"
item.gun_autoshotgun.name=Автоматический дробовик item.gun_autoshotgun.name=Автоматический дробовик
item.gun_autoshotgun_heretic.name=Дробовик "The Heretic" item.gun_autoshotgun_heretic.name=Еретик
item.gun_autoshotgun_sexy.name=Дробовик "Sexy" item.gun_autoshotgun_sexy.name=Секси
item.gun_autoshotgun_shredder.name=Дробовик "Shredder" item.gun_autoshotgun_shredder.name=Шреддер
item.gun_drill.name=Силовой бур item.gun_avenger.name=CZ57 “Авенджер”
item.gun_b92.name=§9Энергетический бластер B92§r
item.gun_b92_ammo.name=§9Энергетический элемент B92§r
item.gun_b93.name=§cМодифицированный бластер B93§r
item.gun_benelli.name=Benelli Autoshotgun
item.gun_bf.name=BEL
item.gun_bf_ammo.name=Жар-снаряд
item.gun_bio_revolver.name=Атлас
item.gun_bolt_action.name=Винтовка со скользящим затвором(Оригинал)
item.gun_bolt_action_green.name=Винтовка со скользящим затвором (Зелёный)
item.gun_bolt_action_saturnite.name=Сатурнитовая винтовка
item.gun_bolter.name=Болтер item.gun_bolter.name=Болтер
item.gun_drill.name=Силовой бур
item.gun_bolter_digamma.name=Дигамма пушка
item.gun_calamity.name=Каламити
item.gun_calamity_dual.name=Боевое седло
item.gun_carbine.name=Карабин item.gun_carbine.name=Карабин
item.gun_charge_thrower.name=Метатель снарядов item.gun_charge_thrower.name=Метатель снарядов
item.gun_chemthrower.name=Химомёт item.gun_chemthrower.name=Химомёт
item.gun_coilgun.name=Гаусс-пушка item.gun_coilgun.name=Гаусс-пушка
item.gun_congolake.name=Помповый гранатомёт "Congo Lake" item.gun_congolake.name=Congo Lake
item.gun_cryocannon.name=Cryo Cannon item.gun_cryocannon.name=Криопушка
item.gun_cryolator_ammo.name=Cryo Cell item.gun_cryolator.name=Криолятор
item.gun_cryolator_ammo.name=Криоэлемент
item.gun_dampfmaschine.name=Совершенно не шуточное оружие
item.gun_darter.name=Дротиковый пистолет
item.gun_deagle.name=Биг Айрон
item.gun_defabricator.name=Дефабрикатор
item.gun_defabricator_ammo.name=Энергетические ячейки Дефабрикатора
item.gun_detonator.name=Лазерный детонатор item.gun_detonator.name=Лазерный детонатор
item.gun_double_barrel.name=Дробовик "Old Classic" item.gun_double_barrel.name=Старая классика
item.gun_double_barrel_sacred_dragon.name=Дробовик "Sacred Dragon" item.gun_double_barrel_sacred_dragon.name=Священный дракон
item.gun_fatman.name=Атомная катапульта M42 "Fat man" item.gun_emp.name=ЭМИ-пушка
item.gun_emp_ammo.name=Энергетическая ячейка
item.gun_euthanasia.name=Эвтаназия
item.gun_euthanasia_ammo.name=Шприцы
item.gun_fatman.name=М42 Атомная катапульта "Толстяк"
item.gun_fireext.name=Огнетушитель item.gun_fireext.name=Огнетушитель
item.gun_flamer.name=Огнемёт item.gun_flamer.name=Огнемёт
item.gun_flamer_daybreaker.name=Огнемёт "Daybreaker" item.gun_flamer_daybreaker.name=Дейбрейкер
item.gun_flamer_topaz.name=Огнемёт "Mister Topaz" item.gun_flamer_topaz.name=Мистер Топаз
item.gun_flaregun.name=Сигнальный пистолет item.gun_flaregun.name=Сигнальный пистолет
item.gun_folly.name=Пушка "Folly" item.gun_flechette.name=Игольчатая винтовка
item.gun_folly.name=Безумие
item.gun_g3.name=Штурмовая винтовка item.gun_g3.name=Штурмовая винтовка
item.gun_g3_a3.name=Штурмовая винтовка "G3A3" item.gun_g3_a3.name=G3A3
item.gun_g3_infiltrator.name=Штурмовая винтовка "Infiltrator" item.gun_g3_infiltrator.name=Инфильтратор
item.gun_g3_zebra.name=Зебринская штурмовая винтовка item.gun_g3_zebra.name=Зебринская винтовка
item.gun_glass_cannon.name=Стеклянная пушка
item.gun_greasegun.name=Пистолет-пулемёт "Маслёнка" item.gun_greasegun.name=Пистолет-пулемёт "Маслёнка"
item.gun_greasegun_m3.name=Улучшенный пистолет-пулемёт М3 item.gun_greasegun_m3.name=Улучшенный пистолет-пулемёт М3
item.gun_hangman.name=Винтовка "Hangman" item.gun_hangman.name=Палач
item.gun_heavy_revolver.name=Тяжёлый револьвер item.gun_heavy_revolver.name=Тяжёлый револьвер
item.gun_heavy_revolver_lilmac.name=Револьвер "Little Macintosh" item.gun_heavy_revolver_lilmac.name=Малый Макинтош
item.gun_heavy_revolver_protege.name=Револьвер "Protège" item.gun_heavy_revolver_protege.name=Протèже
item.gun_heavy_revolver_scoped.name=Револьвер .44 Magnum с прицелом item.gun_heavy_revolver_scoped.name=.44 Magnum с прицелом
item.gun_henry.name=Винтовка рычажного действия item.gun_henry.name=Винтовка рычажного действия
item.gun_henry_lincoln.name=Винтовка "Lincoln's Repeater" item.gun_henry_lincoln.name=Винтовка Линкольна
item.gun_hk69.name=Гранатомет
item.gun_hp.name=HPP Лазерджет
item.gun_hp_ammo.name=Чернильный картридж
item.gun_immolator.name=Иммолятор
item.gun_immolator_ammo.name=Топливо Иммолатора
item.gun_jack.name=Джекхаммер
item.gun_jack_ammo.name=Снаряд для четырёхствольного дробовика
item.gun_karl.name=Карл
item.gun_kit_1.name=Ружейное масло item.gun_kit_1.name=Ружейное масло
item.gun_kit_2.name=Комплект для ремонта оружия item.gun_kit_2.name=Комплект для ремонта оружия
item.gun_ks23.name=Сэмюэль Большой Дробовик
item.gun_lacunae.name=CZ33 “Абаддон”
item.gun_lag.name=Комически длинный пистолет item.gun_lag.name=Комически длинный пистолет
item.gun_laser_pistol.name=Лазерный пистолет item.gun_laser_pistol.name=Лазерный пистолет
item.gun_laser_pistol_morning_glory.name=Лазерный пистолет "Morning Glory" item.gun_laser_pistol_morning_glory.name=Морнин Глори
item.gun_laser_pistol_pew_pew.name=Лазерный пистолет "Pew Pew" item.gun_laser_pistol_pew_pew.name=Пиу-пиу
item.gun_liberator.name=Дробовик "Liberator" item.gun_lasrifle.name=Лазерная винтовка
item.gun_lever_action.name=«Нога кобылы» (Оригинал)
item.gun_lever_action_dark.name="Нога кобылы" (Тёмный)
item.gun_lever_action_sonata.name=Перевёрнутая «Нога кобылы»
item.gun_lever_action_sonata_2.name=§cSonata's Microphone§r
item.gun_liberator.name=Либератор
item.gun_light_revolver.name=Револьвер переломного действия item.gun_light_revolver.name=Револьвер переломного действия
item.gun_light_revolver_atlas.name=Револьвер "Atlas" item.gun_light_revolver_atlas.name=Атлас
item.gun_light_revolver_dani.name=Ревельверы "Day and Night" item.gun_light_revolver_dani.name=День и Ночь
item.gun_m2.name=Пулемёт "Ma Deuce" item.gun_lunatic_marksman.name=Lunatic Marksman Rifle (BETA)
item.gun_m2.name=Ma Deuce
item.gun_maresleg.name=Дробовик рычажного действия item.gun_maresleg.name=Дробовик рычажного действия
item.gun_maresleg_akimbo.name=Дробовики рычажного действия item.gun_maresleg_akimbo.name=Дробовики рычажного действия
item.gun_maresleg_broken.name=Дробовик "Broken" item.gun_maresleg_broken.name=Broken
item.gun_maresleg_short.name=Дробовик "Mare's Leg" item.gun_maresleg_short.name=Нога кобылы
item.gun_mas36.name=Винтовка "South Star" item.gun_mas36.name=Южная Звезда
item.gun_minigun.name=Персональный миниган item.gun_minigun.name=Персональный миниган
item.gun_minigun_dual.name=Двойные миниганы item.gun_minigun_dual.name=Двойные миниганы
item.gun_minigun_lacunae.name=Миниган "Lacunae" item.gun_minigun_lacunae.name=Лакунэ
item.gun_missile_launcher.name=Ракетная пусковая установка item.gun_mirv.name=M42 Ядерная катапульта "Экспериментальный МИРВ"
item.gun_n_i_4_n_i.name=Энергетический револьвер "N I 4 N I" item.gun_missile_launcher.name=Ракетница
item.gun_pepperbox.name=Револьвер "Перечница" item.gun_moist_nugget.name=Мосин-Наган
item.gun_pa_melee.name=Силовая броня - Контроллер ближнего боя item.gun_mp.name=Пулемет Пацифистов
item.gun_panzerschreck.name=Гранатомёт "Panzerschreck" item.gun_mp40.name=Пистолет-пулемёт
item.gun_quadro.name=Четырехствольная ракетная пусковая установка item.gun_mp40_ammo.name=Submachine Gun Round (DEPRECATED)
item.gun_spas12.name=Дробовик "SPAS-12" item.gun_pepperbox.name=Перечница
item.gun_star_f.name=Спортивный пистолет item.gun_pm_ammo.name=Малый беспропеллентовый пулемётный патрон
item.gun_star_f_akimbo.name=Спортивные пистолеты item.gun_mymy.name=Ньетес
item.gun_star_f_silenced.name=Пистолет с глушителем item.gun_osipr.name=Импульсная винтовка Патруля
item.gun_stg77.name=Штурмовая винтовка "StG 77" item.gun_osipr_ammo.name=Импульсные патроны
item.gun_stinger.name=Ракетная пусковая установка FIM-92 "Stinger" item.gun_osipr_ammo2.name=Энергетический шар Комбайнов
item.gun_tau.name=Тау-пушка item.gun_panzerschreck.name=Панцершрек
item.gun_tesla_cannon.name=Тесла-пушка item.gun_proto.name=М42 Ядерная катапульта "Прото МИРВ"
item.gun_uzi.name=Пистолет-пулемёт "UZI" item.gun_quadro.name="Четыре Сыра"
item.gun_uzi_richter.name=Пистолет-пулемёт "Richter" item.gun_remington.name=バイデン ブラスト [BIDEN BLAST]
item.gun_uzi_akimbo.name=Пистолеты-пулемёты "UZIs" item.gun_revolver.name=Усовершенствованный револьвер
item.gun_uzi_saturnite.name=Пистолет-пулемёт "UZI сатурнитовый" item.gun_revolver_ammo.name=Свинцовая пуля
item.gun_revolver_blackjack.name=Пятизарядный револьвер Блэкджек
item.gun_revolver_cursed.name=Проклятый револьвер
item.gun_revolver_cursed_ammo.name=Стальная пуля
item.gun_revolver_gold.name=Золотой револьвер
item.gun_revolver_gold_ammo.name=Золотая пуля
item.gun_revolver_inverted.name=Перевернутый револьвер
item.gun_revolver_iron.name=Простой револьвер
item.gun_revolver_iron_ammo.name=Пуля
item.gun_revolver_lead.name=Ядерный револьвер
item.gun_revolver_lead_ammo.name=Покрытая стеклом атомная пуля
item.gun_revolver_nightmare.name=Кошмарный револьвер (Оригинал)
item.gun_revolver_nightmare2.name=Кошмарный револьвер (Тёмный)
item.gun_revolver_nightmare2_ammo.name=Лазерная дробь
item.gun_revolver_nightmare_ammo.name=Кошмарная пуля
item.gun_revolver_pip.name=Лил' Пипсквик
item.gun_revolver_red.name=Револьвер с красным ключом
item.gun_revolver_saturnite.name=Сатурнитовый револьвер
item.gun_revolver_schrabidium.name=Шрабидиевый револьвер
item.gun_revolver_schrabidium_ammo.name=Шрабидиевая пуля
item.gun_revolver_silver.name=Одолженный пистолет
item.gun_rpg.name=Безоткатная Винтовка “Карл Густав”
item.gun_sauer.name=Дробовик Стэна Зауэра
item.gun_skystinger.name="Небесный Стингер"
item.gun_spark.name=Спарк-Плаг
item.gun_spark_ammo.name=Электромагнитный картридж
item.gun_spas12.name=Дробовик SPAS-12
item.gun_stg77.name=StG 77
item.gun_stinger.name=FIM-92 "Стингер"
item.gun_super_shotgun.name=Супердробовик
item.gun_super_shotgun.desc=Он супер сломан!
item.gun_supershotgun.name=Супердробовик
item.gun_tau.name=Тау пушка
item.gun_tesla_cannon.name=Тесла пушка
item.gun_thompson.name=Пистолет-пулемёт Томпсона
item.gun_uac_pistol.name=Пистолет UAC .45
item.gun_uboinik.name=Убойник
item.gun_uzi.name=IMI Узи
item.gun_uzi_richter.name=Richter
item.gun_uzi_akimbo.name=Акимбо Узи
item.gun_uzi_saturnite.name=Сатурнитовый Узи
item.gun_uzi_saturnite_silencer.name=Сатурнитовый Узи с глушителем
item.gun_uzi_silencer.name=IMI Узи с глушителем
item.gun_xvl1456.name=Прототип Тау-пушки XVL1456
item.gun_xvl1456_ammo.name=Ящик с обеднённым ураном-235
item.gun_zomg.name=ZOMG-пушка
item.hand_drill.name=Ручная дрель item.hand_drill.name=Ручная дрель
item.hand_drill_desh.name=Ручная дрель из деша item.hand_drill_desh.name=Ручная дрель из деша
item.hazmat_boots.name=Защитные ботинки item.hazmat_boots.name=Защитные ботинки
@ -3734,10 +3822,6 @@ item.multitool_silk.name=Силовая перчатка (Коготь шёлк
item.multitool_sky.name=Силовая перчатка (Небесный разлом) item.multitool_sky.name=Силовая перчатка (Небесный разлом)
item.mysteryshovel.name=Непрочная лопата item.mysteryshovel.name=Непрочная лопата
item.n2_charge.name=Крупный взрывной заряд item.n2_charge.name=Крупный взрывной заряд
item.ncrpa_boots.name=Ботинки силовой брони рейнджера НКР
item.ncrpa_helmet.name=Шлем силовой брони рейнджера НКР
item.ncrpa_legs.name=Поножи силовой брони рейнджера НКР
item.ncrpa_plate.name=Нагрудник силовой брони рейнджера НКР
item.neutrino_lens.name=Нейтринные линзы item.neutrino_lens.name=Нейтринные линзы
item.neutron_reflector.name=Отражатель нейтронов item.neutron_reflector.name=Отражатель нейтронов
item.night_vision.name=Очки ночного зрения item.night_vision.name=Очки ночного зрения
@ -5921,10 +6005,9 @@ tile.machine_icf_press.desc=Наполняет топливные пеллеты
tile.machine_industrial_boiler.name=Промышленный бойлер tile.machine_industrial_boiler.name=Промышленный бойлер
tile.machine_industrial_boiler.desc=Большой бойлер, в котором можно вскипятить воду или разогреть нефть.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.1 TU/t$Не может взорваться tile.machine_industrial_boiler.desc=Большой бойлер, в котором можно вскипятить воду или разогреть нефть.$Требует внешний источник тепла.$Скорость передачи тепла: ΔT*0.1 TU/t$Не может взорваться
tile.machine_industrial_generator.name=Промышленный генератор tile.machine_industrial_generator.name=Промышленный генератор
tile.machine_industrial_turbine.name=Промышленная паровая турбина
tile.machine_industrial_turbine.desc=Эффективность: 100%%
tile.machine_intake.name=Воздухозаборник tile.machine_intake.name=Воздухозаборник
tile.machine_keyforge.name=Стол мастера по замкам tile.machine_keyforge.name=Стол мастера по замкам
tile.machine_large_turbine.name=Промышленная паровая турбина
tile.machine_large_turbine.desc=Эффективность: 100%% tile.machine_large_turbine.desc=Эффективность: 100%%
tile.machine_liquefactor.name=Промышленный разжижитель tile.machine_liquefactor.name=Промышленный разжижитель
tile.machine_liquefactor.desc=Мощная машина для превращения предметов в жидкости.$Поставляется с универсальными каталитическими компонентами, нагревательными элементами$и встроенным гидратором для нефтехимического сжижения. tile.machine_liquefactor.desc=Мощная машина для превращения предметов в жидкости.$Поставляется с универсальными каталитическими компонентами, нагревательными элементами$и встроенным гидратором для нефтехимического сжижения.
@ -6642,6 +6725,51 @@ desc.gui.upgrade.overdrive= * §7Перегруз§r: Стакается до 3-
desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней
desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней
// Last updated 15.02.2026 by RayzerHan // // Last updated 12.01.2026 by RayzerHan //

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 671 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 649 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 968 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 278 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 222 B