i have achieved stability (ability to stab)

This commit is contained in:
Bob 2025-05-04 22:55:00 +02:00
parent dbbe55a990
commit 82d3523ea1
36 changed files with 2224 additions and 1558 deletions

View File

@ -3,6 +3,12 @@
* Identical to the regular ammo bag, but ammo is never depleted
* Provides 9,999 units of ammo for the purposes of reloading/belts, meaning that even a single bullet in the bag allows a full reload
* Obviously creative-only
* Redstone-over-radio reader
* Can read certain values from connected machines and send them as signals
* Currently supports batteries, capacitors and tanks
* Redstone-over-radio controller
* Can receive control signals to perform certain actions within the connected machine
* Currently supports mode and priority changes for batteries and tanks
## Changed
* Nerfed AP and DU round damage multiplier
@ -25,6 +31,17 @@
* Sub-beams will strike the initially hit entity again, meaning that the more sub-beams there are, the more powerful the initial strike ends up being
* Renamed the default capacitor ammo to "capacitor (standard)" to avoid confusion
* Low wavelength capacitors now need niobium instead of silicon to make
* Bayonets can now be applied to the carbine, making it the first standard arsenal gun that can take the mod
* VNT type explosions with smooth damage falloff (used by guns, mines, etc) no longer calculate entity distance using the entity's origin position (i.e. in the center at the ground) but rather the closest hitbox intercept
* This means that shooting entities directly with explosives should deal roughly the same damage no matter where they are hit, instead of dealing more damage closer to the feet
* This also fixes an issue where entities with large hitboxes (eg. mas man) are unaffected by small explosions that deal direct hits (like explosive buckshot)
* VNT type explosions with smooth damage falloff should no longer deal any damage if more than 1 in 8 blocks between the source and the target are solid
* This prevents any damage taken if the target is behind a wall
* This also means that thin walls do not protect against sufficiently large explosions
* Added circuits to the turbofan recipe
* Simplified the industrial combustion engine recipe
* Removed the old hadron core recipe
* Changed the old pylon and energy storage block textures to use standardized red copper connectors instead of the non-standard three prong outlets
## Fixed
* Fixed a potential crash caused by cargo dropships landing on cargo docks with no satellite chip installed
@ -32,4 +49,6 @@
* Fixed errors thrown when loading in old system bullet entities
* Fixed dupe regarding breaking transport drones
* Fixed 12 gauge flechette DT negation not being the intended value
* Fixed carbine mistakenly showing a round being chambered even after firing the last loaded round
* Fixed carbine mistakenly showing a round being chambered even after firing the last loaded round
* Fixed `any` OD prefix not registering correctly, breaking some recipe compatibility as well as older recipe configs
* Fixed bug where changing a pipe's type with a fluid ID will keep a "zombie" pipe of the previous type around, which keeps a connection up even when the pipe nets end up separated

View File

@ -1,6 +1,6 @@
mod_version=1.0.27
# Empty build number makes a release type
mod_build_number=5313
mod_build_number=5320
credits=HbMinecraft,\
\ rodolphito (explosion algorithms),\

View File

@ -797,7 +797,6 @@ public class ModBlocks {
public static Block radio_torch_logic;
public static Block radio_torch_reader;
public static Block radio_torch_controller;
public static Block radio_torch_programmer;
public static Block radio_telex;
public static Block conveyor;
@ -1925,7 +1924,6 @@ public class ModBlocks {
radio_torch_logic = new RadioTorchLogic().setBlockName("radio_torch_logic").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab);
radio_torch_reader = new RadioTorchReader().setBlockName("radio_torch_reader").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtty_reader");
radio_torch_controller = new RadioTorchController().setBlockName("radio_torch_controller").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtty_controller");
radio_torch_programmer = new RadioTorchProgrammer().setBlockName("radio_torch_programmer").setHardness(0.1F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":rtty_programmer");
radio_telex = new RadioTelex().setBlockName("radio_telex").setHardness(3F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":radio_telex");
conveyor = new BlockConveyor().setBlockName("conveyor").setHardness(2.0F).setResistance(2.0F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":conveyor");
@ -3190,7 +3188,6 @@ public class ModBlocks {
register(radio_torch_logic);
register(radio_torch_reader);
register(radio_torch_controller);
register(radio_torch_programmer);
register(radio_telex);
register(crane_extractor);

View File

@ -18,6 +18,7 @@ import com.hbm.util.fauxpointtwelve.BlockPos;
import api.hbm.energymk2.IEnergyProviderMK2;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.redstoneoverradio.IRORValueProvider;
import cpw.mods.fml.client.registry.RenderingRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@ -149,7 +150,7 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
player.addExhaustion(0.025F);
}
public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT {
public static class TileEntityCapacitor extends TileEntityLoadedBase implements IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, IRORValueProvider {
public long power;
protected long maxPower;
@ -299,5 +300,20 @@ public class MachineCapacitor extends BlockContainer implements ILookOverlay, IP
nbt.setLong("power", power);
nbt.setLong("maxPower", maxPower);
}
@Override
public String[] getFunctionInfo() {
return new String[] {
PREFIX_VALUE + "fill",
PREFIX_VALUE + "fillpercent",
};
}
@Override
public String provideRORValue(String name) {
if((PREFIX_VALUE + "fill").equals(name)) return "" + this.power;
if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + this.power * 100 / this.maxPower;
return null;
}
}
}

View File

@ -79,7 +79,12 @@ public class EntityProcessorCross implements IEntityProcessor {
for(int index = 0; index < list.size(); ++index) {
Entity entity = (Entity) list.get(index);
double distanceScaled = entity.getDistance(x, y, z) / size;
double xDist = (entity.boundingBox.minX <= x && entity.boundingBox.maxX >= x) ? 0 : Math.min(Math.abs(entity.boundingBox.minX - x), Math.abs(entity.boundingBox.maxX - x));
double yDist = (entity.boundingBox.minY <= y && entity.boundingBox.maxY >= y) ? 0 : Math.min(Math.abs(entity.boundingBox.minY - y), Math.abs(entity.boundingBox.maxY - y));
double zDist = (entity.boundingBox.minZ <= z && entity.boundingBox.maxZ >= z) ? 0 : Math.min(Math.abs(entity.boundingBox.minZ - z), Math.abs(entity.boundingBox.maxZ - z));
double dist = Math.sqrt(xDist * xDist + yDist * yDist + zDist * zDist);
double distanceScaled = dist / size;
if(distanceScaled <= 1.0D) {
@ -128,7 +133,11 @@ public class EntityProcessorCross implements IEntityProcessor {
attackEntity(entity, explosion, entry.getValue());
if(damage != null) {
double distanceScaled = entity.getDistance(x, y, z) / size;
double xDist = (entity.boundingBox.minX <= x && entity.boundingBox.maxX >= x) ? 0 : Math.min(Math.abs(entity.boundingBox.minX - x), Math.abs(entity.boundingBox.maxX - x));
double yDist = (entity.boundingBox.minY <= y && entity.boundingBox.maxY >= y) ? 0 : Math.min(Math.abs(entity.boundingBox.minY - y), Math.abs(entity.boundingBox.maxY - y));
double zDist = (entity.boundingBox.minZ <= z && entity.boundingBox.maxZ >= z) ? 0 : Math.min(Math.abs(entity.boundingBox.minZ - z), Math.abs(entity.boundingBox.maxZ - z));
double dist = Math.sqrt(xDist * xDist + yDist * yDist + zDist * zDist);
double distanceScaled = dist / size;
damage.handleAttack(explosion, entity, distanceScaled);
}
}

View File

@ -49,6 +49,7 @@ public class EntityProcessorCrossSmooth extends EntityProcessorCross {
@Override
public float calculateDamage(double distanceScaled, double density, double knockback, float size) {
if(density < 0.125) return 0; //shitty hack
return (float) (fixedDamage * (1 - distanceScaled));
}
}

View File

@ -104,6 +104,10 @@ public class GUIScreenRadioTorchController extends GuiScreen {
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
if(rtty.polling) {
drawTexturedModalRect(guiLeft + 173, guiTop + 17, 0, 42, 18, 18);
}
this.frequency.drawTextBox();
}

View File

@ -9,7 +9,7 @@ public class MaterialShapes {
public static final List<MaterialShapes> allShapes = new ArrayList();
public static final MaterialShapes ANY = new MaterialShapes(0).noAutogen();
public static final MaterialShapes ANY = new MaterialShapes(0, "any").noAutogen();
public static final MaterialShapes ONLY_ORE = new MaterialShapes(0, "ore").noAutogen();
public static final MaterialShapes ORE = new MaterialShapes(0, "ore", "oreNether").noAutogen();
public static final MaterialShapes ORENETHER = new MaterialShapes(0, "oreNether").noAutogen();

View File

@ -142,7 +142,7 @@ public class AssemblerRecipes extends SerializableRecipe {
makeRecipe(new ComparableStack(ModBlocks.machine_bat9000, 1), new AStack[] {new OreDictStack(STEEL.plate528(), 16), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 2), new ComparableStack(ModBlocks.steel_scaffold, 16), new OreDictStack(ANY_TAR.any(), 16), },150);
makeRecipe(new ComparableStack(ModBlocks.machine_orbus, 1), new AStack[] {new OreDictStack(STEEL.ingot(), 12), new OreDictStack(ANY_RESISTANTALLOY.plateWelded(), 8), new OreDictStack(BIGMT.plate(), 12), new ComparableStack(ModItems.coil_advanced_alloy, 12), new ComparableStack(ModItems.battery_sc_polonium, 1) }, 200);
makeRecipe(new ComparableStack(ModBlocks.machine_mining_laser, 1), new AStack[] {new ComparableStack(ModItems.tank_steel, 3), !exp ? new OreDictStack(STEEL.plate528(), 16) : new OreDictStack(STEEL.heavyComp(), 3), new ComparableStack(ModItems.crystal_redstone, 3), new ComparableStack(Items.diamond, 3), new OreDictStack(ANY_PLASTIC.ingot(), 4), new ComparableStack(ModItems.motor, 3), !exp ? new OreDictStack(DURA.ingot(), 4) : new OreDictStack(DESH.heavyComp(), 1), new OreDictStack(DURA.bolt(), 8), new ComparableStack(ModBlocks.machine_battery, 3), },400);
makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(TI.shell(), 8) : new OreDictStack(TI.heavyComp(), 1), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12) }, 300);
makeRecipe(new ComparableStack(ModBlocks.machine_turbofan, 1), new AStack[] {!exp ? new OreDictStack(TI.shell(), 8) : new OreDictStack(TI.heavyComp(), 1), new OreDictStack(DURA.pipe(), 4), new OreDictStack(ANY_PLASTIC.ingot(), 12), new ComparableStack(ModItems.turbine_tungsten, 1), new OreDictStack(GOLD.wireDense(), 12), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal()) }, 300);
makeRecipe(new ComparableStack(ModBlocks.machine_turbinegas, 1), new AStack[] {!exp ? new OreDictStack(STEEL.shell(), 10) : new OreDictStack(STEEL.heavyComp(), 2), new OreDictStack(GOLD.wireDense(), 12), new OreDictStack(DURA.pipe(), 4), new ComparableStack(ModBlocks.steel_scaffold, 8), new OreDictStack(STEEL.pipe(), 4), new ComparableStack(ModItems.turbine_tungsten, 3), new ComparableStack(ModItems.motor, 2), new ComparableStack(ModItems.ingot_rubber, 4), new ComparableStack(ModItems.circuit, 3, EnumCircuitType.BASIC.ordinal())}, 600);
makeRecipe(new ComparableStack(ModBlocks.machine_teleporter, 1), new AStack[] {new OreDictStack(TI.ingot(), 8), new OreDictStack(ALLOY.plate528(), 12), new OreDictStack(GOLD.wireFine(), 32), new ComparableStack(ModItems.entanglement_kit, 1), new ComparableStack(ModBlocks.machine_battery, 1) },300);
makeRecipe(new ComparableStack(ModBlocks.machine_schrabidium_transmutator, 1), new AStack[] {new OreDictStack(MAGTUNG.ingot(), 1), !exp ? new OreDictStack(TI.ingot(), 24) : new OreDictStack(TI.heavyComp(), 2), !exp ? new OreDictStack(ALLOY.plate(), 18) : new OreDictStack(ALLOY.heavyComp(), 1), new OreDictStack(STEEL.plateWelded(), 12), new ComparableStack(ModItems.plate_desh, 6), new OreDictStack(RUBBER.ingot(), 8), new ComparableStack(ModBlocks.machine_battery, 5), new ComparableStack(ModItems.circuit, 2, EnumCircuitType.ADVANCED.ordinal()), },500);
@ -402,13 +402,10 @@ public class AssemblerRecipes extends SerializableRecipe {
new ComparableStack(ModItems.circuit, 4, EnumCircuitType.BISMOID),
}, 600);
makeRecipe(new ComparableStack(ModBlocks.machine_combustion_engine, 1), new AStack[] {
new OreDictStack(STEEL.plate528(), 12),
new OreDictStack(IRON.plate(), 8),
new OreDictStack(CU.ingot(), 8),
new OreDictStack(GOLD.wireDense(), 6),
new ComparableStack(ModItems.tank_steel, 2),
new OreDictStack(W.bolt(), 16),
new OreDictStack(MINGRADE.wireFine(), 24),
new OreDictStack(STEEL.plate528(), 16),
new OreDictStack(CU.ingot(), 12),
new OreDictStack(GOLD.wireDense(), 8),
new ComparableStack(ModItems.tank_steel, 4),
new ComparableStack(ModItems.circuit, 1, EnumCircuitType.BASIC)
}, 300);

View File

@ -1356,7 +1356,7 @@ public class Orchestras {
if(casing != null) CasingCreator.composeEffect(entity.worldObj, entity,
0.375, aiming ? 0 : -0.125, aiming ? 0 : -0.25D,
-0.05, 0.2, -0.025,
0.01, -10F + (float) entity.getRNG().nextGaussian() * 10F, (float) entity.getRNG().nextGaussian() * 12.5F, casing.getName());
0.01, -10F + (float) entity.getRNG().nextGaussian() * 10F, (float) entity.getRNG().nextGaussian() * 12.5F, casing.getName(), true, 60, 0.5D, 10);
}
}

View File

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

View File

@ -140,7 +140,9 @@ public class WeaponModManager {
new WeaponModDefinition(EnumModSpecial.CHOKE).addMod(new Item[] {ModItems.gun_pepperbox, ModItems.gun_maresleg, ModItems.gun_double_barrel, ModItems.gun_liberator, ModItems.gun_spas12}, new WeaponModChoke(210));
new WeaponModDefinition(EnumModSpecial.FURNITURE_GREEN).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_GREEN));
new WeaponModDefinition(EnumModSpecial.FURNITURE_BLACK).addMod(ModItems.gun_g3, new WeaponModPolymerFurniture(ID_FURNITURE_BLACK));
new WeaponModDefinition(EnumModSpecial.BAYONET).addMod(ModItems.gun_mas36, new WeaponModMASBayonet(ID_MAS_BAYONET));
new WeaponModDefinition(EnumModSpecial.BAYONET)
.addMod(ModItems.gun_mas36, new WeaponModMASBayonet(ID_MAS_BAYONET))
.addMod(ModItems.gun_carbine, new WeaponModCarbineBayonet(ID_CARBINE_BAYONET));
new WeaponModDefinition(EnumModSpecial.STACK_MAG).addMod(new Item[] {ModItems.gun_greasegun, ModItems.gun_uzi, ModItems.gun_uzi_akimbo, ModItems.gun_aberrator, ModItems.gun_aberrator_eott}, new WeaponModStackMag(214));
new WeaponModDefinition(EnumModSpecial.SKIN_SATURNITE).addMod(new Item[] {ModItems.gun_uzi, ModItems.gun_uzi_akimbo}, new WeaponModUziSaturnite(ID_UZI_SATURN));
new WeaponModDefinition(EnumModSpecial.LAS_SHOTGUN).addMod(new Item[] {ModItems.gun_lasrifle}, new WeaponModLasShotgun(ID_LAS_SHOTGUN));
@ -198,6 +200,7 @@ public class WeaponModManager {
public static final int ID_LAS_SHOTGUN = 216;
public static final int ID_LAS_CAPACITOR = 217;
public static final int ID_LAS_AUTO = 218;
public static final int ID_CARBINE_BAYONET = 219;
public static ItemStack[] getUpgradeItems(ItemStack stack, int cfg) {
if(!stack.hasTagCompound()) return new ItemStack[0];

View File

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

View File

@ -220,6 +220,8 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModBlocks.radio_torch_receiver, 4), new Object[] { "G", "R", "I", 'G', "dustGlowstone", 'R', Blocks.redstone_torch, 'I', IRON.ingot() });
addRecipeAuto(new ItemStack(ModBlocks.radio_torch_logic, 4), new Object[] { "G", "R", "I", 'G', "dustGlowstone", 'R', Blocks.redstone_torch, 'I', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.CHIP) });
addRecipeAuto(new ItemStack(ModBlocks.radio_torch_counter, 4), new Object[] { "G", "R", "I", 'G', "dustGlowstone", 'R', Blocks.redstone_torch, 'I', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.radio_torch_reader, 4), new Object[] { " G ", "IRI", 'G', "dustGlowstone", 'R', Blocks.redstone_torch, 'I', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.radio_torch_controller, 4), new Object[] { " G ", "IRI", 'G', "dustGlowstone", 'R', Blocks.redstone_torch, 'I', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.VACUUM_TUBE) });
addRecipeAuto(new ItemStack(ModBlocks.radio_telex, 2), new Object[] { "SCR", "W#W", "WWW", 'S', ModBlocks.radio_torch_sender, 'C', ModItems.crt_display, 'R', ModBlocks.radio_torch_receiver, 'W', KEY_PLANKS, '#', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) });
addRecipeAuto(DictFrame.fromOne(ModItems.conveyor_wand, ConveyorType.REGULAR, 16), new Object[] { "LLL", "I I", "LLL", 'L', Items.leather, 'I', IRON.ingot() });
@ -1045,14 +1047,14 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModItems.neutron_reflector, 4), new Object[] { "##", "##", '#', W.ingot() });
for(NTMMaterial mat : Mats.orderedList) {
if(mat.autogen.contains(MaterialShapes.WIRE)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.wire_fine, 24, mat.id), new Object[] { "###", '#', MaterialShapes.INGOT.prefixes[0] + name });
if(mat.autogen.contains(MaterialShapes.WIRE)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.wire_fine, 24, mat.id), new Object[] { "###", '#', MaterialShapes.INGOT.name() + name });
}
addRecipeAuto(new ItemStack(ModItems.book_of_), new Object[] { "BGB", "GAG", "BGB", 'B', ModItems.egg_balefire_shard, 'G', GOLD.ingot(), 'A', Items.book });
}
for(NTMMaterial mat : Mats.orderedList) {
if(mat.autogen.contains(MaterialShapes.BOLT)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.bolt, 16, mat.id), new Object[] { "#", "#", '#', MaterialShapes.INGOT.prefixes[0] + name });
if(mat.autogen.contains(MaterialShapes.BOLT)) for(String name : mat.names) addRecipeAuto(new ItemStack(ModItems.bolt, 16, mat.id), new Object[] { "#", "#", '#', MaterialShapes.INGOT.name() + name });
}
if(!GeneralConfig.enable528) {
@ -1062,7 +1064,6 @@ public class CraftingManager {
addRecipeAuto(new ItemStack(ModItems.reactor_sensor, 1), new Object[] { "WPW", "CMC", "PPP", 'W', W.wireFine(), 'P', PB.plate(), 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.BASIC), 'M', ModItems.magnetron });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_console, 1), new Object[] { "BBB", "DGD", "DCD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'G', KEY_ANYPANE, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_crane_console, 1), new Object[] { "BCD", "DDD", 'B', B.ingot(), 'D', ModBlocks.deco_rbmk, 'C', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ANALOG) });
addRecipeAuto(new ItemStack(ModBlocks.hadron_core, 1), new Object[] { "CCC", "DSD", "CCC", 'C', ModBlocks.hadron_coil_alloy, 'D', ModBlocks.hadron_diode, 'S', DictFrame.fromOne(ModItems.circuit, EnumCircuitType.ADVANCED) });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_rod, 1), new Object[] { "C", "R", "C", 'C', STEEL.shell(), 'R', ModBlocks.rbmk_blank });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_rod_mod, 1), new Object[] { "BGB", "GRG", "BGB", 'G', GRAPHITE.block(), 'R', ModBlocks.rbmk_rod, 'B', ModItems.nugget_bismuth });
addRecipeAuto(new ItemStack(ModBlocks.rbmk_boiler, 1), new Object[] { "CPC", "CRC", "CPC", 'C', CU.pipe(), 'P', CU.shell(), 'R', ModBlocks.rbmk_blank });

View File

@ -972,6 +972,7 @@ public class ResourceManager {
public static final ResourceLocation lilmac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lilmac.png");
public static final ResourceLocation lilmac_scope_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/lilmac_scope.png");
public static final ResourceLocation carbine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/huntsman.png");
public static final ResourceLocation carbine_bayonet_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/carbine_bayonet.png");
public static final ResourceLocation am180_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/am180.png");
public static final ResourceLocation liberator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/liberator.png");
public static final ResourceLocation flamethrower_tex = new ResourceLocation(RefStrings.MODID, "textures/models/weapons/flamethrower.png");

View File

@ -3,6 +3,7 @@ package com.hbm.render.item.weapon.sedna;
import org.lwjgl.opengl.GL11;
import com.hbm.items.weapon.sedna.ItemGunBaseNT;
import com.hbm.items.weapon.sedna.mods.WeaponModManager;
import com.hbm.main.ResourceManager;
import com.hbm.render.anim.HbmAnimations;
@ -45,6 +46,7 @@ public class ItemRenderCarbine extends ItemRenderWeaponBase {
double[] lift = HbmAnimations.getRelevantTransformation("LIFT");
double[] bullet = HbmAnimations.getRelevantTransformation("BULLET");
double[] rel = HbmAnimations.getRelevantTransformation("REL");
double[] stab = HbmAnimations.getRelevantTransformation("STAB");
GL11.glTranslated(0, -1, -2);
GL11.glRotated(equip[0], 1, 0, 0);
@ -53,6 +55,8 @@ public class ItemRenderCarbine extends ItemRenderWeaponBase {
GL11.glTranslated(0, 0, -2);
GL11.glRotated(lift[0], 1, 0, 0);
GL11.glTranslated(0, 0, 2);
GL11.glTranslated(stab[0], stab[1], stab[2]);
GL11.glTranslated(0, 0, recoil[2]);
@ -72,6 +76,11 @@ public class ItemRenderCarbine extends ItemRenderWeaponBase {
if(bullet[0] != 1) ResourceManager.carbine.renderPart("Bullet");
GL11.glPopMatrix();
if(hasBayonet(stack)) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.carbine_bayonet_tex);
ResourceManager.carbine.renderPart("Bayonet");
}
GL11.glPushMatrix();
GL11.glTranslated(0, 1, 8);
GL11.glRotated(90, 0, 1, 0);
@ -101,18 +110,27 @@ public class ItemRenderCarbine extends ItemRenderWeaponBase {
@Override
public void setupInv(ItemStack stack) {
super.setupInv(stack);
double scale = 1.375D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(45, 0, 1, 0);
GL11.glTranslated(-0.5, 0, 0);
if(hasBayonet(stack)) {
double scale = 1.1875D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(45, 0, 1, 0);
GL11.glTranslated(1.5, 0, 0);
} else {
double scale = 1.375D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(25, 1, 0, 0);
GL11.glRotated(45, 0, 1, 0);
GL11.glTranslated(-0.5, 0, 0);
}
}
@Override
public void setupModTable(ItemStack stack) {
double scale = -7.5D;
double scale = -7.75D;
GL11.glScaled(scale, scale, scale);
GL11.glRotated(90, 0, 1, 0);
GL11.glTranslated(0, 0, -1.75);
}
@Override
@ -121,7 +139,17 @@ public class ItemRenderCarbine extends ItemRenderWeaponBase {
GL11.glShadeModel(GL11.GL_SMOOTH);
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.carbine_tex);
ResourceManager.carbine.renderAll();
ResourceManager.carbine.renderPart("Gun");
ResourceManager.carbine.renderPart("Slide");
ResourceManager.carbine.renderPart("Magazine");
if(hasBayonet(stack)) {
Minecraft.getMinecraft().renderEngine.bindTexture(ResourceManager.carbine_bayonet_tex);
ResourceManager.carbine.renderPart("Bayonet");
}
GL11.glShadeModel(GL11.GL_FLAT);
}
public boolean hasBayonet(ItemStack stack) {
return WeaponModManager.hasUpgrade(stack, 0, WeaponModManager.ID_CARBINE_BAYONET);
}
}

View File

@ -10,6 +10,7 @@ import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluidmk2.IFluidConnectorMK2;
import api.hbm.fluidmk2.IFluidReceiverMK2;
import api.hbm.redstoneoverradio.IRORInfo;
import api.hbm.redstoneoverradio.IRORInteractive;
import api.hbm.redstoneoverradio.IRORValueProvider;
import api.hbm.tile.IHeatSource;
import com.hbm.inventory.material.Mats;
@ -30,7 +31,7 @@ import net.minecraftforge.common.util.ForgeDirection;
@Optional.Interface(iface = "com.hbm.handler.CompatHandler.OCComponent", modid = "opencomputers"),
@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")
})
public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, ISidedInventory, IFluidReceiverMK2, IHeatSource, ICrucibleAcceptor, SimpleComponent, OCComponent, IRORValueProvider {
public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyReceiverMK2, ISidedInventory, IFluidReceiverMK2, IHeatSource, ICrucibleAcceptor, SimpleComponent, OCComponent, IRORValueProvider, IRORInteractive {
TileEntity tile;
boolean inventory;
@ -524,6 +525,12 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy
@Override
public String provideRORValue(String name) {
if(getTile() instanceof IRORValueProvider) return ((IRORValueProvider) getTile()).provideRORValue(name);
return "";
return null;
}
@Override
public String runRORFunction(String name, String[] params) {
if(getTile() instanceof IRORInteractive) return ((IRORInteractive) getTile()).runRORFunction(name, params);
return null;
}
}

View File

@ -6,6 +6,8 @@ import api.hbm.energymk2.IEnergyProviderMK2;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.energymk2.Nodespace;
import api.hbm.energymk2.Nodespace.PowerNode;
import api.hbm.redstoneoverradio.IRORInteractive;
import api.hbm.redstoneoverradio.IRORValueProvider;
import api.hbm.tile.IInfoProviderEC;
import com.hbm.blocks.machine.MachineBattery;
@ -18,6 +20,7 @@ import com.hbm.tileentity.IPersistentNBT;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.uninos.UniNodespace;
import com.hbm.util.CompatEnergyControl;
import com.hbm.util.EnumUtil;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.relauncher.Side;
@ -36,7 +39,7 @@ import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "opencomputers")})
public class TileEntityMachineBattery extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent {
public class TileEntityMachineBattery extends TileEntityMachineBase implements IEnergyConductorMK2, IEnergyProviderMK2, IEnergyReceiverMK2, IPersistentNBT, SimpleComponent, IGUIProvider, IInfoProviderEC, CompatHandler.OCComponent, IRORValueProvider, IRORInteractive {
public long[] log = new long[20];
public long delta = 0;
@ -365,4 +368,69 @@ public class TileEntityMachineBattery extends TileEntityMachineBase implements I
public void provideExtraInfo(NBTTagCompound data) {
data.setLong(CompatEnergyControl.L_DIFF_HE, (log[0] - log[19]) / 20L);
}
@Override
public String[] getFunctionInfo() {
return new String[] {
PREFIX_VALUE + "fill",
PREFIX_VALUE + "fillpercent",
PREFIX_FUNCTION + "setmode" + NAME_SEPARATOR + "mode",
PREFIX_FUNCTION + "setmode" + NAME_SEPARATOR + "mode" + PARAM_SEPARATOR + "fallback",
PREFIX_FUNCTION + "setredmode" + NAME_SEPARATOR + "mode",
PREFIX_FUNCTION + "setredmode" + NAME_SEPARATOR + "mode" + PARAM_SEPARATOR + "fallback",
PREFIX_FUNCTION + "setpriority" + NAME_SEPARATOR + "priority",
};
}
@Override
public String provideRORValue(String name) {
if((PREFIX_VALUE + "fill").equals(name)) return "" + power;
if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + getPowerRemainingScaled(100);
return null;
}
@Override
public String runRORFunction(String name, String[] params) {
if((PREFIX_FUNCTION + "setmode").equals(name) && params.length > 0) {
int mode = IRORInteractive.parseInt(params[0], 0, 3);
if(mode != this.redLow) {
this.redLow = (short) mode;
this.markChanged();
return null;
} else if(params.length > 1) {
int altmode = IRORInteractive.parseInt(params[1], 0, 3);
this.redLow = (short) altmode;
this.markChanged();
return null;
}
return null;
}
if((PREFIX_FUNCTION + "setredmode").equals(name) && params.length > 0) {
int mode = IRORInteractive.parseInt(params[0], 0, 3);
if(mode != this.redHigh) {
this.redHigh = (short) mode;
this.markChanged();
return null;
} else if(params.length > 1) {
int altmode = IRORInteractive.parseInt(params[1], 0, 3);
this.redHigh = (short) altmode;
this.markChanged();
return null;
}
return null;
}
if((PREFIX_FUNCTION + "setpriority").equals(name) && params.length > 0) {
int priority = IRORInteractive.parseInt(params[0], 0, 2) + 1;
ConnectionPriority p = EnumUtil.grabEnumSafely(ConnectionPriority.class, priority);
this.priority = p;
this.markChanged();
return null;
}
return null;
}
}

View File

@ -7,6 +7,9 @@ import com.hbm.tileentity.IBufPacketReceiver;
import com.hbm.tileentity.IControlReceiverFilter;
import com.hbm.util.BufferUtil;
import api.hbm.redstoneoverradio.IRORInteractive;
import api.hbm.redstoneoverradio.IRORValueProvider;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
@ -17,7 +20,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPacketReceiver, IControlReceiverFilter {
public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPacketReceiver, IControlReceiverFilter, IRORValueProvider, IRORInteractive {
private int stack = 0;
public boolean output = false;
@ -229,4 +232,36 @@ public class TileEntityMassStorage extends TileEntityCrateBase implements IBufPa
public int[] getFilterSlots() {
return new int[]{1,2};
}
@Override
public String[] getFunctionInfo() {
return new String[] {
PREFIX_VALUE + "type",
PREFIX_VALUE + "fill",
PREFIX_VALUE + "fillpercent",
PREFIX_FUNCTION + "toggleoutput",
};
}
@Override
public String provideRORValue(String name) {
if((PREFIX_VALUE + "fill").equals(name)) return "" + this.stack;
if((PREFIX_VALUE + "fillpercent").equals(name)) return "" + this.stack * 100 / this.capacity;
if((PREFIX_VALUE + "type").equals(name)) {
if(slots[1] == null) return "None";
return slots[1].getDisplayName();
}
return null;
}
@Override
public String runRORFunction(String name, String[] params) {
if((PREFIX_FUNCTION + "toggleoutput").equals(name)) {
this.output = !this.output;
this.markDirty();
}
return null;
}
}

View File

@ -62,6 +62,7 @@ public class TileEntityPipeBaseNT extends TileEntityLoadedBase implements IFluid
}
public void setType(FluidType type) {
FluidType prev = this.type;
this.type = type;
this.markDirty();
@ -69,9 +70,10 @@ public class TileEntityPipeBaseNT extends TileEntityLoadedBase implements IFluid
WorldServer world = (WorldServer) worldObj;
world.getPlayerManager().markBlockForUpdate(xCoord, yCoord, zCoord);
}
UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, prev.getNetworkProvider());
if(this.node != null) {
UniNodespace.destroyNode(worldObj, xCoord, yCoord, zCoord, type.getNetworkProvider());
this.node = null;
}
}

View File

@ -1,5 +1,9 @@
package com.hbm.tileentity.network;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.EntityProcessorCrossSmooth;
import com.hbm.explosion.vanillant.standard.ExplosionEffectWeapon;
import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.tileentity.network.RTTYSystem.RTTYChannel;
@ -36,6 +40,15 @@ public class TileEntityRadioTorchController extends TileEntityLoadedBase impleme
RTTYChannel chan = RTTYSystem.listen(worldObj, channel);
if(chan != null) {
String rec = "" + chan.signal;
if("selfdestruct".equals(rec)) {
worldObj.func_147480_a(xCoord, yCoord, zCoord, false);
ExplosionVNT vnt = new ExplosionVNT(worldObj, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5, 5, null);
vnt.setEntityProcessor(new EntityProcessorCrossSmooth(1, 50).setupPiercing(5F, 0.5F));
vnt.setPlayerProcessor(new PlayerProcessorStandard());
vnt.setSFX(new ExplosionEffectWeapon(10, 2.5F, 1F));
vnt.explode();
return;
}
if(this.polling || !rec.equals(prev)) {
try {
if(rec != null && !rec.isEmpty()) ror.runRORFunction(IRORInteractive.PREFIX_FUNCTION + IRORInteractive.getCommand(rec), IRORInteractive.getParams(rec));

View File

@ -45,7 +45,7 @@ public class TileEntityRadioTorchReader extends TileEntityLoadedBase implements
if(name == null || name.isEmpty()) continue;
String value = prov.provideRORValue(IRORValueProvider.PREFIX_VALUE + name);
if(value == null) continue; //don't actually do this
if(value == null) continue;
if(polling || !value.equals(previous)) {
RTTYSystem.broadcast(worldObj, channel, value);

View File

@ -434,7 +434,10 @@ container.reactorSmall=Atomreaktor
container.reix=Rei-X Hauptrechner
container.rtg=Radioisotopengenerator
container.rtgFurnace=RTG-Ofen
container.rttyController=Redstone-over-Radio Controller
container.rttyCounter=Redstone-over-Radio Itemzähler
container.rttyLogic=Redstone-over-Radio Logikkempfänger
container.rttyReader=Redstone-over-Radio Leser
container.rttyReceiver=Redstone-over-Radio Empfänger
container.rttySender=Redstone-over-Radio Sender
container.safe=Panzerschrank
@ -4647,10 +4650,16 @@ tile.pwr_reflector.name=PWR Neutronenreflektor
tile.pwr_reflector.desc=Reflektier Neutronen auf Brennstäbe zurück$Platzierung: Hülle, für höhere Reaktivität$Gültiger Block für Hülle
tile.radar_screen.name=Radarbildschirm
tile.radio_telex.name=Telex-Maschine
tile.radio_torch_controller.name=Redstone-over-Radio Controller
tile.radio_torch_controller.desc=Empfängt Steuersignale und gibt$sie an die verbundene Maschine weiter
tile.radio_torch_counter.name=Redstone-over-Radio Itemzähler
tile.radio_torch_counter.desc=Kann auf ebenen Flächen oder Komparator-kompatiblen Blöcken platziert werden$Signal basiert auf Anzahl passender Items
tile.radio_torch_receiver.name=Redstone-over-Radio Empfänger
tile.radio_torch_receiver.desc=Kann auf ebenen Flächen oder Komparator-kompatiblen Blöcken platziert werden
tile.radio_torch_logic.name=Redstone-over-Radio Logikempfänger
tile.radio_torch_logic.desc=Kann auf ebenen Flächen oder Komparator-kompatiblen Blöcken platziert werden$Kann mittels Logikoperatoren Sinale zu Redstone-Signale konvertieren
tile.radio_torch_reader.name=Redstone-over-Radio Leser
tile.radio_torch_reader.desc=Liest Werte von der verbundenen Maschine$aus und sendet sie als Signal
tile.radio_torch_sender.name=Redstone-over-Radio Sender
tile.radio_torch_sender.desc=Kann auf ebenen Flächen oder Komparator-kompatiblen Blöcken platziert werden$Erkennt Redstone-Signale oder Komparator-Output
tile.radiobox.name=Rosenberg Ungeziefervernichter

View File

@ -838,8 +838,10 @@ container.reactorResearch=Research Reactor
container.reix=Rei-X Mainframe
container.rtg=RT Generator
container.rtgFurnace=RTG Furnace
container.rttyController=Redstone-over-Radio Controller
container.rttyCounter=Redstone-over-Radio Item Counter
container.rttyLogic=Redstone-over-Radio Logic Receiver
container.rttyReader=Redstone-over-Radio Reader
container.rttyReceiver=Redstone-over-Radio Receiver
container.rttySender=Redstone-over-Radio Transmitter
container.safe=Safe
@ -5796,10 +5798,14 @@ tile.pwr_reflector.desc=Reflects neutrons back to fuel rods$Placement: Grid, for
tile.rad_lava_block.name=Volcanic Lava
tile.radar_screen.name=Radar Screen
tile.radio_telex.name=Telex Machine
tile.radio_torch_controller.name=Redstone-over-Radio Controller
tile.radio_torch_controller.desc=Can receive command signals and relays$them to the connected machine
tile.radio_torch_counter.name=Redstone-over-Radio Item Counter
tile.radio_torch_counter.desc=Placable on flat surfaces or comparator-compatible blocks$Bases signal on the amount of matching items
tile.radio_torch_logic.name=Redstone-over-Radio Logic Receiver
tile.radio_torch_logic.desc=Placable on flat surfaces or comparator-compatible blocks$Maps redstone signals to conditions evaluated in a set order$Numerical or string inputs are compared against a constant
tile.radio_torch_reader.name=Redstone-over-Radio Reader
tile.radio_torch_reader.desc=Reads values from connected blocks,$then sends them over the specified frequency
tile.radio_torch_receiver.name=Redstone-over-Radio Receiver
tile.radio_torch_receiver.desc=Placable on flat surfaces or comparator-compatible blocks
tile.radio_torch_sender.name=Redstone-over-Radio Transmitter

View File

@ -731,7 +731,7 @@ container.exposureChamber=Камера облучения частицами
container.factoryAdvanced=Усовершенствованная фабрика
container.factoryTitanium=Базовая фабрика
container.fluidtank=Цистерна
container.fileCabinet=Карточеный шкафчик
container.fileCabinet=Картотечный шкафчик
container.forceField=Излучатель силового поля
container.frackingTower=Башня гидроразрыва пласта
container.furnaceBrick=Кирпичная печь
@ -1588,7 +1588,7 @@ hbmmat.bauxite=Боксит
hbmmat.beryllium=Бериллий
hbmmat.bismuth=Висмут
hbmmat.bismuthbronze=Висмутовая бронза
hbmmat.bone=Ivory
hbmmat.bone=Кость
hbmmat.borax=Бура
hbmmat.boron=Бор
hbmmat.bscco=BSCCO
@ -1854,6 +1854,7 @@ item.ammo_arty_nuke.name=Ядерный 16-дюймовый артиллерий
item.ammo_arty_phosgene.name=Фосгеновый 16-дюймовый артиллерийский снаряд
item.ammo_arty_phosphorus.name=Фосфорный 16-дюймовый артиллерийский снаряд
item.ammo_bag.name=Сумка для боеприпасов
item.ammo_bag_infinite.name=Бесконечная сумка для боеприпасов
item.ammo_arty_phosphorus_multi.name=Фосфорный 16-дюймовый мульти-снаряд
item.ammo_cell.name=Энерго-патроны
item.ammo_coilgun.name=Вольфрамовый шар для гаусс-пушки
@ -2164,32 +2165,32 @@ item.battery_su.name=Одноразовая батарейка
item.battery_su_l.name=Большая одноразовая батарейка
item.battery_trixite.name=Безымянная спарк-батарея
item.bdcl.name=BDCL
item.bedrock_ore.grade.base.name=%s бедроковая руда
item.bedrock_ore.grade.base_roasted.name=Обожженная %s бедроковая руда
item.bedrock_ore.grade.base_washed.name=Промытая %s бедроковая руда
item.bedrock_ore.grade.primary.name=%s бедроковая руда, Первичная фракция
item.bedrock_ore.grade.primary_roasted.name=%s бедроковая руда, Обожженная первичная фракция
item.bedrock_ore.grade.primary_sulfuric.name=%s бедроковая руда, Серная первичная фракция
item.bedrock_ore.grade.primary_nosulfuric.name=%s бедроковая руда, Отделённая серная первичная фракция
item.bedrock_ore.grade.primary_solvent.name=%s бедроковая руда, Растворенная первичная фракция
item.bedrock_ore.grade.primary_nosolvent.name=%s бедроковая руда, Отделённая растворенная первичная фракция
item.bedrock_ore.grade.primary_rad.name=%s бедроковая руда, Очищенная первичная фракция
item.bedrock_ore.grade.primary_norad.name=%s бедроковая руда, Отделённая очищенная первичная фракция
item.bedrock_ore.grade.primary_first.name=%s бедроковая руда, Первичная фракция, Большой вес
item.bedrock_ore.grade.primary_second.name=%s бедроковая руда, Первичная фракция, Малый вес
item.bedrock_ore.grade.crumbs.name=%s куски бедроковой руды
item.bedrock_ore.grade.sulfuric_byproduct.name=%s бедроковая руда, Серная побочка
item.bedrock_ore.grade.sulfuric_roasted.name=%s бедроковая руда, Обожженная серная побочка
item.bedrock_ore.grade.sulfuric_arc.name=%s бедроковая руда, Переплавленная серная побочка
item.bedrock_ore.grade.sulfuric_washed.name=%s бедроковая руда, Промытая серная побочка
item.bedrock_ore.grade.solvent_byproduct.name=%s бедроковая руда, Растворенная побочка
item.bedrock_ore.grade.solvent_roasted.name=%s бедроковая руда, Обожженная растворенная побочка
item.bedrock_ore.grade.solvent_arc.name=%s бедроковая руда, Переплавленная растворенная побочка
item.bedrock_ore.grade.solvent_washed.name=%s бедроковая руда, Промытая растворенная побочка
item.bedrock_ore.grade.rad_byproduct.name=%s бедроковая руда, Очищенная побочка
item.bedrock_ore.grade.rad_roasted.name=%s бедроковая руда, Обожженная очищенная побочка
item.bedrock_ore.grade.rad_arc.name=%s бедроковая руда, Переплавленная очищенная побочка
item.bedrock_ore.grade.rad_washed.name=%s бедроковая руда, Промытая очищенная побочка
item.bedrock_ore.grade.base.name=Бедроковая руда (%s)
item.bedrock_ore.grade.base_roasted.name=Обожженная бедроковая руда (%s)
item.bedrock_ore.grade.base_washed.name=Промытая бедроковая руда (%s)
item.bedrock_ore.grade.primary.name=Бедроковая руда (%s), первичная фракция
item.bedrock_ore.grade.primary_roasted.name=Бедроковая руда (%s), обожженная первичная фракция
item.bedrock_ore.grade.primary_sulfuric.name=Бедроковая руда (%s), серная первичная фракция
item.bedrock_ore.grade.primary_nosulfuric.name=Бедроковая руда (%s), отделённая серная первичная фракция
item.bedrock_ore.grade.primary_solvent.name=Бедроковая руда (%s), растворенная первичная фракция
item.bedrock_ore.grade.primary_nosolvent.name=Бедроковая руда (%s), отделённая растворенная первичная фракция
item.bedrock_ore.grade.primary_rad.name=Бедроковая руда (%s), очищенная первичная фракция
item.bedrock_ore.grade.primary_norad.name=Бедроковая руда (%s), отделённая очищенная первичная фракция
item.bedrock_ore.grade.primary_first.name=Бедроковая руда (%s), первичная фракция, большой вес
item.bedrock_ore.grade.primary_second.name=Бедроковая руда (%s), первичная фракция, малый вес
item.bedrock_ore.grade.crumbs.name=Куски бедроковой руды (%s)
item.bedrock_ore.grade.sulfuric_byproduct.name=Бедроковая руда (%s), серная побочка
item.bedrock_ore.grade.sulfuric_roasted.name=Бедроковая руда (%s), обожженная серная побочка
item.bedrock_ore.grade.sulfuric_arc.name=Бедроковая руда (%s), переплавленная серная побочка
item.bedrock_ore.grade.sulfuric_washed.name=Бедроковая руда (%s), промытая серная побочка
item.bedrock_ore.grade.solvent_byproduct.name=Бедроковая руда (%s), растворенная побочка
item.bedrock_ore.grade.solvent_roasted.name=Бедроковая руда (%s), обожженная растворенная побочка
item.bedrock_ore.grade.solvent_arc.name=Бедроковая руда (%s), переплавленная растворенная побочка
item.bedrock_ore.grade.solvent_washed.name=Бедроковая руда (%s), промытая растворенная побочка
item.bedrock_ore.grade.rad_byproduct.name=Бедроковая руда (%s), очищенная побочка
item.bedrock_ore.grade.rad_roasted.name=Бедроковая руда (%s), обожженная очищенная побочка
item.bedrock_ore.grade.rad_arc.name=Бедроковая руда (%s), переплавленная очищенная побочка
item.bedrock_ore.grade.rad_washed.name=Бедроковая руда (%s), промытая очищенная побочка
item.bedrock_ore.trait.arc=§6Дуговая плавка
item.bedrock_ore.trait.centrifuged=§9Центрифугированный
item.bedrock_ore.trait.rad=§aОбработанный высокоэффективным растворителем
@ -2718,7 +2719,7 @@ item.crystal_diamond.name=Кристализованный алмаз
item.crystal_energy.name=Энергетический кристалл
item.crystal_fluorite.name=Кристаллизованный флюорит
item.crystal_gold.name=Кристаллизованное золото
item.crystal_horn.name=Кристалльный рог
item.crystal_horn.name=Кристальный рог
item.crystal_horn.desc=Не настоящий рог.
item.crystal_horn.desc.P11=Настоящий рог.
item.crystal_iron.name=Кристаллизованное железо
@ -2915,7 +2916,7 @@ item.fluid_tank_empty.name=Пустой универсальный резерв
item.fluid_tank_full.name=Универсальный резервуар для жидкости:
item.fluid_tank_lead_empty.name=Пустой резервуар для опасных материалов
item.fluid_tank_lead_full.name=Резервуар с опасными материалами:
item.fluorite.name=Флюоритовая руда
item.fluorite.name=Флюорит
item.flywheel_beryllium.name=Бериллевый маховик
item.fmn.name=Таблетка флунитразепама
item.fmn.desc=Убирает все DRX более 2,000mDRX
@ -3083,10 +3084,10 @@ item.gun_folly.name=Прототип Дигамма "Причуда"
item.gun_g3.name=Штурмовая винтовка
item.gun_g3_a3.name=G3A3
item.gun_g3_infiltrator.name=Infiltrator
item.gun_g3_zebra.name=Зебра
item.gun_g3_zebra.name=Зебринская винтовка
item.gun_glass_cannon.name=Стеклянная пушка
item.gun_greasegun.name=Маслёнка
item.gun_greasegun_m3.name=M3
item.gun_greasegun.name=Пистолет-пулемёт "Маслёнка"
item.gun_greasegun_m3.name=Улучшенный пистолет-пулемёт М3
item.gun_hangman.name=Палач
item.gun_heavy_revolver.name=Тяжёлый револьвер
item.gun_heavy_revolver_lilmac.name=Малый Макинтош
@ -3110,7 +3111,7 @@ item.gun_lacunae_ammo.name=5-мм патрон (LEGACY)
item.gun_lag.name=Комически длинный пистолет
item.gun_laser_pistol.name=Лазерный пистолет
item.gun_laser_pistol_morning_glory.name=Морнин Глори
item.gun_laser_pistol_pew_pew.name=Пиу Пиу
item.gun_laser_pistol_pew_pew.name=Пью-Пью
item.gun_lasrifle.name=Лазерная винтовка
item.gun_lever_action.name=«Нога кобылы» (Оригинал)
item.gun_lever_action_ammo.name=Дробь 12x74 калибра (LEGACY)
@ -3345,7 +3346,7 @@ item.ingot_pu240.name=Слиток плутония-240
item.ingot_pu241.name=Слиток плутония-241
item.ingot_pvc.name=ПВХ
item.ingot_ra226.name=Слиток радия-226
item.ingot_raw.name=Слиткок (%s)
item.ingot_raw.name=Слиток (%s)
item.ingot_red_copper.name=Слиток красной меди
item.ingot_reiium.name=Реиевый слиток
item.ingot_rubber.name=Резина
@ -3731,7 +3732,7 @@ item.nugget_co60.name=Самородок кобальта-60
item.nugget_cobalt.name=Кобальтовый самородок
item.nugget_daffergon.name=Даффергоновый самородок
item.nugget_desh.name=Самородок деш
item.nugget_dineutronium.name=§5Dineutronium Nugget§r
item.nugget_dineutronium.name=§5Динейтрониевый самородок§r
item.nugget_euphemium.name=Эвфемиевый самородок
item.nugget_euphemium.desc=Маленький кусочек розового металла.$Его свойства до сих пор неизвестны,$ОБРАЩАЙТЕСЬ С НИМ осторожно.
item.nugget_gh336.name=Самородок гиорсия-336
@ -3810,7 +3811,7 @@ item.ore.titanium=Титановая
item.ore.tungsten=Вольфрамовая
item.ore.thorium232=Ториевая
item.ore.uranium=Урановая
item.ore_bedrock.name=%s бедроковая руда
item.ore_bedrock.name=Бедроковая руда (%s)
item.ore_byproduct.b_aluminium.name=Алюминиевый побочный продукт
item.ore_byproduct.b_bismuth.name=Висмутовый побочный продукт
item.ore_byproduct.b_calcium.name=Кальциевый побочный продукт
@ -3825,9 +3826,9 @@ item.ore_byproduct.b_sulfur.name=Серный побочный продукт
item.ore_byproduct.b_technetium.name=Технециевый побочный продукт
item.ore_byproduct.b_titanium.name=Титановый побочный продукт
item.ore_byproduct.b_uranium.name=Урановый побочный продукт
item.ore_centrifuged.name=Центрифугированная %s бедроковая руда
item.ore_cleaned.name=Очищенная %s бедроковая руда
item.ore_deepcleaned.name=Глубоко очищенная %s бедроковая руда
item.ore_centrifuged.name=Центрифугированная бедроковая руда (%s)
item.ore_cleaned.name=Очищенная бедроковая руда (%s)
item.ore_deepcleaned.name=Глубоко очищенная бедроковая руда (%s)
item.ore_density_scanner.name=Сканер плотности бедроковой руды
item.ore_density_scanner.excellent=Избыток
item.ore_density_scanner.high=Высокий
@ -3869,7 +3870,7 @@ item.page_of_.page6.name=Страница 6
item.page_of_.page7.name=Страница 7
item.page_of_.page8.name=Страница 8
item.pancake.name=Блинчики с металлоломом, гвоздями и самоцветной пылью
item.part_barrel_heavy.name=Тяжелый ствол (%s)
item.part_barrel_heavy.name=Тяжёлый ствол (%s)
item.part_barrel_light.name=Лёгкий ствол (%s)
item.part_beryllium.name=Коробка бериллиевой пыли
item.part_carbon.name=Коробка угольной пыли
@ -4581,9 +4582,9 @@ item.solid_fuel.name=Твердое топливо
item.solid_fuel_bf.name=Твердое топливо (Жар-пламя)
item.solid_fuel_presto.name=Топливное полено
item.solid_fuel_presto_bf.name=Топливное полено (Жар-пламя)
item.solid_fuel_presto_triplet.name=Сжатые топливные полена
item.solid_fuel_presto_triplet.name=Сжатые топливные поленья
item.solid_fuel_presto_triplet_bf.name=Сжатые топливные полена (Жар-пламя)
item.solinium_core.name=Полу-стабильный солиниевый заряд
item.solinium_core.name=Полустабильный солиниевый заряд
item.solinium_igniter.name=Солиниевый импульсный воспламенитель
item.solinium_kit.name=Солиниевый комплект
item.solinium_propellant.name=Солиниевый сжимающий заряд
@ -5533,7 +5534,7 @@ tile.fan.desc=Активируется редстоуном$Толкает су
tile.fence_metal.name=Проволочная сетка
tile.fence_metal_post.name=Столб проволочной сетки
tile.field_disturber.name=Подавитель высокоэнергитических полей
tile.filing_cabinet.green.name=Пыльный карточеный шкафчик
tile.filing_cabinet.green.name=Пыльный картотечный шкафчик
tile.filing_cabinet.steel.name=Стальной карточеный шкафчик
tile.fire_digamma.name=Затяжная Дигамма
tile.fire_door.name=Пожарная дверь
@ -5659,7 +5660,7 @@ tile.heater_oven.name=Нагревательная печь
tile.heater_oven.desc=Производит тепло, сжигая твёрдое топливо.$Принимает тепло снизу с 50%% эффективностью.
tile.hev_battery.name=Батарея костюма
tile.machine_hydrotreater.name=Гидроочиститель
tile.impact_dirt.name=Выжженая земля
tile.impact_dirt.name=Выжженная земля
tile.icf.name=Реактор инерциального термоядерного синтеза (ICF)
tile.icf_block.name=Лазер ICF
tile.icf_component.name=Стабилизатор ICF
@ -5933,7 +5934,7 @@ tile.ore_depth_borax.name=Глубинная бура
tile.ore_depth_cinnebar.name=Глубинная киноварь
tile.ore_depth_nether_neodymium.name=Адская глубинная неодимовая руда
tile.ore_depth_zirconium.name=Глубинная циркониевая руда
tile.ore_fluorite.name=Флюорит
tile.ore_fluorite.name=Флюоритовая руда
tile.ore_gneiss_asbestos.name=Сланцевая асбестовая руда
tile.ore_gneiss_copper.name=Сланцевая медная руда
tile.ore_gneiss_gas.name=Сланцевый газ
@ -5946,6 +5947,7 @@ tile.ore_gneiss_uranium.name=Сланцевая урановая руда
tile.ore_gneiss_uranium_scorched.name=Обожённая сланцевая урановая руда
tile.ore_lead.name=Свинцовая руда
tile.ore_lignite.name=Бурый уголь
tile.ore_meteor.aluminium.name=Метеоритная алюминиевая руда
tile.ore_meteor.cobalt.name=Метеоритная кобальтовая руда
tile.ore_meteor.copper.name=Метеоритная медная руда
tile.ore_meteor.iron.name=Метеоритная железная руда

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 446 B

After

Width:  |  Height:  |  Size: 469 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 536 B

After

Width:  |  Height:  |  Size: 589 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 462 B

After

Width:  |  Height:  |  Size: 615 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 573 B

After

Width:  |  Height:  |  Size: 603 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 590 B

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 248 B

After

Width:  |  Height:  |  Size: 249 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 254 B

After

Width:  |  Height:  |  Size: 247 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 937 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB