Compare commits

..

13 Commits

Author SHA1 Message Date
Bob
960d28740b bluh 2026-02-23 21:24:41 +01:00
Bob
ca247c69b8 ough 2026-02-23 21:19:40 +01:00
Bob
b76027cb58 let's get this crap out the door 2026-02-23 20:49:18 +01:00
HbmMods
efa69dbde0
Merge pull request #2724 from RayzerHan/master
Update ru_RU
2026-02-23 20:45:30 +01:00
Raaaaaaaaaay
b7f40edb85
Merge branch 'HbmMods:master' into master 2026-02-23 21:41:54 +02:00
Raaaaaaaaaay
225b39dfe0
Блядство 2026-02-23 21:40:24 +02:00
HbmMods
ad72c71082
Merge pull request #2719 from ItalianDudes/master
Added zirnox reactor redstone support on/off
2026-02-23 20:39:03 +01:00
Bob
f62fcc89cb back mounted rocket launcher time 2026-02-23 20:36:00 +01:00
Hacker6329
2313cd3b44 Fixed issue: redstonePowered state not being serialized/deserialized 2026-02-23 18:56:32 +01:00
Hacker6329
36a39b09e4 Fixed issue: redstonePowered state not saved in nbt 2026-02-23 18:44:56 +01:00
Hacker6329
6be023015f Fixed issue: reactor shutting down if not redstone powered and on by GUI in case of block update nearby.
Fixed issue: zirnox multiblock not breaking entirely if mined.
2026-02-23 18:31:28 +01:00
Hacker6329
af34fb730f Unitalized comments 2026-02-21 18:31:11 +01:00
Hacker6329
08d12bceb3 Added zirnox reactor redstone support on/off 2026-02-21 17:35:35 +01:00
27 changed files with 378 additions and 125 deletions

View File

@ -1,49 +1,6 @@
## Added
* Target pistol
* Weapon steel tier pistol that holds 15 rounds and shoots .22 LR
* 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 * Snow golems now use the grey metallic gib particles instead of blood
* New model and texture
* Removed the GUI, it now uses the same in-world compressor toggle as the leviathan turbine
* No longer has a volatile power buffer, power isn't buffered at all anymore, similar to steam engines and MHD turbines
* Steam capacity changes based on compression level, the ratio for turbine cascades is now 1:1:1:1
* Comes with a flywheel, energy output slowly ramps up as steam is supplied and slowly goes down as steam cuts out
* Recipe is similar to the old inudstrial turbine, but slightly simplified and cheaper
* Leviathan turbines no longer have a power buffer
* Updated russian and chinese localization
* The PWR can now be controlled via RoR
* The RoR value reader can read core and hull heat as well as fuel depletion in percent
* The RoR controller can set the control rod level in percent as well as jetison all loaded fuel
* Having 528, expensive or rampant mode enabled now displays a badge in the top left corner, showing that it is enabled
* Badges can be disabled with the `BADGES_HUD` value of `/ntmclient`
* The badge only shows up if the "true" configuration is used, 528 requires default settings, expensive requires the precision assembler config to not be modified and rampant needs most of the default settings enabled
* If all three modes are enabled, the "328 mode" badge also appears
* Removed toothpicks, as they haven't been used in recipes for well over a year
* 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`
* 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 chemical factory internal tank sharing ignoring tank pressure
* Fixed missing texture for canned horse slime * Fixed the NCR ranger power armor missing most protection stats
* Fixed incorrect ore dictionary key used by enriched naquadah watz pellet recipe
* Fixed out of bounds light level for the RTG blast furnace
* Fixed the recipe configs now allowing NBT data for output items, rendering the precision assembler and annihilator configs useless

View File

@ -1,6 +1,6 @@
mod_version=1.0.27 mod_version=1.0.27
# Empty build number makes a release type # Empty build number makes a release type
mod_build_number=5593 mod_build_number=5615
credits=HbMinecraft,\ credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\ \ rodolphito (explosion algorithms),\
@ -36,6 +36,7 @@ credits=HbMinecraft,\
\ xxwinhere (chinese localization),\ \ xxwinhere (chinese localization),\
\ Nycticoraxnightheron (chinese localization),\ \ Nycticoraxnightheron (chinese localization),\
\ NarekoMichigami810 (chinese localization),\ \ NarekoMichigami810 (chinese localization),\
\ Romarku (chinese localization),\
\ Maksymisio (polish localization)\ \ Maksymisio (polish localization)\
\ el3ctro4ndre (italian localization),\ \ el3ctro4ndre (italian localization),\
\ Goaty1208 (italian localization),\ \ Goaty1208 (italian localization),\
@ -74,6 +75,7 @@ credits=HbMinecraft,\
\ Dash (PA particle serialization fix),\ \ Dash (PA particle serialization fix),\
\ archiecarrot123 (armor rendering compatibility fix),\ \ archiecarrot123 (armor rendering compatibility fix),\
\ mikkerlo (mining laser & builder's jetpack improvements),\ \ mikkerlo (mining laser & builder's jetpack improvements),\
\ Hacker6329 (ZIRNOX redstone control),\
\ icomet (refactoring),\ \ icomet (refactoring),\
\ martemen (project settings),\ \ martemen (project settings),\
\ OvermindDL1 (project settings),\ \ OvermindDL1 (project settings),\

View File

@ -205,10 +205,18 @@ public class BlockKeyhole extends BlockStone {
if(rand == 0) { if(rand == 0) {
world.setBlock(x, y + 1, z, ModBlocks.deco_loot); world.setBlock(x, y + 1, z, ModBlocks.deco_loot);
TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y + 1, z); TileEntityLoot loot = (TileEntityLoot) world.getTileEntity(x, y + 1, z);
if(world.rand.nextInt(5) == 0) {
loot.addItem(new ItemStack(ModItems.ncrpa_helmet), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.ncrpa_plate), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.ncrpa_legs), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.ncrpa_boots), 0, 0, 0);
} else {
loot.addItem(new ItemStack(ModItems.trenchmaster_helmet), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_helmet), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.trenchmaster_plate), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_plate), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.trenchmaster_legs), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_legs), 0, 0, 0);
loot.addItem(new ItemStack(ModItems.trenchmaster_boots), 0, 0, 0); loot.addItem(new ItemStack(ModItems.trenchmaster_boots), 0, 0, 0);
}
} else { } else {
spawnPedestalItem(world, x, y + 1, z); spawnPedestalItem(world, x, y + 1, z);
} }

View File

@ -9,6 +9,7 @@ import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityReactorZirnox; import com.hbm.tileentity.machine.TileEntityReactorZirnox;
import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.common.network.internal.FMLNetworkHandler;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
@ -87,4 +88,43 @@ public class ReactorZirnox extends BlockDummyable {
this.makeExtra(world, x + dir.offsetX * o, y + 4, z + dir.offsetZ * o); this.makeExtra(world, x + dir.offsetX * o, y + 4, z + dir.offsetZ * o);
} }
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block neighbor) {
super.onNeighborBlockChange(world, x, y, z, neighbor);
if (world.isRemote) return;
int[] core = this.findCore(world, x, y, z);
if (core == null) return;
int cx = core[0];
int cy = core[1];
int cz = core[2];
TileEntity te = world.getTileEntity(cx, cy, cz);
if (!(te instanceof TileEntityReactorZirnox)) return;
TileEntityReactorZirnox reactor = (TileEntityReactorZirnox) te;
boolean powered = false;
// 2. Scan multiblock
for (int dx = -2; dx <= 2 && !powered; dx++) {
for (int dy = 0; dy <= 4 && !powered; dy++) {
for (int dz = -2; dz <= 2 && !powered; dz++) {
// Get only surface blocks
if (dx == -2 || dx == 2 ||
dy == 0 || dy == 4 ||
dz == -2 || dz == 2) {
int sx = cx + dx;
int sy = cy + dy;
int sz = cz + dz;
if (world.isBlockIndirectlyGettingPowered(sx, sy, sz) ||
world.getBlockPowerInput(sx, sy, sz) > 0) {
powered = true;
break;
}
}
}
}
}
reactor.setRedstonePowered(powered);
}
} }

View File

@ -103,6 +103,9 @@ public class WeaponRecipes {
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_charge_thrower, 1), new Object[] { "MMM", "BBL", "GG ", 'M', GUNMETAL.mechanism(), 'B', STEEL.heavyBarrel(), 'G', STEEL.grip(), 'L', ANY_RUBBER.ingot() }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_charge_thrower, 1), new Object[] { "MMM", "BBL", "GG ", 'M', GUNMETAL.mechanism(), 'B', STEEL.heavyBarrel(), 'G', STEEL.grip(), 'L', ANY_RUBBER.ingot() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_drill, 1), new Object[] { " GL", "IBP", " GL", 'G', GUNMETAL.ingot(), 'L', ANY_RUBBER.ingot(), 'I', TI.ingot(), 'B', STEEL.block(), 'P', ModItems.piston_selenium }); CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_drill, 1), new Object[] { " GL", "IBP", " GL", 'G', GUNMETAL.ingot(), 'L', ANY_RUBBER.ingot(), 'I', TI.ingot(), 'B', STEEL.block(), 'P', ModItems.piston_selenium });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_pa_melee, 1), new Object[] { " C ", "MWM", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'M', ModItems.motor, 'W', GOLD.wireDense() });
CraftingManager.addRecipeAuto(new ItemStack(ModItems.gun_pa_ranged, 1), new Object[] { "C", "W", "P", 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'P', ANY_PLASTIC.ingot(), 'W', GOLD.wireDense() });
//SEDNA Ammo //SEDNA Ammo
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE, 6), new Object[] { "C", "P", "G", 'C', KEY_COBBLESTONE, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE, 6), new Object[] { "C", "P", "G", 'C', KEY_COBBLESTONE, 'P', Items.paper, 'G', Items.gunpowder });
CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_AP, 6), new Object[] { "C", "P", "G", 'C', Items.flint, 'P', Items.paper, 'G', Items.gunpowder }); CraftingManager.addRecipeAuto(DictFrame.fromOne(ModItems.ammo_standard, EnumAmmo.STONE_AP, 6), new Object[] { "C", "P", "G", 'C', Items.flint, 'P', Items.paper, 'G', Items.gunpowder });

View File

@ -1440,6 +1440,7 @@ public class ModItems {
public static Item gun_charge_thrower; public static Item gun_charge_thrower;
public static Item gun_drill; public static Item gun_drill;
public static Item gun_pa_melee; public static Item gun_pa_melee;
public static Item gun_pa_ranged;
public static Item ammo_standard; public static Item ammo_standard;
public static Item ammo_secret; public static Item ammo_secret;
@ -6330,6 +6331,7 @@ public class ModItems {
GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName()); GameRegistry.registerItem(gun_charge_thrower, gun_charge_thrower.getUnlocalizedName());
GameRegistry.registerItem(gun_drill, gun_drill.getUnlocalizedName()); GameRegistry.registerItem(gun_drill, gun_drill.getUnlocalizedName());
GameRegistry.registerItem(gun_pa_melee, gun_pa_melee.getUnlocalizedName()); GameRegistry.registerItem(gun_pa_melee, gun_pa_melee.getUnlocalizedName());
GameRegistry.registerItem(gun_pa_ranged, gun_pa_ranged.getUnlocalizedName());
GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName()); GameRegistry.registerItem(ammo_standard, ammo_standard.getUnlocalizedName());
GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName()); GameRegistry.registerItem(ammo_secret, ammo_secret.getUnlocalizedName());

View File

@ -21,6 +21,8 @@ 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.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.IItemRenderer; import net.minecraftforge.client.IItemRenderer;
@ -53,8 +55,6 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
if(this != ModItems.ncrpa_plate) return; if(this != ModItems.ncrpa_plate) return;
HbmPlayerProps props = HbmPlayerProps.getData(player);
/// SPEED /// /// SPEED ///
Multimap multimap = super.getAttributeModifiers(stack); Multimap multimap = super.getAttributeModifiers(stack);
multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(speed, "NCRPA SPEED", 0.1, 0)); multimap.put(SharedMonsterAttributes.movementSpeed.getAttributeUnlocalizedName(), new AttributeModifier(speed, "NCRPA SPEED", 0.1, 0));
@ -63,6 +63,9 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
if(player.isSprinting()) { if(player.isSprinting()) {
player.getAttributeMap().applyAttributeModifiers(multimap); player.getAttributeMap().applyAttributeModifiers(multimap);
} }
if(world.getTotalWorldTime() % 20 != 0) return;
if(HbmPlayerProps.getData(player).enableHUD) player.addPotionEffect(new PotionEffect(Potion.nightVision.id, 300, 0, true));
} }
@Override public Item getItemForRenderer() { return this; } @Override public Item getItemForRenderer() { return this; }
@ -81,10 +84,17 @@ public class ArmorNCRPA extends ArmorFSBPowered implements IItemRendererProvider
} }
public static final ArmorNCRPAMelee meleeComponent = new ArmorNCRPAMelee(); public static final ArmorNCRPAMelee meleeComponent = new ArmorNCRPAMelee();
public static final ArmorNCRPARanged rangedComponent = new ArmorNCRPARanged();
@Override @Override
public IPAMelee getMeleeComponent(EntityPlayer entity) { public IPAMelee getMeleeComponent(EntityPlayer entity) {
if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent; if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent;
return null; return null;
} }
@Override
public IPARanged getRangedComponent(EntityPlayer entity) {
if(this.hasFSBArmorIgnoreCharge(entity)) return rangedComponent;
return null;
}
} }

View File

@ -0,0 +1,51 @@
package com.hbm.items.armor;
import com.hbm.entity.projectile.EntityBulletBaseMK4;
import com.hbm.items.weapon.sedna.BulletConfig;
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.factory.XFactoryRocket;
import com.hbm.items.weapon.sedna.mags.MagazineBelt;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
public class ArmorNCRPARanged implements IPARanged {
public static MagazineBelt rocketSteerMag = new MagazineBelt();
public static MagazineBelt rocketMag = new MagazineBelt();
@Override public void clickPrimary(ItemStack stack, LambdaContext ctx) { fireRocket(stack, ctx, true); }
@Override public void clickSecondary(ItemStack stack, LambdaContext ctx) { fireRocket(stack, ctx, false); }
public static void fireRocket(ItemStack stack, LambdaContext ctx, boolean steer) {
EntityPlayer player = ctx.getPlayer();
GunState state = ItemGunBaseNT.getState(stack, 0);
MagazineBelt mag = steer ? rocketSteerMag : rocketMag;
if(state == GunState.IDLE) {
if(mag.acceptedBullets.isEmpty()) {
mag.addConfigs(steer ? XFactoryRocket.rocket_ncrpa_steer : XFactoryRocket.rocket_ncrpa);
}
BulletConfig cfg = mag.getType(stack, player.inventory);
int amount = mag.getAmount(stack, player.inventory);
if(amount > 0) {
mag.useUpAmmo(stack, player.inventory, 1);
EntityBulletBaseMK4 mk4 = new EntityBulletBaseMK4(player, cfg, 25, 0, 0.25F * (player.getRNG().nextBoolean() ? - 1 : 1), 0, 0);
player.worldObj.spawnEntityInWorld(mk4);
ItemGunBaseNT.setState(stack, 0, GunState.COOLDOWN);
ItemGunBaseNT.setTimer(stack, 0, 10);
player.worldObj.playSoundAtEntity(player, "hbm:weapon.rpgShoot", 0.5F, 0.9F + player.getRNG().nextFloat() * 0.2F);
player.inventoryContainer.detectAndSendChanges();
} else {
ItemGunBaseNT.setState(stack, 0, GunState.COOLDOWN);
ItemGunBaseNT.setTimer(stack, 0, 10);
player.worldObj.playSoundAtEntity(player, "hbm:weapon.reload.dryFireClick", 1F, 1F);
}
}
}
}

View File

@ -61,4 +61,6 @@ public class ArmorRPA extends ArmorFSBPowered implements IItemRendererProvider,
if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent; if(this.hasFSBArmorIgnoreCharge(entity)) return meleeComponent;
return null; return null;
} }
@Override public IPARanged getRangedComponent(EntityPlayer entity) { return null; }
} }

View File

@ -0,0 +1,11 @@
package com.hbm.items.armor;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
import net.minecraft.item.ItemStack;
public interface IPARanged {
public void clickPrimary(ItemStack stack, LambdaContext ctx);
public void clickSecondary(ItemStack stack, LambdaContext ctx);
}

View File

@ -19,4 +19,18 @@ public interface IPAWeaponsProvider {
} }
return null; return null;
} }
public IPARanged getRangedComponent(EntityPlayer entity);
public static IPARanged getRangedComponentClient() {
return getRangedComponentCommon(MainRegistry.proxy.me());
}
public static IPARanged getRangedComponentCommon(EntityPlayer player) {
if(player.inventory.armorInventory[2] != null && player.inventory.armorInventory[2].getItem() instanceof IPAWeaponsProvider) {
IPAWeaponsProvider prov = (IPAWeaponsProvider) player.inventory.armorInventory[2].getItem();
return prov.getRangedComponent(player);
}
return null;
}
} }

View File

@ -14,6 +14,7 @@ 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.EntityBlaze;
import net.minecraft.entity.monster.EntityCreeper; import net.minecraft.entity.monster.EntityCreeper;
import net.minecraft.entity.monster.EntityGolem;
import net.minecraft.entity.monster.EntityIronGolem; import net.minecraft.entity.monster.EntityIronGolem;
import net.minecraft.entity.monster.EntityMagmaCube; import net.minecraft.entity.monster.EntityMagmaCube;
import net.minecraft.entity.monster.EntitySkeleton; import net.minecraft.entity.monster.EntitySkeleton;
@ -54,6 +55,7 @@ public class ConfettiUtil {
if(entity instanceof EntitySlime) type = 1; if(entity instanceof EntitySlime) type = 1;
if(entity instanceof EntityMagmaCube) type = 1; if(entity instanceof EntityMagmaCube) type = 1;
if(entity instanceof EntityCreeper) type = 1; if(entity instanceof EntityCreeper) type = 1;
if(entity instanceof EntityGolem) type = 2;
if(entity instanceof EntityIronGolem) type = 2; if(entity instanceof EntityIronGolem) type = 2;
if(entity instanceof EntityCyberCrab) type = 2; if(entity instanceof EntityCyberCrab) type = 2;
if(entity instanceof EntityTeslaCrab) type = 2; if(entity instanceof EntityTeslaCrab) type = 2;

View File

@ -211,6 +211,8 @@ public class GunFactoryClient {
setRendererBulk(LegoClient.RENDER_RPZB, rocket_rpzb); setRendererBulk(LegoClient.RENDER_RPZB, rocket_rpzb);
setRendererBulk(LegoClient.RENDER_QD, rocket_qd); setRendererBulk(LegoClient.RENDER_QD, rocket_qd);
setRendererBulk(LegoClient.RENDER_ML, rocket_ml); setRendererBulk(LegoClient.RENDER_ML, rocket_ml);
setRendererBulk(LegoClient.RENDER_RPZB, rocket_ncrpa_steer);
setRendererBulk(LegoClient.RENDER_RPZB, rocket_ncrpa);
setRendererBulk(LegoClient.RENDER_NUKE, nuke_standard, nuke_demo, nuke_high); setRendererBulk(LegoClient.RENDER_NUKE, nuke_standard, nuke_demo, nuke_high);
nuke_tots.setRenderer(LegoClient.RENDER_GRENADE); nuke_tots.setRenderer(LegoClient.RENDER_GRENADE);

View File

@ -6,10 +6,12 @@ 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.IPAMelee;
import com.hbm.items.armor.IPARanged;
import com.hbm.items.armor.IPAWeaponsProvider; 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.lib.RefStrings;
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.GunState;
import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext; import com.hbm.items.weapon.sedna.ItemGunBaseNT.LambdaContext;
@ -26,14 +28,18 @@ public class XFactoryPA {
public static void init() { public static void init() {
ModItems.gun_pa_melee = new ItemGunMelee(WeaponQuality.UTILITY, new GunConfig() ModItems.gun_pa_melee = new ItemGunPA(WeaponQuality.UTILITY, new GunConfig()
.draw(10).inspect(55).crosshair(Crosshair.NONE) .draw(10).crosshair(Crosshair.NONE)
.rec(new Receiver(0) .rec(new Receiver(0))
.dmg(10F).delay(20).jam(0) .pp(LAMBDA_CLICK_MELEE_PRIMARY).ps(LAMBDA_CLICK_MELEE_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.offset(1, -0.0625 * 2.5, -0.25D))
.pp(LAMBDA_CLICK_PRIMARY).ps(LAMBDA_CLICK_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
.anim(LAMBDA_MELEE_ANIMS).orchestra(ORCHESTRA) .anim(LAMBDA_MELEE_ANIMS).orchestra(ORCHESTRA)
).setUnlocalizedName("gun_pa_melee"); ).setUnlocalizedName("gun_pa_melee");
ModItems.gun_pa_ranged = new ItemGunPA(WeaponQuality.UTILITY, new GunConfig()
.draw(0).crosshair(Crosshair.CROSS)
.rec(new Receiver(0))
.pp(LAMBDA_CLICK_RANGED_PRIMARY).ps(LAMBDA_CLICK_RANGED_SENONDARY).decider(GunStateDecider.LAMBDA_STANDARD_DECIDER)
).setUnlocalizedName("gun_pa_ranged").setFull3D().setTextureName(RefStrings.MODID + ":gun_pa_ranged");
} }
public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> ORCHESTRA = (stack, ctx) -> {
@ -47,11 +53,11 @@ public class XFactoryPA {
return null; return null;
}; };
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_PRIMARY = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_MELEE_PRIMARY = (stack, ctx) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient(); IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.clickPrimary(stack, ctx); if(component != null) component.clickPrimary(stack, ctx);
}; };
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_SENONDARY = (stack, ctx) -> { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_MELEE_SENONDARY = (stack, ctx) -> {
IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient(); IPAMelee component = IPAWeaponsProvider.getMeleeComponentClient();
if(component != null) component.clickSecondary(stack, ctx); if(component != null) component.clickSecondary(stack, ctx);
}; };
@ -69,9 +75,18 @@ public class XFactoryPA {
} }
} }
public static class ItemGunMelee extends ItemGunBaseNT { public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_RANGED_PRIMARY = (stack, ctx) -> {
IPARanged component = IPAWeaponsProvider.getRangedComponentClient();
if(component != null) component.clickPrimary(stack, ctx);
};
public static BiConsumer<ItemStack, LambdaContext> LAMBDA_CLICK_RANGED_SENONDARY = (stack, ctx) -> {
IPARanged component = IPAWeaponsProvider.getRangedComponentClient();
if(component != null) component.clickSecondary(stack, ctx);
};
public ItemGunMelee(WeaponQuality quality, GunConfig... cfg) { public static class ItemGunPA extends ItemGunBaseNT {
public ItemGunPA(WeaponQuality quality, GunConfig... cfg) {
super(quality, cfg); super(quality, cfg);
} }

View File

@ -50,6 +50,8 @@ public class XFactoryRocket {
public static BulletConfig[] rocket_rpzb; public static BulletConfig[] rocket_rpzb;
public static BulletConfig[] rocket_qd; public static BulletConfig[] rocket_qd;
public static BulletConfig[] rocket_ml; public static BulletConfig[] rocket_ml;
public static BulletConfig[] rocket_ncrpa;
public static BulletConfig[] rocket_ncrpa_steer;
// FLYING // FLYING
public static Consumer<Entity> LAMBDA_STANDARD_ACCELERATE = (entity) -> { public static Consumer<Entity> LAMBDA_STANDARD_ACCELERATE = (entity) -> {
@ -57,13 +59,25 @@ public class XFactoryRocket {
if(bullet.accel < 7) bullet.accel += 0.4D; if(bullet.accel < 7) bullet.accel += 0.4D;
}; };
public static Consumer<Entity> LAMBDA_STEERING_ACCELERATE = (entity) -> { public static Consumer<Entity> LAMBDA_STEERING_ACCELERATE = (entity) -> {
EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity;
if(!(entity instanceof EntityPlayer)) {
if(bullet.accel < 7) bullet.accel += 0.4D;
return;
}
EntityPlayer player = (EntityPlayer) bullet.getThrower();
steeringAccelerate(entity, player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemGunBaseNT) || !ItemGunBaseNT.getIsAiming(player.getHeldItem()));
};
public static Consumer<Entity> LAMBDA_NCR_ACCELERATE = (entity) -> {
steeringAccelerate(entity, false);
};
public static void steeringAccelerate(Entity entity, boolean noSteer) {
EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity; EntityBulletBaseMK4 bullet = (EntityBulletBaseMK4) entity;
if(bullet.accel < 4) bullet.accel += 0.4D; if(bullet.accel < 4) bullet.accel += 0.4D;
if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) return; if(bullet.getThrower() == null || !(bullet.getThrower() instanceof EntityPlayer)) return;
EntityPlayer player = (EntityPlayer) bullet.getThrower(); EntityPlayer player = (EntityPlayer) bullet.getThrower();
if(Vec3.createVectorHelper(bullet.posX - player.posX, bullet.posY - player.posY, bullet.posZ - player.posZ).lengthVector() > 100) return; if(Vec3.createVectorHelper(bullet.posX - player.posX, bullet.posY - player.posY, bullet.posZ - player.posZ).lengthVector() > 100) return;
if(player.getHeldItem() == null || !(player.getHeldItem().getItem() instanceof ItemGunBaseNT) || !ItemGunBaseNT.getIsAiming(player.getHeldItem())) return; if(noSteer) return;
MovingObjectPosition mop = Library.rayTrace(player, 200, 1); MovingObjectPosition mop = Library.rayTrace(player, 200, 1);
if(mop == null || mop.hitVec == null) return; if(mop == null || mop.hitVec == null) return;
@ -76,7 +90,7 @@ public class XFactoryRocket {
bullet.motionX = vec.xCoord * speed; bullet.motionX = vec.xCoord * speed;
bullet.motionY = vec.yCoord * speed; bullet.motionY = vec.yCoord * speed;
bullet.motionZ = vec.zCoord * speed; bullet.motionZ = vec.zCoord * speed;
}; }
// IMPACT // IMPACT
public static BiConsumer<EntityBulletBaseMK4, MovingObjectPosition> LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> { public static BiConsumer<EntityBulletBaseMK4, MovingObjectPosition> LAMBDA_STANDARD_EXPLODE = (bullet, mop) -> {
@ -138,6 +152,7 @@ public class XFactoryRocket {
public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); } public static BulletConfig makeRPZB(BulletConfig original) { return original.clone(); }
public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); } public static BulletConfig makeQD(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_STEERING_ACCELERATE); }
public static BulletConfig makeNCR(BulletConfig original) { return original.clone().setLife(400).setOnUpdate(LAMBDA_NCR_ACCELERATE); }
public static BulletConfig makeML(BulletConfig original) { return original.clone(); } public static BulletConfig makeML(BulletConfig original) { return original.clone(); }
//this is starting to get messy but we need to put this crap *somewhere* and fragmenting it into a billion classes with two methods each just isn't gonna help //this is starting to get messy but we need to put this crap *somewhere* and fragmenting it into a billion classes with two methods each just isn't gonna help
@ -156,11 +171,15 @@ public class XFactoryRocket {
rocket_rpzb = new BulletConfig[rocket_template.length]; rocket_rpzb = new BulletConfig[rocket_template.length];
rocket_qd = new BulletConfig[rocket_template.length]; rocket_qd = new BulletConfig[rocket_template.length];
rocket_ml = new BulletConfig[rocket_template.length]; rocket_ml = new BulletConfig[rocket_template.length];
rocket_ncrpa_steer = new BulletConfig[rocket_template.length];
rocket_ncrpa = new BulletConfig[rocket_template.length];
for(int i = 0; i < rocket_template.length; i++) { for(int i = 0; i < rocket_template.length; i++) {
rocket_rpzb[i] = makeRPZB(rocket_template[i]); rocket_rpzb[i] = makeRPZB(rocket_template[i]);
rocket_qd[i] = makeQD(rocket_template[i]); rocket_qd[i] = makeQD(rocket_template[i]);
rocket_ml[i] = makeML(rocket_template[i]); rocket_ml[i] = makeML(rocket_template[i]);
rocket_ncrpa_steer[i] = makeNCR(rocket_template[i]);
rocket_ncrpa[i] = makeRPZB(rocket_template[i]);
} }
ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig() ModItems.gun_panzerschreck = new ItemGunBaseNT(WeaponQuality.A_SIDE, new GunConfig()

View File

@ -268,6 +268,7 @@ public class XWeaponModManager {
/** Saves the state on receiver 0 so that if the mag changes through upgrading, the state may potentially be restored, if compatible */ /** Saves the state on receiver 0 so that if the mag changes through upgrading, the state may potentially be restored, if compatible */
private static void saveMagState(ItemStack stack, int cfg) { private static void saveMagState(ItemStack stack, int cfg) {
IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack); IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack);
if(mag == null) return;
prevMagType = mag.getType(stack, null); prevMagType = mag.getType(stack, null);
prevMagCount = mag.getAmount(stack, null); prevMagCount = mag.getAmount(stack, null);
} }
@ -285,6 +286,7 @@ public class XWeaponModManager {
changedMagState = false; changedMagState = false;
IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack); IMagazine mag = ((ItemGunBaseNT) stack.getItem()).getConfig(stack, cfg).getReceivers(stack)[0].getMagazine(stack);
if(mag == null) return;
if(mag.getType(stack, null) == prevMagType) { if(mag.getType(stack, null) == prevMagType) {
mag.setAmount(stack, MathHelper.clamp_int(prevMagCount, 0, mag.getCapacity(stack))); mag.setAmount(stack, MathHelper.clamp_int(prevMagCount, 0, mag.getCapacity(stack)));
} else { } else {

View File

@ -3,7 +3,7 @@ package com.hbm.lib;
public class RefStrings { public class RefStrings {
public static final String MODID = "hbm"; public static final String MODID = "hbm";
public static final String NAME = "Hbm's Nuclear Tech Mod"; public static final String NAME = "Hbm's Nuclear Tech Mod";
public static final String VERSION = "1.0.27 BETA (5593)"; public static final String VERSION = "1.0.27 BETA (5615)";
//HBM's Beta Naming Convention: //HBM's Beta Naming Convention:
//V T (X) //V T (X)
//V -> next release version //V -> next release version

View File

@ -73,4 +73,27 @@ public class ItemRenderPAMelee extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_FLAT); GL11.glShadeModel(GL11.GL_FLAT);
} }
public void renderOther(ItemStack stack, ItemRenderType type, Object... data) {
if(type == type.EQUIPPED) return;
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ncrpa_arm);
GL11.glPushMatrix();
double scale = 0.3125D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(90, 1, 0, 0);
GL11.glTranslated(0, -5.5, 0);
GL11.glTranslated(-2, 0, 0);
ResourceManager.armor_ncr.renderPart("Leftarm");
GL11.glTranslated(4, 0, 0);
ResourceManager.armor_ncr.renderPart("RightArm");
GL11.glPopMatrix();
GL11.glShadeModel(GL11.GL_FLAT);
}
} }

View File

@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL12;
import com.hbm.blocks.generic.BlockLoot.TileEntityLoot; import com.hbm.blocks.generic.BlockLoot.TileEntityLoot;
import com.hbm.items.ModItems; import com.hbm.items.ModItems;
import com.hbm.items.armor.ArmorNCRPA;
import com.hbm.items.armor.ArmorTrenchmaster; import com.hbm.items.armor.ArmorTrenchmaster;
import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo; import com.hbm.items.weapon.sedna.factory.GunFactory.EnumAmmo;
import com.hbm.main.ResourceManager; import com.hbm.main.ResourceManager;
@ -47,6 +48,8 @@ public class RenderLoot extends TileEntitySpecialRenderer {
} else if(stack.getItem() instanceof ArmorTrenchmaster) { } else if(stack.getItem() instanceof ArmorTrenchmaster) {
renderTrenchmaster(stack); renderTrenchmaster(stack);
} else if(stack.getItem() instanceof ArmorNCRPA) {
renderNCR(stack);
} else { } else {
renderStandardItem(item.getW()); renderStandardItem(item.getW());
} }
@ -108,6 +111,57 @@ public class RenderLoot extends TileEntitySpecialRenderer {
GL11.glPopMatrix(); GL11.glPopMatrix();
} }
private void renderNCR(ItemStack stack) {
GL11.glPushMatrix();
GL11.glTranslated(0.5, 1.5, 0.5);
GL11.glScaled(0.0625, 0.0625, 0.0625);
GL11.glRotated(180, 1, 0, 0);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
if(stack.getItem() == ModItems.ncrpa_helmet) {
bindTexture(ResourceManager.ncrpa_helmet);
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
ResourceManager.armor_ncr.renderPart("Helmet");
GL11.glDisable(GL11.GL_BLEND);
float lastX = OpenGlHelper.lastBrightnessX;
float lastY = OpenGlHelper.lastBrightnessY;
GL11.glPushAttrib(GL11.GL_LIGHTING_BIT);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240F, 240F);
GL11.glDisable(GL11.GL_LIGHTING);
ResourceManager.armor_ncr.renderPart("Eyes");
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glPopAttrib();
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, lastX, lastY);
}
if(stack.getItem() == ModItems.ncrpa_plate) {
bindTexture(ResourceManager.ncrpa_chest);
ResourceManager.armor_ncr.renderPart("Chest");
bindTexture(ResourceManager.ncrpa_arm);
GL11.glPushMatrix();
GL11.glRotated(-3, 1, 0, 0);
ResourceManager.armor_ncr.renderPart("LeftArm");
ResourceManager.armor_ncr.renderPart("RightArm");
GL11.glPopMatrix();
}
if(stack.getItem() == ModItems.ncrpa_legs) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ncrpa_leg);
ResourceManager.armor_ncr.renderPart("LeftLeg");
GL11.glPushMatrix();
GL11.glRotated(-0.1, 1, 0, 0);
ResourceManager.armor_ncr.renderPart("RightLeg");
GL11.glPopMatrix();
}
if(stack.getItem() == ModItems.ncrpa_boots) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.ncrpa_leg);
ResourceManager.armor_ncr.renderPart("LeftBoot");
GL11.glPushMatrix();
GL11.glRotated(-0.1, 1, 0, 0);
ResourceManager.armor_ncr.renderPart("RightBoot");
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
private void renderNuke() { private void renderNuke() {
GL11.glScaled(0.5, 0.5, 0.5); GL11.glScaled(0.5, 0.5, 0.5);
GL11.glTranslated(1, 0.5, 1); GL11.glTranslated(1, 0.5, 1);

View File

@ -206,6 +206,7 @@ public class TileEntityMachineChemicalFactory extends TileEntityMachineBase impl
for(FluidTank in : inputTanks) if(in.getTankType() != Fluids.NONE) for(FluidTank out : outputTanks) { // up to 144 iterations, but most of them are NOP anyway for(FluidTank in : inputTanks) if(in.getTankType() != Fluids.NONE) for(FluidTank out : outputTanks) { // up to 144 iterations, but most of them are NOP anyway
if(out.getTankType() == Fluids.NONE) continue; if(out.getTankType() == Fluids.NONE) continue;
if(out.getTankType() != in.getTankType()) continue; if(out.getTankType() != in.getTankType()) continue;
if(out.getPressure() != in.getPressure()) continue;
int toMove = BobMathUtil.min(in.getMaxFill() - in.getFill(), out.getFill(), 50); int toMove = BobMathUtil.min(in.getMaxFill() - in.getFill(), out.getFill(), 50);
if(toMove > 0) { if(toMove > 0) {
in.setFill(in.getFill() + toMove); in.setFill(in.getFill() + toMove);

View File

@ -53,6 +53,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
public int heat; public int heat;
public static final int maxHeat = 100000; public static final int maxHeat = 100000;
public boolean redstonePowered = false;
public int pressure; public int pressure;
public static final int maxPressure = 100000; public static final int maxPressure = 100000;
public boolean isOn = false; public boolean isOn = false;
@ -85,6 +86,12 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
carbonDioxide = new FluidTank(Fluids.CARBONDIOXIDE, 16000); carbonDioxide = new FluidTank(Fluids.CARBONDIOXIDE, 16000);
water = new FluidTank(Fluids.WATER, 32000); water = new FluidTank(Fluids.WATER, 32000);
} }
public void setRedstonePowered(boolean powered) {
if (!powered && this.redstonePowered) {
isOn = false;
}
this.redstonePowered = powered;
}
@Override @Override
public String getName() { public String getName() {
@ -115,6 +122,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
steam.readFromNBT(nbt, "steam"); steam.readFromNBT(nbt, "steam");
carbonDioxide.readFromNBT(nbt, "carbondioxide"); carbonDioxide.readFromNBT(nbt, "carbondioxide");
water.readFromNBT(nbt, "water"); water.readFromNBT(nbt, "water");
redstonePowered = nbt.getBoolean("redstonePowered");
} }
@Override @Override
@ -126,6 +134,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
steam.writeToNBT(nbt, "steam"); steam.writeToNBT(nbt, "steam");
carbonDioxide.writeToNBT(nbt, "carbondioxide"); carbonDioxide.writeToNBT(nbt, "carbondioxide");
water.writeToNBT(nbt, "water"); water.writeToNBT(nbt, "water");
nbt.setBoolean("redstonePowered", redstonePowered);
} }
@ -176,7 +185,9 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
public void updateEntity() { public void updateEntity() {
if(!worldObj.isRemote) { if(!worldObj.isRemote) {
if (redstonePowered) {
isOn = true;
}
this.output = 0; this.output = 0;
if(worldObj.getTotalWorldTime() % 20 == 0) { if(worldObj.getTotalWorldTime() % 20 == 0) {
@ -228,6 +239,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
buf.writeInt(this.heat); buf.writeInt(this.heat);
buf.writeInt(this.pressure); buf.writeInt(this.pressure);
buf.writeBoolean(this.isOn); buf.writeBoolean(this.isOn);
buf.writeBoolean(this.redstonePowered);
steam.serialize(buf); steam.serialize(buf);
carbonDioxide.serialize(buf); carbonDioxide.serialize(buf);
water.serialize(buf); water.serialize(buf);
@ -239,6 +251,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
this.heat = buf.readInt(); this.heat = buf.readInt();
this.pressure = buf.readInt(); this.pressure = buf.readInt();
this.isOn = buf.readBoolean(); this.isOn = buf.readBoolean();
this.redstonePowered = buf.readBoolean();
steam.deserialize(buf); steam.deserialize(buf);
carbonDioxide.deserialize(buf); carbonDioxide.deserialize(buf);
water.deserialize(buf); water.deserialize(buf);
@ -429,7 +442,7 @@ public class TileEntityReactorZirnox extends TileEntityMachineBase implements IC
@Override @Override
public void receiveControl(NBTTagCompound data) { public void receiveControl(NBTTagCompound data) {
if(data.hasKey("control")) { if(data.hasKey("control") && !redstonePowered) {
this.isOn = !this.isOn; this.isOn = !this.isOn;
} }

View File

@ -190,6 +190,13 @@ public class DamageResistanceHandler {
.addCategory(CATEGORY_ENERGY, 25F, 0.75F) .addCategory(CATEGORY_ENERGY, 25F, 0.75F)
.addExact(DamageSource.fall.damageType, 0F, 1F) .addExact(DamageSource.fall.damageType, 0F, 1F)
.setOther(15F, 0.3F)); .setOther(15F, 0.3F));
registerSet(ModItems.ncrpa_helmet, ModItems.ncrpa_plate, ModItems.ncrpa_legs, ModItems.ncrpa_boots, new ResistanceStats()
.addCategory(CATEGORY_PHYSICAL, 25F, 0.65F)
.addCategory(CATEGORY_FIRE, 10F, 0.9F)
.addCategory(CATEGORY_EXPLOSION, 15F, 0.25F)
.addCategory(CATEGORY_ENERGY, 10F, 0.5F)
.addExact(DamageSource.fall.damageType, 0F, 1F)
.setOther(15F, 0.25F));
ResistanceStats bj = new ResistanceStats() ResistanceStats bj = new ResistanceStats()
.addCategory(CATEGORY_PHYSICAL, 5F, 0.5F) .addCategory(CATEGORY_PHYSICAL, 5F, 0.5F)
.addCategory(CATEGORY_FIRE, 2.5F, 0.5F) .addCategory(CATEGORY_FIRE, 2.5F, 0.5F)

View File

@ -2221,6 +2221,7 @@ 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_pa_melee.name=Powerrüstung - Nahkampfcontroller
item.gun_pa_ranged.name=Powerrüstung - Fernkampfcontroller
item.gun_panzerschreck.name=Panzerschreck item.gun_panzerschreck.name=Panzerschreck
item.gun_pepperbox.name=Bündelrevolver item.gun_pepperbox.name=Bündelrevolver
item.gun_quadro.name=Vierfachraketenwerfer item.gun_quadro.name=Vierfachraketenwerfer

View File

@ -3064,6 +3064,7 @@ 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_pa_melee.name=Power Armor - Melee Controller
item.gun_pa_ranged.name=Power Armor - Ranged Controller
item.gun_panzerschreck.name=Panzerschreck item.gun_panzerschreck.name=Panzerschreck
item.gun_pepperbox.name=Pepperbox item.gun_pepperbox.name=Pepperbox
item.gun_quadro.name=Quad Rocket Launcher item.gun_quadro.name=Quad Rocket Launcher

View File

@ -3162,6 +3162,7 @@ item.gun_missile_launcher.name=Ракетная пусковая установ
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_pepperbox.name=Револьвер "Перечница" item.gun_pepperbox.name=Револьвер "Перечница"
item.gun_pa_melee.name=Силовая броня - Контроллер ближнего боя item.gun_pa_melee.name=Силовая броня - Контроллер ближнего боя
item.gun_pa_ranged.name=Силовая броня - Контроллер дальнего боя
item.gun_panzerschreck.name=Гранатомёт "Panzerschreck" item.gun_panzerschreck.name=Гранатомёт "Panzerschreck"
item.gun_quadro.name=Четырехствольная ракетная пусковая установка item.gun_quadro.name=Четырехствольная ракетная пусковая установка
item.gun_spas12.name=Дробовик "SPAS-12" item.gun_spas12.name=Дробовик "SPAS-12"
@ -6645,3 +6646,4 @@ desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х
// Last updated 15.02.2026 by RayzerHan // // Last updated 15.02.2026 by RayzerHan //

View File

@ -1806,42 +1806,44 @@ item.ballistite.name=混合无烟火药
item.bandaid.name=邦迪创可贴 item.bandaid.name=邦迪创可贴
item.bathwater.name=有毒肥皂水 item.bathwater.name=有毒肥皂水
item.bathwater_mk2.name=有毒肥皂水(马香味) item.bathwater_mk2.name=有毒肥皂水(马香味)
item.battery_advanced.name=高级电池(遗留) item.battery_advanced.name=高级电池
item.battery_advanced_cell.name=高级电池组(遗留) item.battery_advanced_cell.name=高级电池组
item.battery_advanced_cell_12.name=十二联高级电池组(遗留) item.battery_advanced_cell_12.name=十二联高级电池组
item.battery_advanced_cell_4.name=四联高级电池组(遗留) item.battery_advanced_cell_4.name=四联高级电池组
item.battery_creative.name=无限电池 item.battery_creative.name=无限电池
item.battery_generic.name=电池(遗留) item.battery_generic.name=电池
item.battery_lithium.name=锂电池(遗留) item.battery_lithium.name=锂电池
item.battery_lithium_cell.name=锂电池组(遗留) item.battery_lithium_cell.name=锂电池组
item.battery_lithium_cell_3.name=三联锂电池组(遗留) item.battery_lithium_cell_3.name=三联锂电池组
item.battery_lithium_cell_6.name=六联锂电池组(遗留) item.battery_lithium_cell_6.name=六联锂电池组
item.battery_potato.name=马铃薯电池 item.battery_potato.name=马铃薯电池
item.battery_potatos.name=马铃薯OS item.battery_potatos.name=马铃薯OS
item.battery_red_cell.name=红石电池组(遗留) item.battery_red_cell.name=红石电池组
item.battery_red_cell_24.name=二十四联红石电池组(遗留) item.battery_red_cell_24.name=二十四联红石电池组
item.battery_red_cell_6.name=六联红石电池组(遗留) item.battery_red_cell_6.name=六联红石电池组
item.battery_sc_americium.name=自充电 镅-241电池(遗留) item.battery_sc_americium.name=自充电 镅-241电池
item.battery_sc_gold.name=自充电 金-198电池(遗留) item.battery_sc_gold.name=自充电 金-198电池
item.battery_sc_lead.name=自充电 铅-209电池(遗留) item.battery_sc_lead.name=自充电 铅-209电池
item.battery_sc_plutonium.name=自充电 钚-238电池(遗留) item.battery_sc_plutonium.name=自充电 钚-238电池
item.battery_sc_polonium.name=自充电 钋-210电池(遗留) item.battery_sc_polonium.name=自充电 钋-210电池
item.battery_sc_technetium.name=自充电 锝-99电池遗留 item.battery_sc_technetium.name=自充电 锝-98电池
item.battery_sc_uranium.name=自充电 铀-238电池(遗留) item.battery_sc_uranium.name=自充电 铀-238电池
item.battery_schrabidium.name=Sa326电池(遗留) item.battery_schrabidium.name=Sa326电池
item.battery_schrabidium_cell.name=Sa326电池组(遗留) item.battery_schrabidium_cell.name=Sa326电池组
item.battery_schrabidium_cell_2.name=双联Sa326电池组(遗留) item.battery_schrabidium_cell_2.name=双联Sa326电池组
item.battery_schrabidium_cell_4.name=四联Sa326电池组(遗留) item.battery_schrabidium_cell_4.name=四联Sa326电池组
item.battery_spark.name=Spark电池 item.battery_spark.name=Spark电池
item.battery_spark_cell_100.name=Spark神秘储能电池组遗留 item.battery_spark_cell_100.name=Spark神秘储能电池组
item.battery_spark_cell_1000.name=Spark神秘物质能量空间遗留 item.battery_spark_cell_1000.name=Spark神秘物质能量空间
item.battery_spark_cell_10000.name=Spark时空晶体遗留 item.battery_spark_cell_10000.name=Spark时空晶体
item.battery_spark_cell_25.name=Spark神秘汽车电池遗留 item.battery_spark_cell_25.name=Spark神秘汽车电池
item.battery_spark_cell_2500.name=Spark神秘迪拉克之海遗留 item.battery_spark_cell_2500.name=Spark神秘迪拉克之海
item.battery_spark_cell_6.name=Spark电池组遗留 item.battery_spark_cell_6.name=Spark电池组
item.battery_spark_cell_power.name=Spark反物理储能装置遗留 item.battery_spark_cell_power.name=Spark反物理储能装置
item.battery_steam.name=蒸汽动力储能罐(遗留) item.battery_steam.name=蒸汽动力储能罐
item.battery_steam_large.name=大型蒸汽动力储能罐(遗留) item.battery_steam_large.name=大型蒸汽动力储能罐
item.battery_su.name=SU-电池
item.battery_su_l.name=大型SU-电池
item.battery_trixite.name=杂牌Spark电池 item.battery_trixite.name=杂牌Spark电池
item.bdcl.name=BDCL item.bdcl.name=BDCL
item.bedrock_ore.grade.base.name=%s基岩矿石 item.bedrock_ore.grade.base.name=%s基岩矿石
@ -2071,6 +2073,8 @@ item.canned_fried.name=炸鸡罐头
item.canned_fried.desc=甚至罐头都是油炸的! item.canned_fried.desc=甚至罐头都是油炸的!
item.canned_hotdogs.name=热狗罐头 item.canned_hotdogs.name=热狗罐头
item.canned_hotdogs.desc=不要与冷猫混淆。 item.canned_hotdogs.desc=不要与冷猫混淆。
item.canned_jizz.name=FlimFlam工业牌?马奶罐头
item.canned_jizz.desc=等等什么——
item.canned_kerosene.name=煤油罐头 item.canned_kerosene.name=煤油罐头
item.canned_kerosene.desc=想象一下这句俏皮的台词。 item.canned_kerosene.desc=想象一下这句俏皮的台词。
item.canned_leftovers.name=剩菜罐头 item.canned_leftovers.name=剩菜罐头
@ -4512,10 +4516,16 @@ shape.wireFine=线
shape.wireDense=致密线 shape.wireDense=致密线
shape.wiresDense=致密线 shape.wiresDense=致密线
soundCategory.ntmMachines=NTM机器 soundCategory.ntmMachines=NTM机器
tile.absorber.name=辐射吸收器(遗留)
tile.absorber_green.name=高级辐射吸收器(遗留) tile.absorber.name=辐射吸收器 OLD
tile.absorber_pink.name=精英辐射吸收器(遗留) tile.absorber_green.name=高级辐射吸收器 OLD
tile.absorber_red.name=增强型辐射吸收器(遗留) tile.absorber_pink.name=精英辐射吸收器 OLD
tile.absorber_red.name=增强型辐射吸收器 OLD
tile.rad_absorber.base.name=辐射吸收器
tile.rad_absorber.red.name=增强型辐射吸收器
tile.rad_absorber.green.name=高级辐射吸收器
tile.rad_absorber.pink.name=精英辐射吸收器
tile.acid_block.name=酸 tile.acid_block.name=酸
tile.ams_base.name=AMS基座 [开发中] tile.ams_base.name=AMS基座 [开发中]
tile.ams_emitter.name=AMS发射极 [开发中] tile.ams_emitter.name=AMS发射极 [开发中]
@ -5145,7 +5155,7 @@ tile.machine_bat9000.name=巨尻-9000 储罐
tile.machine_battery.name=蓄电池(遗留) tile.machine_battery.name=蓄电池(遗留)
tile.machine_battery_potato.name=马铃薯电池组(遗留) tile.machine_battery_potato.name=马铃薯电池组(遗留)
tile.machine_boiler.name=大型锅炉 tile.machine_boiler.name=大型锅炉
tile.machine_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热速率ΔT*0.1 TU/T tile.machine_boiler.desc=可以烧水或加热油的大型锅炉$需要外部热源$传热速率ΔT*0.01 TU/T
tile.machine_boiler_electric_off.name=电锅炉 tile.machine_boiler_electric_off.name=电锅炉
tile.machine_boiler_electric_on.name=电锅炉 tile.machine_boiler_electric_on.name=电锅炉
tile.machine_boiler_off.name=锅炉 tile.machine_boiler_off.name=锅炉
@ -5159,7 +5169,7 @@ tile.machine_chungus.desc=效率: 85%%
tile.machine_coal_off.name=火力发电机 tile.machine_coal_off.name=火力发电机
tile.machine_coal_on.name=火力发电机 tile.machine_coal_on.name=火力发电机
tile.machine_coker.name=焦化装置 tile.machine_coker.name=焦化装置
tile.machine_coker.desc=炼焦,并产生各类流体副产品$需要外部热源$传热速率ΔT*0.25 TU/T tile.machine_coker.desc=炼焦,并产生各类流体副产品$需要外部热源$传热速率ΔT*0.025 TU/T
tile.machine_combine_factory.name=CMB炼钢炉 tile.machine_combine_factory.name=CMB炼钢炉
tile.machine_combustion_engine.name=工业内燃机 tile.machine_combustion_engine.name=工业内燃机
tile.machine_compressor.name=压缩机 tile.machine_compressor.name=压缩机
@ -5207,7 +5217,7 @@ tile.machine_hephaestus.name=地热换热器
tile.machine_icf_press.name=ICF燃料靶丸制造器 tile.machine_icf_press.name=ICF燃料靶丸制造器
tile.machine_icf_press.desc=用于装填ICF靶丸$左侧燃料槽接收顶面/底面输入,右侧燃料槽接收侧面输入$μ子胶囊和空靶丸可从任意面输入 tile.machine_icf_press.desc=用于装填ICF靶丸$左侧燃料槽接收顶面/底面输入,右侧燃料槽接收侧面输入$μ子胶囊和空靶丸可从任意面输入
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.01 TU/T$不会爆炸
tile.machine_industrial_generator.name=工业发电机 tile.machine_industrial_generator.name=工业发电机
tile.machine_keyforge.name=锁匠桌 tile.machine_keyforge.name=锁匠桌
tile.machine_large_turbine.name=工业汽轮机 tile.machine_large_turbine.name=工业汽轮机
@ -5512,15 +5522,16 @@ tile.rbmk_control_auto.name=RBMK反应堆自动控制棒
tile.rbmk_control_mod.name=RBMK反应堆慢化控制棒 tile.rbmk_control_mod.name=RBMK反应堆慢化控制棒
tile.rbmk_crane_console.name=RBMK起重机控制台 tile.rbmk_crane_console.name=RBMK起重机控制台
tile.rbmk_heater.name=RBMK流体加热器 tile.rbmk_heater.name=RBMK流体加热器
tile.rbmk_heatex.name=RBMK换热器
tile.rbmk_loader.name=RBMK反应堆蒸汽导出器 tile.rbmk_loader.name=RBMK反应堆蒸汽导出器
tile.rbmk_loader.desc=让RBMK反应堆在底部同时拥有水接口和蒸汽接口$在RBMK蒸汽管道下方放置水管道再在下面放置蒸汽导出器$最后将管道连接至蒸汽导出器即可 tile.rbmk_loader.desc=让RBMK反应堆在底部同时拥有水接口和蒸汽接口$在RBMK蒸汽管道下方放置水管道再在下面放置蒸汽导出器$最后将管道连接至蒸汽导出器即可
tile.rbmk_moderator.name=RBMK反应堆石墨慢化剂 tile.rbmk_moderator.name=RBMK反应堆石墨慢化剂
tile.rbmk_outgasser.name=RBMK反应堆辐照通道 tile.rbmk_outgasser.name=RBMK反应堆辐照通道
tile.rbmk_reflector.name=RBMK反应堆碳化钨中子反射器 tile.rbmk_reflector.name=RBMK反应堆碳化钨中子反射器
tile.rbmk_rod.name=RBMK反应堆燃料通道 tile.rbmk_rod.name=RBMK反应堆燃料
tile.rbmk_rod_mod.name=RBMK反应堆慢化燃料通道 tile.rbmk_rod_mod.name=RBMK反应堆慢化燃料
tile.rbmk_rod_reasim.name=RBMK反应堆燃料通道(ReaSim) tile.rbmk_rod_reasim.name=RBMK反应堆燃料(ReaSim)
tile.rbmk_rod_reasim_mod.name=RBMK反应堆慢化燃料通道(ReaSim) tile.rbmk_rod_reasim_mod.name=RBMK反应堆慢化燃料(ReaSim)
tile.rbmk_steam_inlet.name=RBMK ReaSim进水口 tile.rbmk_steam_inlet.name=RBMK ReaSim进水口
tile.rbmk_steam_inlet.desc=当启用ReaSim锅炉时向反应堆内输入水$从侧面连接至反应堆结构 tile.rbmk_steam_inlet.desc=当启用ReaSim锅炉时向反应堆内输入水$从侧面连接至反应堆结构
tile.rbmk_steam_outlet.name=RBMK ReaSim蒸汽出口 tile.rbmk_steam_outlet.name=RBMK ReaSim蒸汽出口
@ -5894,8 +5905,8 @@ item.conveyor_wand.vertical.desc=能放置垂直输送带或者滑槽来垂直
item.gun_g3_a3.name=G3A3 item.gun_g3_a3.name=G3A3
item.gun_g3_infiltrator.name=渗透者 item.gun_g3_infiltrator.name=渗透者
item.gun_greasegun_m3.name=M3 item.gun_greasegun_m3.name=M3
item.gun_heavy_revolver_scoped.name=带准镜的.44马格南转轮手枪 item.gun_heavy_revolver_scoped.name=带准镜的.44马格南转轮手枪
item.gun_henry_lincoln.name=林肯拉杆枪 item.gun_henry_lincoln.name=林肯的中继器
item.gun_maresleg_short.name=马腿 item.gun_maresleg_short.name=马腿
item.gun_mas36.name=南方之星 item.gun_mas36.name=南方之星
item.gun_uzi_richter.name=里氏 item.gun_uzi_richter.name=里氏
@ -5907,9 +5918,9 @@ item.weapon_mod_caliber.m357.name=.357马格南改装套件
item.weapon_mod_caliber.m44.name=.44马格南改装套件 item.weapon_mod_caliber.m44.name=.44马格南改装套件
item.weapon_mod_caliber.p22.name=.22LR改装套件 item.weapon_mod_caliber.p22.name=.22LR改装套件
item.weapon_mod_caliber.p45.name=.45口径改装套件 item.weapon_mod_caliber.p45.name=.45口径改装套件
item.weapon_mod_caliber.p9.name=9mm改装套件 item.weapon_mod_caliber.p9.name=9毫米口径改装套件
item.weapon_mod_caliber.r556.name=5.56mm改装套件 item.weapon_mod_caliber.r556.name=5.56mm改装套件
item.weapon_mod_caliber.r762.name=7.62mm改装套件 item.weapon_mod_caliber.r762.name=7.62改装套件
item.weapon_mod_generic.bigmt_damage.name=土星弹道优化器 item.weapon_mod_generic.bigmt_damage.name=土星弹道优化器
item.weapon_mod_generic.bigmt_dura.name=高耐用性土星部件 item.weapon_mod_generic.bigmt_dura.name=高耐用性土星部件
item.weapon_mod_generic.bronze_damage.name=青铜弹道优化器 item.weapon_mod_generic.bronze_damage.name=青铜弹道优化器
@ -5924,7 +5935,7 @@ item.weapon_mod_generic.iron_damage.name=铁制弹道优化器
item.weapon_mod_generic.iron_dura.name=高耐用性铁制部件 item.weapon_mod_generic.iron_dura.name=高耐用性铁制部件
item.weapon_mod_generic.steel_damage.name=钢制弹道优化器 item.weapon_mod_generic.steel_damage.name=钢制弹道优化器
item.weapon_mod_generic.steel_dura.name=高耐用性钢制部件 item.weapon_mod_generic.steel_dura.name=高耐用性钢制部件
item.weapon_mod_generic.tcalloy_damage.name=耐高温合金弹道优化 item.weapon_mod_generic.tcalloy_damage.name=耐高温合金弹道优化
item.weapon_mod_generic.tcalloy_dura.name=高耐用性耐高温合金部件 item.weapon_mod_generic.tcalloy_dura.name=高耐用性耐高温合金部件
item.weapon_mod_generic.wsteel_damage.name=武器级钢弹道优化器 item.weapon_mod_generic.wsteel_damage.name=武器级钢弹道优化器
item.weapon_mod_generic.wsteel_dura.name=高耐用性武器级钢部件 item.weapon_mod_generic.wsteel_dura.name=高耐用性武器级钢部件
@ -6001,11 +6012,11 @@ item.ammo_bag.name=弹药袋
item.ammo_bag_infinite.name=无限弹药袋 item.ammo_bag_infinite.name=无限弹药袋
item.gun_g3_zebra.name=斑马步枪 item.gun_g3_zebra.name=斑马步枪
container.rttyController=无线红石信号控制器 container.rttyController=无线红石信号控制器
container.rttyReader=无线红石信号读取 container.rttyReader=无线红石信号控制
tile.radio_torch_controller.name=无线红石信号控制器 tile.radio_torch_controller.name=无线红石信号控制器
tile.radio_torch_controller.desc=可以接收信号并将信号传送到与其连接的机器 tile.radio_torch_controller.desc=可以接收信号并将信号传送到与其连接的机器
tile.radio_torch_reader.name=无线红石信号读取 tile.radio_torch_reader.name=无线红石信号控制
tile.radio_torch_reader.desc=从连接的块读取数值并以指定的频率发送 tile.radio_torch_reader.desc=从连接的块读取数值并以指定的频率发送
item.ammo_standard.ct_hook.name=抓钩 item.ammo_standard.ct_hook.name=抓钩
item.ammo_standard.ct_mortar.name=炸药包 item.ammo_standard.ct_mortar.name=炸药包
item.ammo_standard.ct_mortar_charge.name=重型炸药包 item.ammo_standard.ct_mortar_charge.name=重型炸药包
@ -6360,7 +6371,7 @@ tile.fusion_component.blanket.name=聚变反应堆内部覆层
tile.fusion_component.bscco_welded.name=BSCCO超导线圈 (焊接) tile.fusion_component.bscco_welded.name=BSCCO超导线圈 (焊接)
tile.fusion_component.motor.name=聚变反应堆线路管道 tile.fusion_component.motor.name=聚变反应堆线路管道
tile.fusion_coupler.name=聚变反应堆等离子体耦合器 tile.fusion_coupler.name=聚变反应堆等离子体耦合器
tile.fusion_coupler.desc=将等离子体输出的能量转化为调管能量。$可以用于点燃第二个等离子体容器中的等离子体。 tile.fusion_coupler.desc=将等离子体输出的能量转化为调管能量。$可以用于点燃第二个等离子体容器中的等离子体。
tile.fusion_klystron.name=速调管 tile.fusion_klystron.name=速调管
tile.fusion_klystron.desc=聚变反应堆的动力源。$使用压缩空气进行冷却。 tile.fusion_klystron.desc=聚变反应堆的动力源。$使用压缩空气进行冷却。
tile.fusion_mhdt.name=磁流体涡轮发电机 tile.fusion_mhdt.name=磁流体涡轮发电机

Binary file not shown.

After

Width:  |  Height:  |  Size: 235 B