Merge branch 'HbmMods:master' into SolventQMAW

This commit is contained in:
WolfEclipses 2026-08-10 00:14:41 -04:00 committed by GitHub
commit 9f789092f4
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
51 changed files with 3607 additions and 226 deletions

View File

@ -1,31 +1,24 @@
## Added
* Wideband Radio Emission Detector Satellite
* Detects high-energy events like nuclear explosions, particle accelerator operations and radar from the entire map
* Not terribly accurate, positioning may be off by hundreds or thousands of blocks depending on the emission intensity
* Narrowband Emission Scanning Satellite
* Detects high-energy events like radar, particle accelerator operations, nuclear or fusion reactors
* Can pinpoint exact locations, but is limited in its field of view
* Rock mill
* Earlygame post-steel crusher type machine
* Can grind down various stones, gravel and sand into finer items while yielding byproduct
* Mainly intended to serve as an easy way to automate/bulk craft certain elements in earlygame before BOP
* While the byproduct chances are rather low and the recipe times are slow, the mills are easily scalable due to their low cost
* Comes with convenient stacking frame
* Ideal for skyblock/seablock type challenge runs, as it can be configured to serve as an Ex Nihilo substitute
* Can also perform the sand and colloid to clay recipe of the acidizer, but at a lower efficiency
## Changed
* Updated russian and chinese localization
* AUTOCAL's `first` and `last` instructions now support variable substitution
* Spy satellites now have the `getsmog` command, checking for soot pollution on the current target coordinate
* The research reactor and breeding reactor have been deprecated
* The reactors and the plate fuel no longer have recipes, but existing ones will continue to function until they run out of fuel
* Removed orphaned multiblock dummies clearing themselves via random ticks, only block updates can do that now
* Updated russian localization
* The cargo elevator can now be controlled using RoR, allowing the platform to stop at certain heights
* Updated the pepperbox textures
* The wood now looks more like wood and less like plastic
* The bronze parts now have more depth
* Conveyor items being deleted due to cramming can now be configured with the server config `CONVEYOR_CRAM_MAX`, the default still being 25
* Conveyor belts being destroyed due to item cramming can now be configured with the server config `CONVEYOR_CRAM_EXPLODE`, it is still on by default
* Conveyor items will no longer break any belts, even with the config enabled, if the conveyor item entities have existed for less than one cram check cycle
* This means that items that have piled up due to chunk loading should now safely self-destruct without breaking conveyor lines
## Fixed
* Fixed pile fuel loader temperature reading not working
* Fixed mining satellite NEI handling
* Fixed crash caused by non-miner satellite ID chips in the cargo landing pad
* Potentially fixed ID-shift affecting satellites launched pre-update
* Fixed xenium resonator item mapping being incorrect, creating a relay satellite instead
* Fixed a potential crash caused by accessing out-of-range data on the radar satellite
* Fixed QMAW manual pages not being able to be overwritten by resource packs
* This feature was a major pain in the ass to actually make, and it apparently never even worked until now
* Fixed satellite groundstation losing its frequency on relog
* Added extra safeguarding preventing crashes caused by multiblock door tile entities not bound to the correct block
* Fixed new pile rods now having radiation values
* Potentially fixed a multiblock migration issue where standard electricity pylons would disappear due to changes in expected metadata
* Fixed the pipe wrench assuming anchor pos 0/0/0 when NBT data is initialized as well as clearing all NBT data if a pipe connection is created
* Fixed tower base structures spawning in sandy biomes
* Fixed pollution detector localization not working, showing only error messages instead of the pollution type names
* Fixed un-clamped gaussian random use on the wideband detector satellite, causing uncommon detections with inaccuracy exceeding the intended amount

View File

@ -972,6 +972,7 @@ public class ModBlocks {
public static Block machine_autosaw;
public static Block machine_thresher;
public static Block machine_rockmill;
public static Block machine_mining_laser;
public static Block barricade; // a sand bag that drops nothing, for automated walling purposes
@ -2192,6 +2193,7 @@ public class ModBlocks {
machine_excavator = new MachineExcavator().setBlockName("machine_excavator").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_ore_slopper = new MachineOreSlopper().setBlockName("machine_ore_slopper").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_annihilator = new MachineAnnihilator().setBlockName("machine_annihilator").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_rockmill = new MachineRockMill(Material.iron).setBlockName("machine_rockmill").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
machine_mining_laser = new MachineMiningLaser(Material.iron).setBlockName("machine_mining_laser").setHardness(5.0F).setResistance(100.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":machine_mining_laser");
barricade = new BlockNoDrop(Material.sand).setBlockName("barricade").setHardness(1.0F).setResistance(2.5F).setCreativeTab(null).setBlockTextureName(RefStrings.MODID + ":barricade");
machine_assembly_machine = new MachineAssemblyMachine(Material.iron).setBlockName("machine_assembly_machine").setHardness(5.0F).setResistance(30.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel");
@ -3234,6 +3236,7 @@ public class ModBlocks {
GameRegistry.registerBlock(machine_electric_furnace_off, machine_electric_furnace_off.getUnlocalizedName());
GameRegistry.registerBlock(machine_electric_furnace_on, machine_electric_furnace_on.getUnlocalizedName());
GameRegistry.registerBlock(machine_microwave, machine_microwave.getUnlocalizedName());
register(machine_rockmill);
register(machine_assembly_machine);
register(machine_assembly_factory);
register(machine_precass);

View File

@ -0,0 +1,50 @@
package com.hbm.blocks.machine;
import com.hbm.blocks.BlockDummyable;
import com.hbm.tileentity.TileEntityProxyCombo;
import com.hbm.tileentity.machine.TileEntityMachineRockMill;
import net.minecraft.block.material.Material;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class MachineRockMill extends BlockDummyable {
public MachineRockMill(Material mat) {
super(mat);
}
@Override
public TileEntity createNewTileEntity(World world, int meta) {
if(meta >= 12) return new TileEntityMachineRockMill();
if(meta >= 6) return new TileEntityProxyCombo().inventory().power().fluid();
return null;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
return this.standardOpenBehavior(world, x, y, z, player, 0);
}
@Override public int[] getDimensions() { return new int[] {2, 0, 2, 2, 2, 2}; }
@Override public int getOffset() { return 2; }
@Override
public void fillSpace(World world, int x, int y, int z, ForgeDirection dir, int o) {
super.fillSpace(world, x, y, z, dir, o);
x += dir.offsetX * o;
z += dir.offsetZ * o;
this.makeExtra(world, x + 2, y, z + 1);
this.makeExtra(world, x - 2, y, z + 1);
this.makeExtra(world, x + 2, y, z - 1);
this.makeExtra(world, x - 2, y, z - 1);
this.makeExtra(world, x + 1, y, z + 2);
this.makeExtra(world, x + 1, y, z - 2);
this.makeExtra(world, x - 1, y, z + 2);
this.makeExtra(world, x - 1, y, z - 2);
}
}

View File

@ -23,6 +23,8 @@ public class ServerConfig extends RunningConfig {
public static ConfigWrapper<Boolean> ENABLE_MKU = new ConfigWrapper(true);
public static ConfigWrapper<Boolean> STRUCTURE_DEBUG = new ConfigWrapper(false);
public static ConfigWrapper<Integer> AUTOCAL_MAX_CLOCK = new ConfigWrapper(20);
public static ConfigWrapper<Integer> CONVEYOR_CRAM_MAX = new ConfigWrapper(25);
public static ConfigWrapper<Boolean> CONVEYOR_CRAM_EXPLODE = new ConfigWrapper(true);
private static void initDefaults() {
configMap.put("DAMAGE_COMPATIBILITY_MODE", DAMAGE_COMPATIBILITY_MODE);
@ -38,6 +40,8 @@ public class ServerConfig extends RunningConfig {
configMap.put("ENABLE_MKU", ENABLE_MKU);
configMap.put("STRUCTURE_DEBUG", STRUCTURE_DEBUG);
configMap.put("AUTOCAL_MAX_CLOCK", AUTOCAL_MAX_CLOCK);
configMap.put("CONVEYOR_CRAM_MAX", CONVEYOR_CRAM_MAX);
configMap.put("CONVEYOR_CRAM_EXPLODE", CONVEYOR_CRAM_EXPLODE);
}
/** Initializes defaults, then reads the config file if it exists, then writes the config file. */

View File

@ -2,6 +2,7 @@ package com.hbm.entity.item;
import java.util.List;
import com.hbm.config.ServerConfig;
import com.hbm.explosion.vanillant.ExplosionVNT;
import com.hbm.explosion.vanillant.standard.ExplosionEffectTiny;
import com.hbm.lib.Library;
@ -84,7 +85,7 @@ public abstract class EntityMovingConveyorObject extends Entity {
// cram check every 20s
if((ticksExisted + this.getEntityId()) % 400 == 0) {
List<EntityMovingConveyorObject> objs = worldObj.getEntitiesWithinAABB(EntityMovingConveyorObject.class, this.boundingBox.expand(0.125, 0.125, 0.125));
if(objs.size() >= 25) {
if(objs.size() >= ServerConfig.CONVEYOR_CRAM_MAX.get()) {
for(EntityMovingConveyorObject obj : objs) obj.setDead();
ExplosionVNT vnt = new ExplosionVNT(worldObj, posX, posY + 0.125, posZ, 1, this);
vnt.setSFX(new ExplosionEffectTiny());
@ -92,7 +93,9 @@ public abstract class EntityMovingConveyorObject extends Entity {
int x = (int) Math.floor(posX);
int y = (int) Math.floor(posY);
int z = (int) Math.floor(posZ);
if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt) worldObj.func_147480_a(x, y, z, false);
if(worldObj.getBlock(x, y, z) instanceof IConveyorBelt && this.ticksExisted > 400 && ServerConfig.CONVEYOR_CRAM_EXPLODE.get())
worldObj.func_147480_a(x, y, z, false);
}
}

View File

@ -0,0 +1,13 @@
package com.hbm.handler.nei;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.recipes.RockMillRecipes;
public class RockMillRecipeHandler extends NEIGenericRecipeHandler {
public RockMillRecipeHandler() {
super(ModBlocks.machine_rockmill.getLocalizedName(), RockMillRecipes.INSTANCE, ModBlocks.machine_rockmill);
}
@Override public String getRecipeID() { return "ntmRockMill"; }
}

View File

@ -68,6 +68,7 @@ public class OreDictManager {
public static final String KEY_LEAVES = "treeLeaves";
public static final String KEY_SAPLING = "treeSapling";
public static final String KEY_SAND = "sand";
public static final String KEY_STONE = "stone";
public static final String KEY_COBBLESTONE = "cobblestone";
public static final String KEY_BLACK = "dyeBlack";
@ -440,7 +441,7 @@ public class OreDictManager {
HEMATITE .ore(fromOne(stone_resource, EnumStoneType.HEMATITE));
MALACHITE .ingot(DictFrame.fromOne(chunk_ore, EnumChunkType.MALACHITE)) .ore(fromOne(stone_resource, EnumStoneType.MALACHITE));
LIMESTONE .dust(powder_limestone) .ore(fromOne(stone_resource, EnumStoneType.LIMESTONE));
BAUXITE .gem(fromOne(stone_resource, EnumStoneType.BAUXITE));
BAUXITE .ore(fromOne(stone_resource, EnumStoneType.BAUXITE));
CRYOLITE .crystal(fromOne(chunk_ore, EnumChunkType.CRYOLITE));
SLAG .block(block_slag);

View File

@ -0,0 +1,69 @@
package com.hbm.inventory.container;
import com.hbm.inventory.SlotCraftingOutput;
import com.hbm.inventory.SlotNonRetarded;
import com.hbm.items.ModItems;
import com.hbm.items.machine.ItemBlueprints;
import com.hbm.util.InventoryUtil;
import api.hbm.energymk2.IBatteryItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.Slot;
import net.minecraft.item.ItemStack;
public class ContainerMachineRockMill extends ContainerBase {
public ContainerMachineRockMill(InventoryPlayer invPlayer, IInventory rockMill) {
super(invPlayer, rockMill);
// Battery
this.addSlotToContainer(new SlotNonRetarded(rockMill, 0, 152, 91));
// Schematic
this.addSlotToContainer(new SlotNonRetarded(rockMill, 1, 35, 90));
// Solid Input
this.addSlots(rockMill, 2, 8, 27, 1, 3);
// Solid Output
this.addOutputSlots(invPlayer.player, rockMill, 5, 80, 27, 1, 3);
this.playerInv(invPlayer, 8, 138);
}
@Override
public ItemStack transferStackInSlot(EntityPlayer player, int index) {
ItemStack slotOriginal = null;
Slot slot = (Slot) this.inventorySlots.get(index);
if(slot != null && slot.getHasStack()) {
ItemStack slotStack = slot.getStack();
slotOriginal = slotStack.copy();
if(index <= tile.getSizeInventory() - 1) {
SlotCraftingOutput.checkAchievements(player, slotStack);
if(!this.mergeItemStack(slotStack, tile.getSizeInventory(), this.inventorySlots.size(), true)) {
return null;
}
} else {
if(slotOriginal.getItem() instanceof IBatteryItem || slotOriginal.getItem() == ModItems.battery_creative) {
if(!this.mergeItemStack(slotStack, 0, 1, false)) return null;
} else if(slotOriginal.getItem() instanceof ItemBlueprints) {
if(!this.mergeItemStack(slotStack, 1, 2, false)) return null;
} else {
if(!InventoryUtil.mergeItemStack(this.inventorySlots, slotStack, 2, 5, false)) return null;
}
}
if(slotStack.stackSize == 0) {
slot.putStack(null);
} else {
slot.onSlotChanged();
}
slot.onPickupFromSlot(player, slotStack);
}
return slotOriginal;
}
}

View File

@ -0,0 +1,124 @@
package com.hbm.inventory.gui;
import org.lwjgl.opengl.GL11;
import com.hbm.inventory.container.ContainerMachineRockMill;
import com.hbm.inventory.gui.element.GUIElements;
import com.hbm.inventory.recipes.RockMillRecipes;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.machine.ItemBlueprints;
import com.hbm.lib.RefStrings;
import com.hbm.tileentity.machine.TileEntityMachineRockMill;
import com.hbm.util.i18n.I18nUtil;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Slot;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.ResourceLocation;
public class GUIMachineRockMill extends GuiInfoContainer {
private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_rockmill.png");
private TileEntityMachineRockMill rockMill;
public GUIMachineRockMill(InventoryPlayer invPlayer, TileEntityMachineRockMill tedf) {
super(new ContainerMachineRockMill(invPlayer, tedf));
rockMill = tedf;
this.xSize = 176;
this.ySize = 220;
}
@Override
public void drawScreen(int mouseX, int mouseY, float f) {
super.drawScreen(mouseX, mouseY, f);
rockMill.inputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 8, guiTop + 63, 52, 16);
rockMill.outputTanks[0].renderTankInfo(this, mouseX, mouseY, guiLeft + 80, guiTop + 63, 52, 16);
this.drawElectricityInfo(this, mouseX, mouseY, guiLeft + 152, guiTop + 18, 16, 71, rockMill.power, rockMill.maxPower);
if(guiLeft + 7 <= mouseX && guiLeft + 7 + 18 > mouseX && guiTop + 89 < mouseY && guiTop + 89 + 18 >= mouseY) {
if(this.rockMill.rockMillModule.getRecipe() != null) {
GenericRecipe recipe = this.rockMill.rockMillModule.getRecipe();
GUIElements.drawHoveringTextRecipe(recipe.print(), mouseX, mouseY, this.fontRendererObj, itemRender, this.width, this.height);
} else {
this.drawCreativeTabHoveringText(EnumChatFormatting.YELLOW + I18nUtil.resolveKey("gui.recipe.setRecipe"), mouseX, mouseY);
}
}
}
@Override
protected void mouseClicked(int x, int y, int button) {
super.mouseClicked(x, y, button);
if(this.checkClick(x, y, 7, 89, 18, 18)) GUIScreenRecipeSelector.openSelector(RockMillRecipes.INSTANCE, rockMill, rockMill.rockMillModule.getRecipeName(), 0, ItemBlueprints.grabPool(rockMill.slots[1]), this);
}
@Override
protected void drawGuiContainerForegroundLayer(int i, int j) {
String name = this.rockMill.hasCustomInventoryName() ? this.rockMill.getInventoryName() : I18n.format(this.rockMill.getInventoryName());
this.fontRendererObj.drawString(name, 70 - this.fontRendererObj.getStringWidth(name) / 2, 6, 4210752);
this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752);
}
@Override
protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) {
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize);
int p = (int) (rockMill.power * 71 / rockMill.maxPower);
drawTexturedModalRect(guiLeft + 152, guiTop + 89 - p, 176, 71 - p, 16, p);
if(rockMill.rockMillModule.progress > 0) {
int j = (int) Math.ceil(70 * rockMill.rockMillModule.progress);
drawTexturedModalRect(guiLeft + 62, guiTop + 90, 176, 71, j, 16);
}
GenericRecipe recipe = rockMill.rockMillModule.getRecipe();
/// LEFT LED
if(rockMill.didProcess) {
drawTexturedModalRect(guiLeft + 51, guiTop + 85, 195, 0, 3, 6);
} else if(recipe != null) {
drawTexturedModalRect(guiLeft + 51, guiTop + 85, 192, 0, 3, 6);
}
/// RIGHT LED
if(rockMill.didProcess) {
drawTexturedModalRect(guiLeft + 56, guiTop + 85, 195, 0, 3, 6);
} else if(recipe != null && rockMill.power >= recipe.power) {
drawTexturedModalRect(guiLeft + 56, guiTop + 85, 192, 0, 3, 6);
}
this.renderItem(recipe != null ? recipe.getIcon() : TEMPLATE_FOLDER, 8, 90);
if(recipe != null && recipe.inputItem != null) {
for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(rockMill.rockMillModule.inputSlots[i]);
if(!slot.getHasStack()) this.renderItem(recipe.inputItem[i].extractForCyclingDisplay(20), slot.xDisplayPosition, slot.yDisplayPosition, 10F);
}
Minecraft.getMinecraft().getTextureManager().bindTexture(texture);
OpenGlHelper.glBlendFunc(770, 771, 1, 0);
GL11.glColor4f(1F, 1F, 1F, 0.5F);
GL11.glEnable(GL11.GL_BLEND);
this.zLevel = 300F;
for(int i = 0; i < recipe.inputItem.length; i++) {
Slot slot = (Slot) this.inventorySlots.inventorySlots.get(rockMill.rockMillModule.inputSlots[i]);
if(!slot.getHasStack()) drawTexturedModalRect(guiLeft + slot.xDisplayPosition, guiTop + slot.yDisplayPosition, slot.xDisplayPosition, slot.yDisplayPosition, 16, 16);
}
this.zLevel = 0F;
GL11.glColor4f(1F, 1F, 1F, 1F);
GL11.glDisable(GL11.GL_BLEND);
}
rockMill.inputTanks[0].renderTank(guiLeft + 8, guiTop + 79, this.zLevel, 52, 16, 1);
rockMill.outputTanks[0].renderTank(guiLeft + 80, guiTop + 79, this.zLevel, 52, 16, 1);
}
}

View File

@ -0,0 +1,130 @@
package com.hbm.inventory.recipes;
import static com.hbm.inventory.OreDictManager.*;
import com.hbm.blocks.ModBlocks;
import com.hbm.inventory.FluidStack;
import com.hbm.inventory.RecipesCommon.ComparableStack;
import com.hbm.inventory.RecipesCommon.OreDictStack;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.inventory.recipes.loader.GenericRecipes;
import com.hbm.items.ModItems;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
public class RockMillRecipes extends GenericRecipes<GenericRecipe> {
public static final RockMillRecipes INSTANCE = new RockMillRecipes();
@Override public int inputItemLimit() { return 3; }
@Override public int inputFluidLimit() { return 1; }
@Override public int outputItemLimit() { return 3; }
@Override public int outputFluidLimit() { return 1; }
@Override public String getFileName() { return "hbmRockMill.json"; }
@Override public GenericRecipe instantiateRecipe(String name) { return new GenericRecipe(name); }
@Override
public void registerDefaults() {
int consumption = 25;
int duraShort = 100;
int duraLong = 200;
String groupCrush = "autoswitch.crushing";
this.register(new GenericRecipe("rock.cobble").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(KEY_COBBLESTONE))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 95),
new ChanceOutput(new ItemStack(ModItems.powder_quartz), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.gravel").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.gravel))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 75),
new ChanceOutput(new ItemStack(Items.flint), 20),
new ChanceOutput(new ItemStack(ModItems.powder_boron), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.sand").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(KEY_SAND))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(ModItems.dust), 90),
new ChanceOutput(new ItemStack(ModItems.powder_calcium), 5),
new ChanceOutput(new ItemStack(ModItems.fluorite), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.netherrack").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.netherrack))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.LAVA, 100))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 50),
new ChanceOutput(new ItemStack(Blocks.soul_sand), 25),
new ChanceOutput(new ItemStack(Items.glowstone_dust), 15),
new ChanceOutput(new ItemStack(ModItems.powder_quartz), 10)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.soulsand").setup(duraShort, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(Blocks.soul_sand))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.LAVA, 100))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.sand), 50),
new ChanceOutput(new ItemStack(ModItems.powder_fire), 25),
new ChanceOutput(new ItemStack(ModItems.powder_uranium), 15),
new ChanceOutput(new ItemStack(Items.blaze_powder), 5),
new ChanceOutput(new ItemStack(Items.nether_wart), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.schist").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new ComparableStack(ModBlocks.stone_gneiss))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 50),
new ChanceOutput(new ItemStack(Blocks.sand), 10),
new ChanceOutput(new ItemStack(ModItems.powder_lithium), 25),
new ChanceOutput(new ItemStack(ModItems.powder_niobium), 5),
new ChanceOutput(new ItemStack(ModItems.powder_uranium), 5),
new ChanceOutput(new ItemStack(ModItems.powder_gold), 5)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.hematite").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(HEMATITE.ore()))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 65),
new ChanceOutput(new ItemStack(ModItems.powder_iron), 25),
new ChanceOutput(new ItemStack(ModItems.powder_titanium), 10)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.bauxite").setup(duraLong, consumption).setNameWrapper("rock.crushing")
.inputItems(new OreDictStack(BAUXITE.ore()))
.inputFluids(new FluidStack(Fluids.WATER, 250))
.outputFluids(new FluidStack(Fluids.COLLOID, 250))
.outputItems(new ChanceOutputMulti(
new ChanceOutput(new ItemStack(Blocks.gravel), 25),
new ChanceOutput(new ItemStack(Items.clay_ball), 25),
new ChanceOutput(new ItemStack(ModBlocks.stone_resource, 1, 2), 25),
new ChanceOutput(new ItemStack(ModBlocks.ore_titanium), 25)
)).setIconToFirstIngredient().setGroup(groupCrush, INSTANCE));
this.register(new GenericRecipe("rock.clay").setup(duraLong, consumption)
.inputItems(new OreDictStack(KEY_SAND, 2))
.inputFluids(new FluidStack(Fluids.COLLOID, 2_500))
.outputItems(new ItemStack(Items.clay_ball, 4)));
}
}

View File

@ -226,6 +226,14 @@ public class AnvilRecipes extends SerializableRecipe {
boolean exp = GeneralConfig.enableExpensiveMode;
constructionRecipes.add(new AnvilConstructionRecipe(
new AStack[] {
new OreDictStack(KEY_STONE, 16),
new OreDictStack(STEEL.plate(), 4),
new OreDictStack(CU.pipe(), 1),
new ComparableStack(ModItems.motor, 1)
}, new AnvilOutput(new ItemStack(ModBlocks.machine_rockmill))).setTier(2));
constructionRecipes.add(new AnvilConstructionRecipe(
new AStack[] {
new OreDictStack(STEEL.ingot(), 8),

View File

@ -96,6 +96,7 @@ public abstract class SerializableRecipe {
recipeHandlers.add(PrecAssRecipes.INSTANCE);
recipeHandlers.add(PlasmaForgeRecipes.INSTANCE);
recipeHandlers.add(BlastFurnaceRecipesNT.INSTANCE);
recipeHandlers.add(RockMillRecipes.INSTANCE);
recipeHandlers.add(new MatDistribution());
recipeHandlers.add(new CustomMachineRecipes());

View File

@ -2980,13 +2980,13 @@ public class ModItems {
waste_schrabidium = new ItemDepletedFuel().setUnlocalizedName("waste_schrabidium").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_schrabidium");
waste_zfb_mox = new ItemDepletedFuel().setUnlocalizedName("waste_zfb_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_zfb_mox");
waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox");
waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_mox");
waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_sa326");
waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_ra226be");
waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(MainRegistry.partsTab).setTextureName(RefStrings.MODID + ":waste_plate_pu238be");
waste_plate_u233 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u233").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
waste_plate_u235 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_u235").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_uranium");
waste_plate_mox = new ItemDepletedFuel().setUnlocalizedName("waste_plate_mox").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_mox");
waste_plate_pu239 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_mox");
waste_plate_sa326 = new ItemDepletedFuel().setUnlocalizedName("waste_plate_sa326").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_sa326");
waste_plate_ra226be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_ra226be").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_ra226be");
waste_plate_pu238be = new ItemDepletedFuel().setUnlocalizedName("waste_plate_pu238be").setCreativeTab(null).setTextureName(RefStrings.MODID + ":waste_plate_pu238be");
pile_rod_uranium = new ItemPileRod().setUnlocalizedName("pile_rod_uranium").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_uranium");
pile_rod_pu239 = new ItemPileRod().setUnlocalizedName("pile_rod_pu239").setCreativeTab(null).setTextureName(RefStrings.MODID + ":pile_rod_pu239");

View File

@ -19,9 +19,9 @@ public class ItemPollutionDetector extends Item {
@Override
public void onUpdate(ItemStack stack, World world, Entity entity, int i, boolean bool) {
if(!(entity instanceof EntityPlayerMP) || world.getTotalWorldTime() % 10 != 0) return;
PollutionData data = PollutionHandler.getPollutionData(world, (int) Math.floor(entity.posX), (int) Math.floor(entity.posY), (int) Math.floor(entity.posZ));
if(data == null) data = new PollutionData();
@ -34,10 +34,32 @@ public class ItemPollutionDetector extends Item {
poison = ((int) (poison * 100)) / 100F;
heavymetal = ((int) (heavymetal * 100)) / 100F;
//fallout = ((int) (fallout * 100)) / 100F;
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.soot") + ": " + soot).color(EnumChatFormatting.YELLOW).flush(), 100, 4000), (EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.poison") + ": " + poison).color(EnumChatFormatting.YELLOW).flush(), 101, 4000), (EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start(I18nUtil.resolveKey("pollution.heavymetal") + ": " + heavymetal).color(EnumChatFormatting.YELLOW).flush(), 102, 4000), (EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(
new PlayerInformPacket(
ChatBuilder.startTranslation("pollution.soot")
.color(EnumChatFormatting.YELLOW)
.next(": " + soot)
.color(EnumChatFormatting.YELLOW)
.flush(), 100, 4000),
(EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(
new PlayerInformPacket(
ChatBuilder.startTranslation("pollution.poison")
.color(EnumChatFormatting.YELLOW)
.next(": " + poison)
.color(EnumChatFormatting.YELLOW)
.flush(), 101, 4000),
(EntityPlayerMP) entity);
PacketDispatcher.wrapper.sendTo(
new PlayerInformPacket(
ChatBuilder.startTranslation("pollution.heavymetal")
.color(EnumChatFormatting.YELLOW)
.next(": " + heavymetal)
.color(EnumChatFormatting.YELLOW)
.flush(), 102, 4000),
(EntityPlayerMP) entity);
//PacketDispatcher.wrapper.sendTo(new PlayerInformPacket(ChatBuilder.start("Fallout: " + fallout).color(EnumChatFormatting.YELLOW).flush(), 103, 4000), (EntityPlayerMP) entity);
}
}

View File

@ -275,6 +275,7 @@ public class ClientProxy extends ServerProxy {
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityChimneyIndustrial.class, new RenderChimneyIndustrial());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineMiningLaser.class, new RenderLaserMiner());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAnnihilator.class, new RenderAnnihilator());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineRockMill.class, new RenderRockMill());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyMachine.class, new RenderAssemblyMachine());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineAssemblyFactory.class, new RenderAssemblyFactory());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachinePrecAss.class, new RenderPrecAss());
@ -1256,8 +1257,10 @@ public class ClientProxy extends ServerProxy {
if("blockdust".equals(data.getString("mode"))) {
Block b = Block.getBlockById(data.getInteger("block"));
fx = new net.minecraft.client.particle.EntityBlockDustFX(world, x, y, z, mX, mY + 0.2, mZ, b, 0);
byte meta = data.getByte("meta");
fx = new net.minecraft.client.particle.EntityBlockDustFX(world, x, y, z, mX, mY + 0.2, mZ, b, meta);
ReflectionHelper.setPrivateValue(EntityFX.class, fx, 10 + rand.nextInt(20), "particleMaxAge", "field_70547_e");
fx.setRBGColorF(0.8F, 0.8F, 0.8F);
}
if("colordust".equals(data.getString("mode"))) {

View File

@ -80,6 +80,7 @@ public class NEIRegistry {
handlers.add(new CompressorHandler());
handlers.add(new ParticleAcceleratorHandler());
handlers.add(new DeuteriumHandler());
handlers.add(new RockMillRecipeHandler());
//this shit comes last
handlers.add(new FluidRecipeHandler());

View File

@ -139,6 +139,9 @@ public class ResourceManager {
//Annihilator
public static final IModelCustom annihilator = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/annihilator.obj")).asVBO();
//Rock Mill
public static final IModelCustom rock_mill = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/rockmill.obj")).asVBO();
//Assembler
public static final IModelCustom assembly_machine = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/assembly_machine.obj")).asVBO();
@ -593,12 +596,11 @@ public class ResourceManager {
//Annihilator
public static final ResourceLocation annihilator_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/annihilator.png");
public static final ResourceLocation annihilator_belt_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/annihilator_belt.png");
//Rock Mill
public static final ResourceLocation rock_mill_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/rockmill.png");
//Assembler
public static final ResourceLocation assembler_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_base_new.png");
public static final ResourceLocation assembler_cog_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_cog_new.png");
public static final ResourceLocation assembler_slider_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_slider_new.png");
public static final ResourceLocation assembler_arm_tex = new ResourceLocation(RefStrings.MODID, "textures/models/assembler_arm_new.png");
public static final ResourceLocation assembly_machine_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_machine.png");
public static final ResourceLocation assemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assemfac.png");
public static final ResourceLocation assembly_factory_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/assembly_factory.png");
@ -606,10 +608,6 @@ public class ResourceManager {
public static final ResourceLocation precass_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/precass.png");
//Chemplant
public static final ResourceLocation chemplant_body_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_base_new.png");
public static final ResourceLocation chemplant_spinner_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_spinner_new.png");
public static final ResourceLocation chemplant_piston_tex = new ResourceLocation(RefStrings.MODID, "textures/models/chemplant_piston_new.png");
public static final ResourceLocation chemplant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/lavabase_small.png");
public static final ResourceLocation chemical_plant_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant.png");
public static final ResourceLocation chemical_plant_fluid_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemical_plant_fluid.png");
public static final ResourceLocation chemfac_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/chemfac.png");

View File

@ -0,0 +1,39 @@
package com.hbm.module.machine;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.recipes.RockMillRecipes;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.inventory.recipes.loader.GenericRecipes;
import com.hbm.util.BobMathUtil;
import api.hbm.energymk2.IEnergyHandlerMK2;
import net.minecraft.item.ItemStack;
public class ModuleMachineRockMill extends ModuleMachineBase {
public ModuleMachineRockMill(int index, IEnergyHandlerMK2 battery, ItemStack[] slots) {
super(index, battery, slots);
this.inputSlots = new int[3];
this.outputSlots = new int[3];
this.inputTanks = new FluidTank[1];
this.outputTanks = new FluidTank[1];
}
@Override
public GenericRecipes getRecipeSet() {
return RockMillRecipes.INSTANCE;
}
@Override
public void setupTanks(GenericRecipe recipe) {
super.setupTanks(recipe);
if(recipe == null) return;
for(int i = 0; i < inputTanks.length; i++) if(recipe.inputFluid != null && recipe.inputFluid.length > i) inputTanks[i].changeTankSize(BobMathUtil.max(inputTanks[i].getFill(), recipe.inputFluid[i].fill * 2, 4_000));
for(int i = 0; i < outputTanks.length; i++) if(recipe.outputFluid != null && recipe.outputFluid.length > i) outputTanks[i].changeTankSize(BobMathUtil.max(outputTanks[i].getFill(), recipe.outputFluid[i].fill * 2, 4_000));
}
public ModuleMachineRockMill itemInput(int from) { for(int i = 0; i < inputSlots.length; i++) inputSlots[i] = from + i; return this; }
public ModuleMachineRockMill itemOutput(int from) { for(int i = 0; i < outputSlots.length; i++) outputSlots[i] = from + i; return this; }
public ModuleMachineRockMill fluidInput(FluidTank a) { inputTanks[0] = a; return this; }
public ModuleMachineRockMill fluidOutput(FluidTank a) { outputTanks[0] = a; return this; }
}

View File

@ -0,0 +1,69 @@
package com.hbm.render.tileentity;
import org.lwjgl.opengl.GL11;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.main.ResourceManager;
import com.hbm.render.item.ItemRenderBase;
import com.hbm.tileentity.machine.TileEntityMachineRockMill;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.client.IItemRenderer;
public class RenderRockMill extends TileEntitySpecialRenderer implements IItemRendererProvider {
@Override
public void renderTileEntityAt(TileEntity tile, double x, double y, double z, float interp) {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y, z + 0.5);
GL11.glRotated(90, 0, 1, 0);
GL11.glShadeModel(GL11.GL_SMOOTH);
switch(tile.getBlockMetadata() - BlockDummyable.offset) {
case 2: GL11.glRotatef(0, 0F, 1F, 0F); break;
case 4: GL11.glRotatef(90, 0F, 1F, 0F); break;
case 3: GL11.glRotatef(180, 0F, 1F, 0F); break;
case 5: GL11.glRotatef(270, 0F, 1F, 0F); break;
}
TileEntityMachineRockMill mill = (TileEntityMachineRockMill) tile;
bindTexture(ResourceManager.rock_mill_tex);
ResourceManager.rock_mill.renderPart("Base");
if(mill.frame) ResourceManager.rock_mill.renderPart("Frame");
float rot = mill.prevRotation + (mill.rotation - mill.prevRotation) * interp;
GL11.glRotatef(rot, 0, -1, 0);
ResourceManager.rock_mill.renderPart("Wheel");
GL11.glShadeModel(GL11.GL_FLAT);
GL11.glPopMatrix();
}
@Override
public Item getItemForRenderer() {
return Item.getItemFromBlock(ModBlocks.machine_rockmill);
}
@Override
public IItemRenderer getRenderer() {
return new ItemRenderBase() {
public void renderInventory() {
GL11.glTranslated(0, -1.5, 0);
GL11.glScaled(3, 3, 3);
}
public void renderCommonWithStack(ItemStack item) {
GL11.glScaled(0.75, 0.75, 0.75);
GL11.glShadeModel(GL11.GL_SMOOTH);
bindTexture(ResourceManager.rock_mill_tex);
ResourceManager.rock_mill.renderAll();
GL11.glShadeModel(GL11.GL_FLAT);
}};
}
}

View File

@ -4,6 +4,7 @@ import java.util.ArrayList;
import java.util.List;
import api.hbm.redstoneoverradio.IRORInteractive;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class SatelliteDetector extends SatelliteBase {
@ -98,8 +99,8 @@ public class SatelliteDetector extends SatelliteBase {
intensity == BurstIntensity.MEDIUM ? INACCURACY_MEDIUM :
INARRCURACY_HIGH;
this.x += world.rand.nextGaussian() * inaccuracy;
this.z += world.rand.nextGaussian() * inaccuracy;
this.x += MathHelper.clamp_double(world.rand.nextGaussian(), -1, 1) * inaccuracy;
this.z += MathHelper.clamp_double(world.rand.nextGaussian(), -1, 1) * inaccuracy;
}
}

View File

@ -354,6 +354,7 @@ public class TileMappings {
put(TileEntityMachineCombustionEngine.class, "tileentity_combustion_engine");
put(TileEntityMachineRockMill.class, "tileentity_rock_mill");
put(TileEntityMachineAssemblyMachine.class, "tileentity_assemblymachine");
put(TileEntityMachineAssemblyFactory.class, "tileentity_assemblyfactory");
put(TileEntityMachinePrecAss.class, "tileentity_precass");

View File

@ -2,6 +2,7 @@ package com.hbm.tileentity.machine;
import java.util.List;
import api.hbm.redstoneoverradio.IRORInteractive;
import com.hbm.blocks.BlockDummyable;
import com.hbm.blocks.ModBlocks;
import com.hbm.tileentity.TileEntityLoadedBase;
@ -16,26 +17,26 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
public class TileEntityCargoElevator extends TileEntityLoadedBase {
public class TileEntityCargoElevator extends TileEntityLoadedBase implements IRORInteractive {
public int height = 0;
public int targetExtension;
public double extension;
public double prevExtension;
public double syncExtension;
private int sync;
public boolean isExtending;
public static final double speed = 2D / 20D; // 2 blocks per second
public boolean renderPlatform = false;
@Override
public void updateEntity() {
this.prevExtension = this.extension;
if(!worldObj.isRemote) {
// connect to lower elevator
if(worldObj.getBlock(xCoord, yCoord - 1, zCoord) == ModBlocks.cargo_elevator) {
int[] pos = ((BlockDummyable) ModBlocks.cargo_elevator).findCore(worldObj, xCoord, yCoord - 1, zCoord);
@ -48,20 +49,21 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
return;
}
}
if(this.isExtending && this.extension < this.height) {
this.extension += this.speed;
if (this.extension < targetExtension) { // go up
this.extension += speed;
this.extension = MathHelper.clamp_double(this.extension, 0, targetExtension);
} else if (this.extension > targetExtension) { // go down
this.extension -= speed;
this.extension = MathHelper.clamp_double(this.extension, targetExtension, this.height);
}
if(!this.isExtending && this.extension > 0) {
this.extension -= this.speed;
}
this.extension = MathHelper.clamp_double(this.extension, 0, this.height);
// exist for at least one tick before the main portion gets rendered, fixes the short flickering platform that instantly despawns
renderPlatform = true;
this.networkPackNT(300);
} else {
@ -72,12 +74,12 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
this.extension = this.syncExtension;
}
}
if(this.extension != this.prevExtension) {
double liftUpper = this.yCoord + 1 + Math.max(this.extension, this.prevExtension);
double liftLower = this.yCoord + 1 + Math.min(this.extension, this.prevExtension);
List<Entity> toLift = worldObj.getEntitiesWithinAABB(Entity.class, AxisAlignedBB.getBoundingBox(xCoord - 0.99, liftLower, zCoord - 0.99, xCoord + 1.99, liftUpper, zCoord + 1.99));
for(Entity e : toLift) {
if(e instanceof EntityPlayer && !worldObj.isRemote) continue;
if(e.boundingBox.minY >= liftLower && e.boundingBox.minY <= liftUpper) {
@ -89,15 +91,12 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
}
}
}
public void toggleElevator() {
if(this.extension >= this.height) {
this.isExtending = false;
}
if(this.extension <= 0) {
this.isExtending = true;
if (targetExtension == 0) {
targetExtension = this.height;
} else {
targetExtension = 0;
}
}
@ -126,7 +125,7 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
super.readFromNBT(nbt);
this.extension = nbt.getDouble("extension");
this.isExtending = nbt.getBoolean("isExtending");
this.targetExtension = nbt.getInteger("targetExtension");
this.height = nbt.getInteger("height");
}
@ -135,10 +134,10 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
super.writeToNBT(nbt);
nbt.setDouble("extension", extension);
nbt.setBoolean("isExtending", isExtending);
nbt.setInteger("targetExtension", this.targetExtension);
nbt.setInteger("height", height);
}
AxisAlignedBB bb = null;
@Override
@ -146,7 +145,7 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
// workaround for angelica, extend AABB to build height by default instead of dynamically scaling
int h = Compat.isModLoaded(Compat.MOD_ANG) ? 256 - yCoord : 1 + this.height;
if(bb == null || bb.maxY - bb.minY < h) {
bb = AxisAlignedBB.getBoundingBox(
xCoord - 1,
@ -160,10 +159,28 @@ public class TileEntityCargoElevator extends TileEntityLoadedBase {
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
@Override
public String runRORFunction(String name, String[] params) {
if ((PREFIX_FUNCTION + "setextension").equals(name) && params.length > 0) {
targetExtension = IRORInteractive.parseInt(params[0], 0, height);
return null;
}
return null;
}
@Override
public String[] getFunctionInfo() {
return new String[]{
PREFIX_VALUE + "extension",
PREFIX_FUNCTION + "setextension"
};
}
}

View File

@ -0,0 +1,282 @@
package com.hbm.tileentity.machine;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.container.ContainerMachineRockMill;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.inventory.fluid.tank.FluidTank;
import com.hbm.inventory.gui.GUIMachineRockMill;
import com.hbm.inventory.recipes.loader.GenericRecipe;
import com.hbm.items.ModItems;
import com.hbm.lib.Library;
import com.hbm.main.MainRegistry;
import com.hbm.module.machine.ModuleMachineRockMill;
import com.hbm.tileentity.IGUIProvider;
import com.hbm.tileentity.TileEntityMachineBase;
import com.hbm.util.BobMathUtil;
import com.hbm.util.Vec3NT;
import com.hbm.util.fauxpointtwelve.BlockPos;
import com.hbm.util.fauxpointtwelve.DirPos;
import api.hbm.energymk2.IBatteryItem;
import api.hbm.energymk2.IEnergyReceiverMK2;
import api.hbm.fluidmk2.IFluidStandardTransceiverMK2;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class TileEntityMachineRockMill extends TileEntityMachineBase implements IEnergyReceiverMK2, IFluidStandardTransceiverMK2, IControlReceiver, IGUIProvider {
public FluidTank[] inputTanks;
public FluidTank[] outputTanks;
public long power;
public long maxPower = 2_500;
public boolean didProcess = false;
public float rotation;
public float prevRotation;
public float rotationSpeed = 0F;
public static final float ACCELERATION = 0.1F;
public static final float MAX_SPEED = 15F;
public boolean frame = false;
public ModuleMachineRockMill rockMillModule;
public TileEntityMachineRockMill() {
super(8);
this.inputTanks = new FluidTank[1];
this.outputTanks = new FluidTank[1];
this.inputTanks[0] = new FluidTank(Fluids.NONE, 4_000);
this.outputTanks[0] = new FluidTank(Fluids.NONE, 4_000);
this.rockMillModule = new ModuleMachineRockMill(0, this, slots)
.itemInput(2).itemOutput(5)
.fluidInput(inputTanks[0]).fluidOutput(outputTanks[0]);
}
@Override
public String getName() {
return "container.machineRockMill";
}
@Override
public void updateEntity() {
if(maxPower <= 0) this.maxPower = 2_500;
if(!worldObj.isRemote) {
GenericRecipe recipe = rockMillModule.getRecipe();
if(recipe != null) {
this.maxPower = recipe.power * 100;
}
this.maxPower = BobMathUtil.max(this.power, this.maxPower, 2_500);
this.power = Library.chargeTEFromItems(slots, 0, power, maxPower);
for(DirPos pos : getConPos()) {
this.trySubscribe(worldObj, pos);
for(FluidTank tank : inputTanks) if(tank.getTankType() != Fluids.NONE) this.trySubscribe(tank.getTankType(), worldObj, pos);
for(FluidTank tank : outputTanks) if(tank.getFill() > 0) this.tryProvide(tank, worldObj, pos);
}
this.rockMillModule.update(1D, 1D, true, slots[1]);
this.didProcess = this.rockMillModule.didProcess;
if(this.rockMillModule.markDirty) this.markDirty();
if(this.didProcess && (worldObj.getTotalWorldTime() + BlockPos.getIdentity(xCoord, yCoord, zCoord)) % 3 == 0) {
String sound = Blocks.stone.stepSound.getStepResourcePath();
if(recipe != null && recipe.getIcon().getItem() instanceof ItemBlock && ((ItemBlock) recipe.getIcon().getItem()).field_150939_a != null) {
sound = ((ItemBlock) recipe.getIcon().getItem()).field_150939_a.stepSound.getStepResourcePath();
}
worldObj.playSoundEffect(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5, sound, this.getVolume(1.0F), 0.75F);
}
this.networkPackNT(100);
} else {
this.prevRotation = this.rotation;
this.rotationSpeed += this.ACCELERATION * (this.didProcess ? 1 : -1);
this.rotationSpeed = MathHelper.clamp_float(this.rotationSpeed, 0F, MAX_SPEED);
this.rotation += this.rotationSpeed;
if(this.rotation >= 360F) {
this.prevRotation -= 360F;
this.rotation -= 360F;
}
if(worldObj.getTotalWorldTime() % 20 == 0) {
frame = !worldObj.getBlock(xCoord, yCoord + 3, zCoord).isAir(worldObj, xCoord, yCoord + 3, zCoord);
}
if(this.didProcess && MainRegistry.proxy.me().getDistanceSq(xCoord + 0.5, yCoord + 1.5, zCoord + 0.5) < 35 * 35) {
GenericRecipe recipe = rockMillModule.getRecipe();
Block block = Blocks.gravel;
int meta = 0;
if(recipe != null) {
if(recipe.getIcon().getItem() instanceof ItemBlock) {
block = Block.getBlockFromItem(recipe.getIcon().getItem());
meta = recipe.getIcon().getItemDamage();
}
}
Vec3NT vec = new Vec3NT(1, 0, 0);
vec.rotateAroundYDeg(worldObj.rand.nextDouble() * 360);
double speed = 0.125D;
NBTTagCompound data = new NBTTagCompound();
data.setString("type", "vanillaExt");
data.setString("mode", "blockdust");
data.setInteger("block", Block.getIdFromBlock(block));
data.setByte("meta", (byte) meta);
data.setDouble("mX", vec.xCoord * speed);
data.setDouble("mY", vec.yCoord * speed - 0.1D);
data.setDouble("mZ", vec.zCoord * speed);
data.setDouble("posX", xCoord + 0.5 + vec.xCoord * 2.25);
data.setDouble("posY", yCoord + 1.5);
data.setDouble("posZ", zCoord + 0.5 + vec.zCoord * 2.25);
MainRegistry.proxy.effectNT(data);
}
}
}
public DirPos[] getConPos() {
return new DirPos[] {
new DirPos(xCoord + 3, yCoord, zCoord + 1, Library.POS_X),
new DirPos(xCoord + 3, yCoord, zCoord - 1, Library.POS_X),
new DirPos(xCoord - 3, yCoord, zCoord + 1, Library.NEG_X),
new DirPos(xCoord - 3, yCoord, zCoord - 1, Library.NEG_X),
new DirPos(xCoord + 1, yCoord, zCoord + 3, Library.POS_Z),
new DirPos(xCoord - 1, yCoord, zCoord + 3, Library.POS_Z),
new DirPos(xCoord + 1, yCoord, zCoord - 3, Library.NEG_Z),
new DirPos(xCoord - 1, yCoord, zCoord - 3, Library.NEG_Z),
};
}
@Override
public void serialize(ByteBuf buf) {
super.serialize(buf);
for(FluidTank tank : inputTanks) tank.serialize(buf);
for(FluidTank tank : outputTanks) tank.serialize(buf);
buf.writeLong(power);
buf.writeLong(maxPower);
buf.writeBoolean(didProcess);
this.rockMillModule.serialize(buf);
}
@Override
public void deserialize(ByteBuf buf) {
super.deserialize(buf);
for(FluidTank tank : inputTanks) tank.deserialize(buf);
for(FluidTank tank : outputTanks) tank.deserialize(buf);
this.power = buf.readLong();
this.maxPower = buf.readLong();
this.didProcess = buf.readBoolean();
this.rockMillModule.deserialize(buf);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
this.inputTanks[0].readFromNBT(nbt, "i" + 0);
this.outputTanks[0].readFromNBT(nbt, "o" + 0);
this.power = nbt.getLong("power");
this.maxPower = nbt.getLong("maxPower");
this.rockMillModule.readFromNBT(nbt);
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
this.inputTanks[0].writeToNBT(nbt, "i" + 0);
this.outputTanks[0].writeToNBT(nbt, "o" + 0);
nbt.setLong("power", power);
nbt.setLong("maxPower", maxPower);
this.rockMillModule.writeToNBT(nbt);
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack stack) {
if(slot == 0) return stack.getItem() instanceof IBatteryItem; // battery
if(slot == 1 && stack.getItem() == ModItems.blueprints) return true;
if(this.rockMillModule.isItemValid(slot, stack)) return true; // recipe input crap
return false;
}
@Override
public boolean canExtractItem(int i, ItemStack itemStack, int j) {
return (i >= 5 && i <= 7) || this.rockMillModule.isSlotClogged(i);
}
@Override
public int[] getAccessibleSlotsFromSide(int side) {
return new int[] {2, 3, 4, 5, 6, 7};
}
@Override public long getPower() { return power; }
@Override public void setPower(long power) { this.power = power; }
@Override public long getMaxPower() { return maxPower; }
@Override public FluidTank[] getReceivingTanks() { return inputTanks; }
@Override public FluidTank[] getSendingTanks() { return outputTanks; }
@Override public FluidTank[] getAllTanks() { return new FluidTank[] {inputTanks[0], outputTanks[0]}; }
@Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { return new ContainerMachineRockMill(player.inventory, this); }
@Override @SideOnly(Side.CLIENT) public Object provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { return new GUIMachineRockMill(player.inventory, this); }
@Override public boolean hasPermission(EntityPlayer player) { return this.isUseableByPlayer(player); }
@Override
public void receiveControl(NBTTagCompound data) {
if(data.hasKey("index") && data.hasKey("selection")) {
int index = data.getInteger("index");
String selection = data.getString("selection");
if(index == 0) {
this.rockMillModule.setRecipe(selection, false);
this.markChanged();
}
}
}
AxisAlignedBB bb = null;
@Override
public AxisAlignedBB getRenderBoundingBox() {
if(bb == null) bb = AxisAlignedBB.getBoundingBox(xCoord - 2, yCoord, zCoord - 2, xCoord + 3, yCoord + 3, zCoord + 3);
return bb;
}
@Override
@SideOnly(Side.CLIENT)
public double getMaxRenderDistanceSquared() {
return 65536.0D;
}
}

View File

@ -135,6 +135,7 @@ ass.factorioChip=Minimalisten-Schaltkreise
ass.nitra=Nitra zu Munition
autoswitch=Teil der Rezeptgruppe "%s"$Rezept ändert sich basierend auf das erste Item
autoswitch.crushing=Fels-Zerkleinerung
autoswitch.cyclotron=Zyklotron-Pulverkisten
autoswitch.pile=Wiederaufbereitung Chicago-Pile-Brennstoff
autoswitch.pilerod=Chicago-Pile-Brennstoff
@ -323,6 +324,7 @@ container.machinePrecAss=Präzisions-Montagemaschine
container.machinePUREX=PUREX
container.machinePyroOven=Pyrolyseofen
container.machineRefinery=Ölraffinerie
container.machineRockMill=Steinmühle
container.machineRotaryFurnace=Rotationshochofen
container.machineSelenium=Hochleistungs-Sternmotor
container.machineShredder=Brecher
@ -3765,6 +3767,8 @@ rbmk.rod.xenon=Xenonvergiftung: %s
rbmk.rod.coreTemp=Kerntemperatur: %s
rbmk.rod.skinTemp=Außentemperatur: %s / %s
rock.crushing=Zerkleinern von %s
shape.barrelHeavy=Schwerer Lauf
shape.barrelLight=Leichter Lauf
shape.billet=Billet
@ -4537,7 +4541,7 @@ tile.machine_radgen.name=Strahlenbetriebener Generator
tile.machine_reactor.name=Brutreaktor (LEGACY)
tile.machine_reactor_small.name=Atomreaktor (LEGACY)
tile.machine_refinery.name=Ölraffinerie
tile.machine_reix_mainframe.name=Rei-X Hauptrechner (WIP)
tile.machine_rockmill.name=Steinmühle
tile.machine_rotary_furnace.name=Rotationshochofen
tile.machine_rtg_blue.name=Konvektionsgenerator
tile.machine_rtg_cyan.name=Schrabidium-Zerfallsenergie-Generator (WIP)

View File

@ -190,6 +190,7 @@ ass.factorioChip=Minimalist Circuits
ass.nitra=Nitra to Ammunition
autoswitch=Part of auto switch group "%s"$Recipe changes based on first ingredient
autoswitch.crushing=Rock Crushing
autoswitch.cyclotron=Cyclotron Powder Boxes
autoswitch.pile=Reprocessing Chicago Pile Rods
autoswitch.pilerod=Chicago Pile Rods
@ -724,6 +725,7 @@ container.machinePrecAss=Precision Assembly Machine
container.machinePUREX=PUREX
container.machinePyroOven=Pyrolysis Oven
container.machineRefinery=Oil Refinery
container.machineRockMill=Rock Mill
container.machineRotaryFurnace=Rotary Furnace
container.machineSelenium=Radial Performance Engine
container.machineShredder=Shredder
@ -4964,6 +4966,8 @@ rbmk.screen.rod=Control: %s
rbmk.screen.temp=Temp: %s
rbmk.screen.xenon=Xenon: %s
rock.crushing=Crushing of %s
satchip.frequency=Satellite frequency
satchip.foeq=Gives you an achievement. That's it.
satchip.gerald.desc=Single use.$Requires orbital module.$Melter of CPUs, bane of every server owner.
@ -5824,7 +5828,7 @@ tile.machine_radiolysis.name=Radioisotope Thermoelectric Generator and Radiolysi
tile.machine_reactor.name=Breeding Reactor (LEGACY)
tile.machine_reactor_small.name=Research Reactor (LEGACY)
tile.machine_refinery.name=Oil Refinery
tile.machine_reix_mainframe.name=Rei-X Mainframe (WIP)
tile.machine_rockmill.name=Rock Mill
tile.machine_rotary_furnace.name=Rotary Furnace
tile.machine_rtg_blue.name=Convection Generator
tile.machine_rtg_cyan.name=Schrabidium Decay Generator (WIP)

View File

@ -190,6 +190,7 @@ ass.factorioChip=Минималистичная схема
ass.nitra=Амуниция из нитры
autoswitch=Часть группы автоматического переключения "%s"$Рецепта изменяется в зависимости от первого ингредиента
autoswitch.crushing=Дробление камня
autoswitch.cyclotron=Коробки пыли Циклотрон
autoswitch.pile=Переработка стержней Чикагской поленницы
autoswitch.pilerod=Стержни Чикагской поленницы
@ -721,6 +722,7 @@ container.machinePlasmaForge=Плазменная кузница
container.machinePrecAss=Прецизионный сборщик
container.machinePyroOven=Пиролизная печь
container.machineRefinery=Нефтеперерабатывающий завод
container.machineRockMill=Жерновая мельница
container.machineRotaryFurnace=Роторная печь
container.machineSelenium=Радиальный двигатель
container.machineShredder=Измельчитель
@ -969,7 +971,7 @@ desc.gui.rtgBFurnace.desc=Требует хотя бы 15 единиц тепл
desc.gui.rtg.heat=§eТекущий уровень тепла: %s
desc.gui.rtg.pellets=Принимаемые пеллеты:
desc.gui.rtg.pelletHeat=%s (%s тепла)
desc.gui.rtg.pelletPower=%s (%s HE/тик)
desc.gui.rtg.pelletPower=%s (%s HE/t)
desc.gui.template=§9Шаблоны§r$Шаблоны могут быть сделаны$в Папке шаблонов машин.
desc.gui.turbinegas.automode=§2Автоматический режим турбины§r$Нажав кнопку "AUTO", турбина автоматически$отрегулирует позицию регулятора$в зависимости от требуемой мощности сети$и количества оставшегося топлива
desc.gui.turbinegas.fuels=§6Принимаемое топливо:
@ -1062,8 +1064,8 @@ desc.item.ammo.pro_withering=+ Иссущающий
desc.item.armorMod.display=чтобы показать установленные модификаторы брони
desc.item.battery.charge=Заряд: %s / %sHE
desc.item.battery.chargePerc=Заряд: %s%%
desc.item.battery.chargeRate=Скорость зарядки: %sHE/тик
desc.item.battery.dischargeRate=Скорость разрядки: %sHE/тик
desc.item.battery.chargeRate=Скорость зарядки: %sHE/t
desc.item.battery.dischargeRate=Скорость разрядки: %sHE/t
desc.item.durability=Прочность: %s
desc.item.grenade.fuse=Предохранитель: %s
desc.item.grenade.fuseImpact=Столкновение
@ -1611,20 +1613,20 @@ item.ajro_boots.name=Ботинки силовой брони AJR
item.ajro_helmet.name=Шлем силовой брони AJR
item.ajro_legs.name=Поножи силовой брони AJR
item.ajro_plate.name=Нагрудник силовой брони AJR
item.ammo_arty.name=16-дюймовый артиллерийский снаряд
item.ammo_arty_cargo.name=16-дюймовый артиллерийский снаряд для экспресс-доставки
item.ammo_arty_chlorine.name=Хлорный 16-дюймовый артиллерийский снаряд
item.ammo_arty.name=16-дюймовый артиллерийский снаряд (Стандартный)
item.ammo_arty_cargo.name=16-дюймовый артиллерийский снаряд (Экспресс-доставка)
item.ammo_arty_chlorine.name=16-дюймовый артиллерийский снаряд (Хлор)
item.ammo_arty_classic.name=16-дюймовый артиллерийский снаряд (Прямо из Факторио)
item.ammo_arty_he.name=Фугасный 16-дюймовый артиллерийский снаряд
item.ammo_arty_mini_nuke.name=Мини-ядерный 16-дюймовый артиллерийский снаряд
item.ammo_arty_mini_nuke_multi.name=Мини-ядерный 16-дюймовый мульти-снаряд
item.ammo_arty_mustard_gas.name=16-дюймовый артиллерийский снаряд с ипритом
item.ammo_arty_nuke.name=Ядерный 16-дюймовый артиллерийский снаряд
item.ammo_arty_phosgene.name=Фосгеновый 16-дюймовый артиллерийский снаряд
item.ammo_arty_phosphorus.name=Фосфорный 16-дюймовый артиллерийский снаряд
item.ammo_arty_he.name=16-дюймовый артиллерийский снаряд (Фугасный)
item.ammo_arty_mini_nuke.name=16-дюймовый артиллерийский снаряд (Мини-ядерный)
item.ammo_arty_mini_nuke_multi.name=16-дюймовый артиллерийский мульти-снаряд (Мини-ядерный)
item.ammo_arty_mustard_gas.name=16-дюймовый артиллерийский снаряд (Иприт)
item.ammo_arty_nuke.name=16-дюймовый артиллерийский снаряд (Ядерный)
item.ammo_arty_phosgene.name=16-дюймовый артиллерийский снаряд (Фосгеновый)
item.ammo_arty_phosphorus.name=16-дюймовый артиллерийский снаряд (Фосфорный)
item.ammo_arty_phosphorus_multi.name=16-дюймовый артиллерийский мульти-снаряд (Фосфорный)
item.ammo_bag.name=Сумка для боеприпасов
item.ammo_bag_infinite.name=Бесконечная сумка для боеприпасов
item.ammo_arty_phosphorus_multi.name=Фосфорный 16-дюймовый мульти-снаряд
item.ammo_container.name=Контейнер с боеприпасами
item.ammo_container.desc=Выдаёт патроны не более чем для трёх оружий с хотбара.
item.ammo_container.1.desc=Выдаёт патроны не более чем для трёх оружий с хотбара.$Это не распространяется на мини-ядерные заряды и прочие высокоуровневые боеприпасы.
@ -1637,14 +1639,14 @@ item.ammo_fuel_gas.name=Бак с газом
item.ammo_fuel_napalm.name=Бак с напалмом
item.ammo_fuel_phosphorus.name=Бак с белым фосфором
item.ammo_fuel_vaporizer.name=Бак испарителя
item.ammo_himars_standard.name=227-мм управляемый артиллерийский ракетный снаряд
item.ammo_himars_standard_he.name=227-мм управляемый артиллерийский ракетный снаряд (Фугасный)
item.ammo_himars_standard_lava.name=227-мм управляемый артиллерийский ракетный снаряд (Лава)
item.ammo_himars_standard_mini_nuke.name=227-мм управляемый артиллерийский ракетный снаряд (Мини-ядерный)
item.ammo_himars_standard_tb.name=227-мм управляемый артиллерийский ракетный снаряд (Термобарический)
item.ammo_himars_standard_wp.name=227-мм управляемый артиллерийский ракетный снаряд (БФ)
item.ammo_himars_single.name=610-мм управляемый артиллерийский ракетный снаряд
item.ammo_himars_single_tb.name=610-мм управляемый артиллерийский ракетный снаряд (Термобарический)
item.ammo_himars_standard.name=Контейнер 227-мм управляемых ракет (Стандартный)
item.ammo_himars_standard_he.name=Контейнер 227-мм управляемых ракет (Фугасный)
item.ammo_himars_standard_lava.name=Контейнер 227-мм управляемых ракет (Лавовый)
item.ammo_himars_standard_mini_nuke.name=Контейнер 227-мм управляемых ракет (Мини-ядерный)
item.ammo_himars_standard_tb.name=Контейнер 227-мм управляемых ракет (Термобарический)
item.ammo_himars_standard_wp.name=Контейнер 227-мм управляемых ракет (Фосфорный)
item.ammo_himars_single.name=Контейнер 610-мм управляемой ракеты (Стандартный)
item.ammo_himars_single_tb.name=Контейнер 610-мм управляемой ракеты (Термобарический)
item.ammo_shell.name=240мм Снаряд
item.ammo_shell_apfsds_du.name=240мм APFSTS-DU
item.ammo_shell_apfsds_t.name=240мм APFSTS-T
@ -1653,7 +1655,7 @@ item.ammo_shell_w9.name=240мм Ядерный снаряд W9
item.ammo_secret.bmg50_equestrian.name=Патрон .50 BMG (Разрушитель)
item.ammo_secret.folly_nuke.name=Серебряная пуля (Ядерная)
item.ammo_secret.folly_sm.name=Серебряная пуля
item.ammo_secret.g12_equestrian.name=Патрон 12 калибра (Картечь железнодорожный гвоздь)
item.ammo_secret.g12_equestrian.name=Патрон 12 калибра (Железнодорожный гвоздь)
item.ammo_secret.m44_equestrian.name=Патрон .44 магнум (Разрыватель голов)
item.ammo_secret.p35_800.name=Патрон .35-800 V9
item.ammo_secret.p35_800_bl.name=Патрон .35-800 V9 (Чёрная Молния)
@ -1798,7 +1800,6 @@ item.arc_electrode_burnt.desh.name=Расплавленный деш-элект
item.arc_electrode_burnt.graphite.name=Расплавленный графитовый электрод
item.arc_electrode_burnt.lanthanium.name=Расплавленный лантановый электрод
item.arc_electrode_burnt.saturnite.name=Расплавленный сатурнитовый электрод
item.arc_electrode_desh.name=Электрод из деш
item.armor_battery.name=Аккумуляторный блок для силовой брони
item.armor_battery_mk2.name=Аккумуляторный блок для силовой брони Mk2
item.armor_battery_mk3.name=Аккумуляторный блок для силовой брони Mk3
@ -2165,7 +2166,7 @@ item.casing.small.name=Маленькая гильза из пушечной б
item.casing.small_steel.name=Маленькая гильза из оружейной стали
item.casing.large.name=Большая гильза из пушечной бронзы
item.casing.large_steel.name=Большая гильза из оружейной стали
item.casing.shotshell.name=Гильза дробового патрона для чёрного пороха
item.casing.shotshell.name=Гильза дробового патрона для дымного пороха
item.casing.buckshot.name=Пластиковая гильза дробового патрона
item.casing.buckshot_advanced.name=Продвинутая гильза дробового патрона
item.catalyst_clay.name=Глинистый катализатор
@ -2287,17 +2288,11 @@ item.circuit_star_piece.mem_16k_c.name=ЗД - Слот для карты Пам
item.circuit_star_piece.mem_16k_d.name=ЗД - Слот для карты Памяти 16k D
item.circuit_tantalium.name=Конденсаторная плата
item.circuit_tantalium_raw.name=Сборка конденсаторной платы
item.circuit_targeting_tier1.name=Печатная плата военного класса (Уровень 1)
item.circuit_targeting_tier2.name=Печатная плата военного класса (Уровень 2)
item.circuit_targeting_tier3.name=Печатная плата военного класса (Уровень 3)
item.circuit_targeting_tier4.name=Печатная плата военного класса (Уровень 4)
item.circuit_targeting_tier5.name=Печатная плата военного класса (Уровень 5)
item.circuit_targeting_tier6.name=Печатная плата военного класса (Уровень 6)
item.cladding_desh.name=Обшивка из деш
item.cladding_ghiorsium.name=Прокладка из гиорсия
item.cladding_desh.name=Деш-обшивка
item.cladding_ghiorsium.name=Гиорсиевая обшивка
item.cladding_iron.name=Железная обшивка
item.cladding_lead.name=Свинцовая обшивка
item.cladding_obsidian.name=Прокладка из обсидиана
item.cladding_obsidian.name=Обсидиановая обшивка
item.cladding_paint.name=Свинцовая краска
item.cladding_rubber.name=Резиновая обшивка
item.clay_tablet.name=Глиняная табличка
@ -2536,15 +2531,6 @@ item.dust.desc=Ненавижу пыль!
item.dust.desc.P11=Ещё один падает в пыль!
item.dust_tiny.name=Кучка пыли
item.dwarven_pickaxe.name=Дварфийская кирка
item.dynosphere_base.name=Шаблон Диносферы
item.dynosphere_desh.name=Диносфера из деш
item.dynosphere_desh_charged.name=Диносфера из деш (Заряженная)
item.dynosphere_dineutronium.name=Динейтрониевая диносфера
item.dynosphere_dineutronium_charged.name=Динейтрониевая диносфера (Заряженная)
item.dynosphere_euphemium.name=Эвфемиевая диносфера
item.dynosphere_euphemium_charged.name=Эвфемиевая диносфера (Заряженная)
item.dynosphere_schrabidium.name=Шрабидиевая диносфера
item.dynosphere_schrabidium_charged.name=Шрабидиевая диносфера (Заряженная)
item.dysfunctional_reactor.name=Нерабочий ядерный реактор
item.early_explosive_lenses.name=Набор взрывных линз первого поколения
item.early_explosive_lenses.desc=Сборка из 8 осколочно-фугасных линз с алюминиевым$толкателем, дюралюминиевой оболочкой и проволочными детонаторами.
@ -2644,10 +2630,6 @@ item.fuel_tank_small.name=Малый топливный бак
item.fuse.name=Предохранитель
item.fusion_core.name=Ядерный блок
item.fusion_core_infinite.name=Бесконечный ядерный блок
item.fusion_shield_chlorophyte.name=Хлорофитовый защитный слой термоядерного реактора
item.fusion_shield_desh.name=Деш-Защитный слой термоядерного реактора
item.fusion_shield_tungsten.name=Вольфрамовый защитный слой термоядерного реактора
item.fusion_shield_vaporwave.name=Вапорвейвный защитный слой термоядерного реактора
item.gadget_core.name=Плутониевое ядро
item.gadget_explosive.name=Взрывные линзы первого поколения
item.gadget_kit.name=Комплект Гаджета
@ -2690,13 +2672,13 @@ item.grenade_extra.proxy_fuze.name=Модификация гранаты: Рад
item.grenade_extra.triplex.name=Модификация гранаты: Растроение
item.grenade_filling.cluster.name=Кассетный гранатный заряд
item.grenade_filling.cluster_heavy.name=Тяжёлый кассетный гранатный заряд
item.grenade_filling.demo.name=Разрушающий гранатный заряд
item.grenade_filling.demo.name=Штурмовой гранатный заряд
item.grenade_filling.emp.name=ЭМИ гранатный заряд
item.grenade_filling.he.name=Фугасный гранатный заряд
item.grenade_filling.inc.name=Зажигательный гранатный заряд
item.grenade_filling.laser.name=Лазерный гранатный заряд
item.grenade_filling.nuclear.name=Ядерный гранатный заряд
item.grenade_filling.nuclear_demo.name=Ядерный разрушающий гранатный заряд
item.grenade_filling.nuclear_demo.name=Ядерный штурмовой гранатный заряд
item.grenade_filling.plasma.name=Плазменный гранатный заряд
item.grenade_filling.powder.name=Пороховой гранатный заряд
item.grenade_filling.schrab.name=Шрабидиевый гранатный заряд
@ -2797,7 +2779,7 @@ item.gun_uzi_richter.name=Пистолет-пулемёт "Richter"
item.gun_uzi_akimbo.name=Пистолеты-пулемёты "UZIs"
item.gun_uzi_saturnite.name=Пистолет-пулемёт "UZI сатурнитовый"
item.hand_drill.name=Ручная дрель
item.hand_drill_desh.name=Ручная дрель из деша
item.hand_drill_desh.name=Ручная деш-дрель
item.hazmat_boots.name=Защитные ботинки
item.hazmat_boots_grey.name=Высокоэффективные защитные ботинки
item.hazmat_boots_red.name=Улучшенные защитные ботинки
@ -2849,7 +2831,6 @@ item.industrial_magnet.name=Промышленный магнит
item.inf_water.name=Бесконечный резервуар воды
item.inf_water_mk2.name=Усиленный бесконечный резервуар воды
item.ingot_actinium.name=Слиток актиния-227
item.ingot_advanced_alloy.name=Слиток продвинутого сплава
item.ingot_aluminium.name=Алюминиевый слиток
item.ingot_am_mix.name=Слиток америция реакторного качества
item.ingot_am241.name=Слиток америция-241
@ -2861,7 +2842,7 @@ item.ingot_asbestos.name=Асбестовый лист
item.ingot_asbestos.desc=§o"Наполненный жизнью, неуверенностью в себе и асбестом. Это приходит вместе с воздухом."§r
item.ingot_au198.name=Слиток золота-198
item.ingot_australium.name=Австралиевый слиток
item.ingot_bakelite.name=Бакелит
item.ingot_bakelite.name=Брусок бакелита
item.ingot_beryllium.name=Бериллиевый слиток
item.ingot_biorubber.name=Брусок латекса
item.ingot_bismuth.name=Слиток висмута
@ -2879,15 +2860,14 @@ item.ingot_cobalt.name=Кобальтовый слиток
item.ingot_combine_steel.name=Слиток стали Альянса
item.ingot_combine_steel.desc=*вставьте референс на Гражданскую Оборону*
item.ingot_copper.name=Слиток промышленной меди
item.ingot_daffergon.name=Даффергоновый слиток
item.ingot_desh.name=Слиток деш
item.ingot_desh.name=Деш-слиток
item.ingot_dineutronium.name=Динейтрониевый слиток
item.ingot_dura_steel.name=Слиток быстрорежущей стали
item.ingot_electronium.name=Электрониевый слиток
item.ingot_euphemium.name=Эвфемиевый слиток
item.ingot_euphemium.desc=Совершенно особый и в то же время странный элемент.
item.ingot_ferrouranium.name=Ферроурановый слиток
item.ingot_fiberglass.name=Стекловолокно
item.ingot_fiberglass.name=Брусок стекловолокна
item.ingot_fiberglass.desc=С высоким содержанием волокна, с высоким содержанием стекла. Всё, что необходимо организму.
item.ingot_firebrick.name=Шамотный кирпич
item.ingot_gh336.name=Слиток гиорсия-336
@ -2921,33 +2901,32 @@ item.ingot_neptunium_fuel.name=Слиток нептуниевого топли
item.ingot_niobium.name=Ниобиевый слиток
item.ingot_osmiridium.name=Осмиридиевый слиток
item.ingot_pb209.name=Слиток свинца-209
item.ingot_pc.name=Твёрдый пластиковый брусок
item.ingot_pc.name=Брусок твёрдого пластика
item.ingot_pet.name=Металлизированный алюминием брусок ПЭТ
item.ingot_phosphorus.name=Брусок белого фосфора
item.ingot_plutonium.name=Плутониевый слиток
item.ingot_plutonium_fuel.name=Слиток плутониевого топлива
item.ingot_polonium.name=Слиток полония-210
item.ingot_polymer.name=Полимер
item.ingot_polymer.name=Брусок полимера
item.ingot_pu_mix.name=Слиток плутония реакторного качества
item.ingot_pu238.name=Слиток плутония-238
item.ingot_pu239.name=Слиток плутония-239
item.ingot_pu240.name=Слиток плутония-240
item.ingot_pu241.name=Слиток плутония-241
item.ingot_pvc.name=ПВХ
item.ingot_pvc.name=Брусок ПВХ
item.ingot_ra226.name=Слиток радия-226
item.ingot_raw.name=Слиток (%s)
item.ingot_red_copper.name=Слиток красной меди
item.ingot_reiium.name=Реиевый слиток
item.ingot_rubber.name=Резина
item.ingot_rubber.name=Брусок резины
item.ingot_saturnite.name=Сатурнитовый слиток
item.ingot_schrabidate.name=Слиток шрабидата железа
item.ingot_schrabidium.name=Шрабидиевый слиток
item.ingot_schrabidium_fuel.name=Слиток шрабидиевого топлива
item.ingot_schraranium.name=Шрараниевый слиток
item.ingot_schraranium.desc=Делается из урана в шрабидиевом трансмутаторе
item.ingot_semtex.name=Семтекс
item.ingot_semtex.name=Брусок семтекса
item.ingot_semtex.desc=Пластиковая взрывчатка Семтекс H$Эффективное взрывчатое вещество для многих применений.$Съедобно
item.ingot_silicon.name=Кремниевый брусок
item.ingot_silicon.name=Брусок кремния
item.ingot_smore.name=Слиток с'мора
item.ingot_solinium.name=Солиниевый слиток
item.ingot_sr90.name=Слиток стронция-90
@ -2968,12 +2947,9 @@ item.ingot_u233.name=Слиток урана-233
item.ingot_u235.name=Слиток урана-235
item.ingot_u238.name=Слиток урана-238
item.ingot_u238m2.name=Полустабильный слиток урана-238-2
item.ingot_unobtainium.name=Недостатиевый слиток
item.ingot_uranium.name=Урановый слиток
item.ingot_uranium_fuel.name=Слиток уранового топлива
item.ingot_verticium.name=Вертициевый слиток
item.ingot_weaponsteel.name=Слиток оружейной стали
item.ingot_weidanium.name=Вейданиевый слиток
item.ingot_zirconium.name=Циркониевый куб
item.injector_5htp.name=Автоинъектор 5-гидрокситриптофана
item.injector_knife.name=Автоинъектор 8 дюймового лезвия
@ -3642,7 +3618,7 @@ item.pile_rod.rgp.name=Топливный стержень Чикагской п
item.pile_rod.rgp.desc=Стержень реакторного плутония. Состоит преимущественно из плутония-239 с примесями плутония-240.
item.pile_rod.waste.name=Топливный стержень Чикагской поленницы (Ядерные отходы)
item.pile_rod.waste.desc=Опасный конечный продукт, получаемый при сильном передерживании стержня в активной зоне.
item.pile_rod.zr.name=Технологический стержень Чикагской поленницы (Цирконий)
item.pile_rod.zr.name=Стержень Чикагской поленницы (Цирконий)
item.pile_rod.zr.desc=Инертный циркониевый стержень, пропускающий нейтроны. Применяется для безопасного выталкивания других стержней.
item.pill_iodine.name=Таблетка йода
item.pill_iodine.desc=Убирает негативные эффекты
@ -4188,17 +4164,19 @@ item.safety_fuse.name=Фитиль
item.sat_chip.name=Спутниковый ID-чип
item.sat_coord.name=Спутниковый целеуказатель
item.sat_designator.name=Спутниковый лазерный целеуказатель
item.sat_gerald.name=Геральд Строительный Андроид
item.sat_gerald.name=Строительный андроид Геральд
item.sat_interface.name=Интерфейс спутникового управления
item.satellite.death_ray.name=Орбитальный луч Смерти
item.satellite.miner_astro.name=Астероидный шахтёрный корабль
item.satellite.miner_lunar.name=Лунный шахтёрный корабль
item.satellite.detector.name=Спутник-детектор широкополосного радиоизлучения
item.satellite.miner_astro.name=Астероидный шахтёрский корабль
item.satellite.miner_lunar.name=Лунный шахтёрский корабль
item.satellite.precision_laser.name=Орбитальный прецизионный лазер
item.satellite.radar.name=Спутник Радиолокационный
item.satellite.relay.name=Спутник Ретрансляционный
item.satellite.radar.name=Радиолокационный спутник
item.satellite.ray_scan.name=Спутник-сканер узкополосного излучения
item.satellite.relay.name=Спутник-ретранслятор
item.satellite.scanner.name=Спутник глубинного сканирования
item.satellite.spy.name=Спутник шпион
item.satellite.xenium_resonator.name=Спутник с Зен-Резонатором
item.satellite.spy.name=Спутник-шпион
item.satellite.xenium_resonator.name=Спутник с Зен-резонатором
item.sawblade.name=Лезвие пилорамы
item.schnitzel_vegan.name=Вегетарианский шницель
@ -4580,17 +4558,17 @@ item.weapon_mod_special.bayonet.name=Штык
item.weapon_mod_special.nickel.name=Два пятака
item.weapon_mod_special.doubloons.name=Два золотых дублона
item.weapon_mod_special.choke.name=Чок
item.weapon_mod_special.drill_hss.name=Головка для силового бура из быстрорежущей стали
item.weapon_mod_special.drill_saturnite.name=Головка для силового бура из сатурнита
item.weapon_mod_special.drill_tcalloy.name=Головка для силового бура из технециевой стали
item.weapon_mod_special.drill_weaponsteel.name=Головка для силового бура из оружейной стали
item.weapon_mod_special.engine_aviation.name=Авиационный двигатель для силового бура
item.weapon_mod_special.engine_diesel.name=Дизельный двигатель для силового бура
item.weapon_mod_special.engine_electric.name=Электрический двигатель для силового бура
item.weapon_mod_special.engine_turbo.name=Двигатель с турбонаддувом для силового бура
item.weapon_mod_special.sifter.name=Решето для силового бура
item.weapon_mod_special.magnet.name=Электромагнит для силового бура
item.weapon_mod_special.canisters.name=Внешние баки для силового бура
item.weapon_mod_special.drill_hss.name=Головка из быстрорежущей стали (Силовой бур)
item.weapon_mod_special.drill_saturnite.name=Головка из сатурнита (Силовой бур)
item.weapon_mod_special.drill_tcalloy.name=Головка из технециевой стали (Силовой бур)
item.weapon_mod_special.drill_weaponsteel.name=Головка из оружейной стали (Силовой бур)
item.weapon_mod_special.engine_aviation.name=Авиационный двигатель (Силовой бур)
item.weapon_mod_special.engine_diesel.name=Дизельный двигатель (Силовой бур)
item.weapon_mod_special.engine_electric.name=Электрический двигатель (Силовой бур)
item.weapon_mod_special.engine_turbo.name=Турбированный двигатель (Силовой бур)
item.weapon_mod_special.sifter.name=Решето (Силовой бур)
item.weapon_mod_special.magnet.name=Электромагнит (Силовой бур)
item.weapon_mod_special.canisters.name=Дополнительные баки (Силовой бур)
item.weapon_mod_special.furniture_black.name=Полимерная оснастка (Чёрный)
item.weapon_mod_special.furniture_green.name=Полимерная оснастка (Зелёный)
item.weapon_mod_special.greasegun.name=Набор модернизации для Маслёнки
@ -4752,6 +4730,8 @@ rbmk.screen.rod=Управ: %s
rbmk.screen.temp=Темп: %s
rbmk.screen.xenon=Ксенон: %s
rock.crushing=Дробление %s
satchip.frequency=Частота спутника
satchip.foeq=Даёт тебе достижение. Это всё.
satchip.gerald.desc=Одноразовый.$Требует орбитальный модуль.$Плавитель процессоров, проклятие администраторов серверов.
@ -5578,10 +5558,8 @@ tile.machine_radar.name=Радар
tile.machine_radar_large.name=Большой радар
tile.machine_radgen.name=Радиационный двигатель
tile.machine_radiolysis.name=Радиоизотопный термоэлектрический генератор и камера радиолиза
tile.machine_reactor.name=Реактор-размножитель
tile.machine_reactor_small.name=Исследовательский реактор
tile.machine_refinery.name=Нефтеперерабатывающий завод
tile.machine_reix_mainframe.name=Мэйнфрейм Rei-X (WIP)
tile.machine_rockmill.name=Жерновая мельница
tile.machine_rotary_furnace.name=Роторная печь
tile.machine_rtg_blue.name=Конвекционный генератор
tile.machine_rtg_cyan.name=Генератор Шрабидиевого распада (WIP)
@ -5591,7 +5569,7 @@ tile.machine_rtg_orange.name=Сильный RT генератор
tile.machine_rtg_purple.name=Генератор аннигиляции антиматерии
tile.machine_rtg_red.name=Фульминационный генератор
tile.machine_rtg_yellow.name=Австралиевый супертопливный генератор
tile.machine_satlink.name=Наземная станция спутника
tile.machine_satlink.name=Спутниковая наземная станция
tile.machine_satlinker.name=Менеджер ID спутников
tile.machine_sawmill.name=Лесопилка на генераторе Стирлинга
tile.machine_sawmill.desc=Требует внешний источник тепла.$Скорость теплопередачи: T*0.1 TU/t$Мин. потребление: 100 TU/t, Макс. потребление intake: 300 TU/t
@ -5634,7 +5612,7 @@ tile.machine_vacuum_distill.name=Вакуумный нефтеперерабат
tile.machine_waste_drum.name=Бочка с отработанным топливом
tile.machine_weapon_table.name=Стол модификации оружия
tile.machine_wood_burner.name=Генератор на дровах
tile.machine_wood_burner.desc=Генерирует 100HE/тик$Собирает золу$Может сжигать жидкости с 25%% эффективностью за 1мБ/с
tile.machine_wood_burner.desc=Генерирует 100HE/t$Собирает золу$Может сжигать жидкости с 25%% эффективностью за 1mB/t
tile.machine_well.name=Нефтяная вышка
tile.machine_zirnox.name=Ядерный реактор Цирнокс
tile.marker_structure.name=Маркер для многоблочных структур
@ -5822,9 +5800,9 @@ tile.pribris_burning.name=Горящие обломки РБМК
tile.pribris_digamma.name=Почерневшие обломки РБМК
tile.pribris_radiating.name=Тлеющие обломки РБМК
tile.pump_electric.name=Электрический насос для грунтовых вод
tile.pump_electric.desc=Использует электричество для выкачивания грунтовых вод$Выкачивает до 10,000мБ/тик$Должно быть размещено ниже Y:70
tile.pump_electric.desc=Использует электричество для выкачивания грунтовых вод$Выкачивает до 10,000mB/t$Должно быть размещено ниже Y:70
tile.pump_steam.name=Паровой насос для грунтовых вод
tile.pump_steam.desc=Использует пар для выкачивания грунтовых вод$Выкачывает до 1000мБ/тик$Должно быть размещено ниже Y:70
tile.pump_steam.desc=Использует пар для выкачивания грунтовых вод$Выкачывает до 1000mB/t$Должно быть размещено ниже Y:70
tile.pwr_block.name=Водо-водяной энергетический реактор (ВВЭР)
tile.pwr_casing.name=Внешняя обшивка ВВЭР
tile.pwr_casing.desc=Для формирования реактора необходимо покрыть все внутренние части$Размещение: Обшивка
@ -5899,7 +5877,7 @@ tile.rbmk_indicator.desc=Можно настроить с помощью отв
tile.rbmk_key_pad.name=Редстоун-по-радио клавиатура
tile.rbmk_key_pad.desc=Можно настроить с помощью отвёртки.$Позволяет установить до четырех различных кнопок, которые$отправляют сигналы РпР при нажатии.
tile.rbmk_lever.name=Редстоун-по-радио рычаг
tile.rbmk_lever.desc=Можно настроить с помощью отвёртки.$Позволяет установить до двух рычагов,которые отправляют$РпР сигналы в любом положение.
tile.rbmk_lever.desc=Можно настроить с помощью отвёртки.$Позволяет установить до двух рычагов, которые отправляют$РпР сигналы в любом положении.
tile.rbmk_gauge.name=Редстоун-по-радио измеритель
tile.rbmk_gauge.desc=Можно настроить с помощью отвёртки.$Отображает до четырех измерителей значений из различных$источников сигналов РпР.
tile.rbmk_graph.name=Редстоун-по-радио график
@ -5921,7 +5899,7 @@ tile.rbmk_steam_outlet.name=Порт вывода пара РБМК РеаСим
tile.rbmk_steam_outlet.desc=Извлекает перегретый пар из колонн РБМК, если включены ReaSim бойлеры$Подключается к колоннам РБМК сбоку
tile.rbmk_storage.name=Колонна-хранилище РБМК
tile.rbmk_terminal.name=Редстоун-по-радио терминал
tile.rbmk_terminal.desc=Позволяет команде РпР отправлять вручную.
tile.rbmk_terminal.desc=Позволяет отправлять команды РпР вручную.
tile.rbmk.dodd.heat=Температура колонны
tile.rbmk.dodd.reasimWater=Вода РеаСим
tile.rbmk.dodd.reasimSteam=Пар РеаСим
@ -5998,10 +5976,10 @@ tile.red_connector_super.name=Мощный электрический конне
tile.red_pylon.name=Малая опора ЛЭП (Деревянная)
tile.red_pylon_steel.name=Малая опора ЛЭП (Стальная)
tile.red_pylon_large.name=Большая опора ЛЭП
tile.red_pylon_medium_steel.name=Средния опора ЛЭП (Стальная)
tile.red_pylon_medium_steel_transformer.name=Средния опора ЛЭП с трансформатором (Стальная)
tile.red_pylon_medium_wood.name=Средния опора ЛЭП (Деревянная)
tile.red_pylon_medium_wood_transformer.name=Средния опора ЛЭП с трансформатором (Деревянная)
tile.red_pylon_medium_steel.name=Средняя опора ЛЭП (Стальная)
tile.red_pylon_medium_steel_transformer.name=Средняя опора ЛЭП с трансформатором (Стальная)
tile.red_pylon_medium_wood.name=Средняя опора ЛЭП (Деревянная)
tile.red_pylon_medium_wood_transformer.name=Средняя опора ЛЭП с трансформатором (Деревянная)
tile.red_wire_coated.name=Медный кабель с покрытием
tile.refueler.name=Заправочная станция
tile.reinforced_brick.name=Усиленный бетон
@ -6032,12 +6010,6 @@ tile.sand_quartz.name=Кварцевый песок
tile.sand_uranium.name=Урановый песок
tile.sandbags.name=Мешки с песком
tile.sat_dock.name=Станция посадки груза
tile.sat_foeq.name=ВСАП-МК.I зонд “FOEQ Duna” с экспериментальным ядерным двигателем (Декор)
tile.sat_laser.name=Орбитальный Луч Смерти (Декор)
tile.sat_mapper.name=Спутник для картографирования поверхности (Декор)
tile.sat_radar.name=Спутник с радиолокационным зондированием (Декор)
tile.sat_resonator.name=Спутник с Зен-Резонатором (Декор)
tile.sat_scanner.name=Спутник с модулем глубинно-ресурсного сканирования (Декор)
tile.schrabidic_block.name=Шрабидиевая кислота
tile.seal_controller.name=Открыватель люка пусковой шахты
tile.seal_frame.name=Рама люка пусковой шахты
@ -6228,7 +6200,7 @@ hbmfluid.trait.liquid=Жидкое
hbmfluid.trait.modifiedPheromones=Модифицированные феромоны
hbmfluid.trait.perBucket=за ведро
hbmfluid.trait.perDamage=Урон в секунду
hbmfluid.trait.perMB=за мБ
hbmfluid.trait.perMB=каждый mB
hbmfluid.trait.perTU=TU на
hbmfluid.trait.polluting=Загрязняющее
hbmfluid.trait.provides=Вырабатывает
@ -6329,7 +6301,7 @@ turret.on=ВКЛ
turret.players=Целиться по игрокам: %s
upgrade.acid=Требуется кислота %s
upgrade.burn=Сжигает %sмб/тик за %sHE
upgrade.burn=Сжигает %smB/t за %sHE
upgrade.consumption=Потребление %s
upgrade.coolantConsumption=Потребление охладителя %s
upgrade.delay=Время %s
@ -6383,4 +6355,4 @@ desc.gui.upgrade.overdrive= * §7Перегруз§r: Стакается до 3-
desc.gui.upgrade.power= * §1Энергосбережение§r: Стакается до 3-х уровней
desc.gui.upgrade.speed= * §4Скорость§r: Стакается до 3-х уровней
// Last updated 25.07.2026 by RayzerHan //
// Last updated 25.07.2026 by RayzerHan //

View File

@ -0,0 +1,11 @@
{
"name": "Engine Lubricant",
"icon": ["hbm:item.fluid_icon", 1, 18],
"trigger": [["hbm:item.fluid_icon", 1, 18]],
"title": {
"en_US": "Engine Lubricant"
},
"content": {
"en_US": "Engine lubricant is primarily obtained from [[fractioning|Fractioning Tower]] [[industrial oil|Industrial Oil]]. It can be used to produce [[parrafin wax|Parrafin Wax]] which allows for early production of [[high-performance solvent|High-Performance Solvent]] or the production of [[petroil|Petroil]]. It is also required to lubricate the [[combined cycle gas turbine|Combined Cycle Gas Turbine]].<br><br>See also:<br>[[Basic Oil Processing]]"
}
}

View File

@ -10,6 +10,6 @@
"content": {
"en_US": "Many machines require TU - thermal units - to function. TU is transfered via copper contacts on the undersides of machines, they cannot be connected with pipes or cables.<br><br>Machines that can provide heat are:<br>[[Firebox]]<br>[[Heating Oven]]<br>[[Fluid Burner]]<br>[[Electric Heater]]<br>[[Heat Exchanging Heater]]<br><br>Machines that use TU include, but are not limited to:<br>[[Stirling Engine]]<br>[[Combination Oven]]<br>[[Boiler]]<br>[[Steel Furnace]]<br>[[Crucible]]",
"zh_CN": "很多机器需要TU——“热量单位”才能工作。TU通过机器底部的铜触点进行传输 而不能用线缆或管道等传输。<br><br>可提供热量的机器包括但不限于:<br>[[燃烧室|Firebox]]<br>[[加热炉|Heating Oven]]<br>[[流体燃烧器|Fluid Burner]]<br>[[电加热器|Electric Heater]]<br>[[换热加热器|Heat Exchanging Heater]]<br><br>使用TU的机器包括但不限于<br>[[斯特林发电机|Stirling Engine]]<br>[[复式炼焦炉|Combination Oven]]<br>[[锅炉|Boiler]]<br>[[钢炉|Steel Furnace]]<br>[[坩埚|Crucible]]",
"ru_RU": "Для работы многих машин требуются TU — тепловые единицы. Машины передают TU через медные контакты, они не могут быть соединены трубами или проводами.<br><br>К устройствам, которые могут подавать тепло, относятся:<br>[[Топка|Firebox]]<br>[[Нагревательная печь|Heating Oven]]<br>[[Жидкостная горелка|Fluid Burner]]<br>[[Электрический нагреватель|Electric Heater]]<br>[[Теплообменный нагреватель|Heat Exchanging Heater]]<br><br>Вот некоторые примеры машин, использующих TU:<br>[[Генератор Стирлинга|[Stirling Engine]]<br>[[Коксовая печь|Combination Oven]]<br>[[Бойлер|Boiler]]<br>[[Стальная печь|[Steel Furnace]]<br>[[Литейный тигель|Crucible]]"
"ru_RU": "Для работы многих машин требуются TU — тепловые единицы. Машины передают TU через медные контакты, они не могут быть соединены трубами или проводами.<br><br>К устройствам, которые могут подавать тепло, относятся:<br>[[Топка|Firebox]]<br>[[Нагревательная печь|Heating Oven]]<br>[[Жидкостный нагреватель|Fluid Burner]]<br>[[Электрический нагреватель|Electric Heater]]<br>[[Теплообменный нагреватель|Heat Exchanging Heater]]<br><br>Вот некоторые примеры машин, использующих TU:<br>[[Генератор Стирлинга|[Stirling Engine]]<br>[[Коксовая печь|Combination Oven]]<br>[[Бойлер|Boiler]]<br>[[Стальная печь|[Steel Furnace]]<br>[[Литейный тигель|Crucible]]"
}
}

View File

@ -7,7 +7,7 @@
"ru_RU": "Чикагская поленница"
},
"content": {
"en_US": "The Chicago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].<br><br>The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.<br><br>To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.<br><br>Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.<br><br>Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.<br><br>Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, since the window for extracting pure plutonium-239 is quite small.<br><>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.<br><br>See also:<br>* [[Chicago Pile Operation]]",
"ru_RU": "Чикагская поленница — это низкотехнологичный реактор малой мощности, используемый для наработки ядерных материалов, в основном для превращения [[урана|Uranium]] в [[плутоний-239|Plutonium-239]]. Из-за своей простоты работа с ним требует либо ручного вмешательства, либо некоторой формы внешнего управления с помощью [[редстоун-по-радио|Redstone over Radio]].<br><br>Реактор собирается из блока графитовых кирпичей чикагской поленницы размером минимум 5x5x5 и максимум 15x15x15 блоков. Конструкция не обязательно должна быть идеальным кубом, поэтому формы вроде 5x7x9 вполне допустимы, главное — чтобы блок был полностью заполнен. Сборка реактора выполняется с помощью ручной дрели, при этом пробуренный блок становится ядром.<br><br>Чтобы подготовить чикагскую поленницу к работе, необходимо пробурить каналы, опять же с помощью ручной дрели. Функция канала зависит от его ориентации относительно ядра. Повторное использование ручной дрели на входной стороне существующего канала снова закроет его. Каналы не могут пересекаться друг с другом.<br><br>Топливные каналы — это каналы, которые следуют ориентации ядра, то есть их входная или выходная сторона находится на той же грани, что и панель ядра. В топливные каналы можно загружать топливные стержни чикагской поленницы с помощью [[топливного загрузчика|Chicago Pile Fuel Loader]]. Количество топлива, которое помещается в любой канал, зависит от его длины: один блок канала вмещает один топливный стержень.<br><br>Вентиляционные каналы — это каналы, расположенные перпендикулярно ориентации ядра, а следовательно, и топливным каналам. Вентиляционные каналы охлаждают касающиеся их (но не пересекающиеся) топливные каналы, если подаётся сжатый воздух под давлением 1 PU через [[вентель|Chicago Pile Vent]]. Пассивное охлаждение у чикагской поленницы довольно слабое, поэтому, хотя вентиляторы технически необязательны, на практике они фактически необходимы для любого реактора.<br><br>Каналы, просверленные сверху, предназначены для [[регулирующих стержней|Chicago Pile Control Rod]]. Регулирующие стержни используются для уменьшения взаимодействия между топливными каналами в крупных реакторах, хотя небольшие сборки обычно обходятся и без них. Тем не менее, дросселирование реактора может быть полезным при замене топлива, так как время для извлечения чистого плутония-239 достаточно мало.<br><br>Если реактор разобран, каналы можно пробурить заново, не снимая все навесные устройства вроде топливозагрузчиков и вентиляторов — достаточно зажать Shift и кликнуть по устройству ручной дрелью, чтобы за ним в реакторе пробурился канал.<br><br>См. также:<br>* [[Операции Чикагской поленницы|Chicago Pile Operation]]"
"en_US": "The Chicago Pile is a low-tech low-power reactor used for breeding nuclear material, mainly turning [[uranium|Uranium]] into [[plutonium-239|Plutonium-239]]. Due to its simplicity, operating it either requires manual intervention or some form of external operation with [[Redstone over Radio]].<br><br>The pile is constructed out of a box of Chicago Pile graphite bricks at least 5x5x5 blocks in size, and at most 15x15x15 blocks. The box does not need to be a perfect cube, so shapes like 5x7x9 are valid, so long as the box is filled. Using a hand drill, the pile is assembled, with the drilled block acting as the core.<br><br>To prepare the Chicago Pile for use, channels need to be drilled, again with a hand drill. The function of the channel depends on the orientation relative to the core. Using the hand drill again on the input side of an existing channel will close the channel again. Channels cannot intersect one another.<br><br>Fuel channels are channels that follow the core's orientation, i.e. either the input or output side is on the same face as the core's panel. Fuel channels can be loaded with Chicago Pile fuel rods using a [[fuel loader|Chicago Pile Fuel Loader]]. The amount of fuel that fits into any given channel depends on its length, with one block of channel being able to hold one fuel rod.<br><br>Ventilation channels are channels which are perpendicular to the core's orientation and therefore also to the fuel channels. Ventilation channels cool down fuel channels which touch (but not intersect) them if compressed air is supplied at a pressure of 1 PU via a [[vent|Chicago Pile Vent]]. Passive cooling in the Chicago Pile is quite low, so while technically optional, vents are basically mandatory for every Pile in practice.<br><br>Channels drilled from the top are for [[control rods|Chicago Pile Control Rod]]. Control rods are used to reduce the interactiion between fuel channels in larger Pile setups, although smaller setups are usually fine without control rods. Still, throttling the reactor can be useful when cycling fuel, Тем не менее, регулирование потока в реакторе может быть полезно при циклической смене топлива. since the window for extracting pure plutonium-239 is quite small.<br><>br>If the Pile is disassembled, channels can be drilled again without having to remove all the attachments like fuel loaders and vents, simply shift-click the attachment with the hand drill and a channel will be drilled into the Pile behind it.<br><br>See also:<br>* [[Chicago Pile Operation]]",
"ru_RU": "Чикагская поленница — это низкотехнологичный реактор малой мощности, используемый для наработки ядерных материалов, в основном для превращения [[урана|Uranium]] в [[плутоний-239|Plutonium-239]]. Из-за своей простоты работа с ним требует либо ручного вмешательства, либо некоторой формы внешнего управления с помощью [[редстоун-по-радио|Redstone over Radio]].<br><br>Реактор собирается из блока графитовых кирпичей чикагской поленницы размером минимум 5x5x5 и максимум 15x15x15 блоков. Конструкция не обязательно должна быть идеальным кубом, поэтому формы вроде 5x7x9 вполне допустимы, главное — чтобы конструкция была полностью заполнена. Сборка реактора выполняется с помощью ручной дрели, при этом пробуренный блок становится ядром.<br><br>Чтобы подготовить Чикагскую поленницу к работе, необходимо пробурить каналы, опять же с помощью ручной дрели. Функция канала зависит от его ориентации относительно ядра. Повторное использование ручной дрели на входной стороне существующего канала снова закроет его. Каналы не могут пересекаться друг с другом.<br><br>Топливные каналы — это каналы, которые следуют ориентации ядра, то есть их входная или выходная сторона находится на той же грани, что и панель ядра. В топливные каналы можно загружать топливные стержни Чикагской поленницы с помощью [[топливного загрузчика|Chicago Pile Fuel Loader]]. Количество топлива, которое помещается в любой канал, зависит от его длины: один блок канала вмещает один топливный стержень.<br><br>Вентиляционные каналы — это каналы, расположенные перпендикулярно ориентации ядра, а следовательно, и топливным каналам. Вентиляционные каналы охлаждают касающиеся их (но не пересекающиеся) топливные каналы, если подаётся сжатый воздух под давлением 1 PU через [[вентиль|Chicago Pile Vent]]. Пассивное охлаждение у Чикагской поленницы довольно слабое, поэтому, хотя вентиляторы технически необязательны, на практике они фактически необходимы для любого реактора.<br><br>Каналы, просверленные сверху, предназначены для [[регулирующих стержней|Chicago Pile Control Rod]]. Регулирующие стержни используются для уменьшения взаимодействия между топливными каналами в крупных реакторах, хотя небольшие сборки обычно обходятся и без них. Тем не менее, регулирование потока в реакторе может быть полезно при циклической смене топлива, так как время для извлечения чистого плутония-239 достаточно мало.<br><br>Если реактор разобран, каналы можно пробурить заново, не снимая все навесные устройства вроде топливных загрузчиков и вентилей — достаточно зажать Shift и кликнуть по устройству ручной дрелью, чтобы за ним в реакторе пробурился канал.<br><br>См. также:<br>* [[Управление Чикагской поленницы|Chicago Pile Operation]]"
}
}

View File

@ -8,7 +8,7 @@
},
"content": {
"en_US": "Control rods can be placed on top of the vertically drilled channels of the [[Chicago Pile]]. Control rods, when inserted, will reduce the reactivity between fuel channels. The control rods can be controlled with a redstone signal, causing it to fully withdraw when a signal is supplied, or via [[RoR controller|Redstone-over-Radio Controller]], which allows more precise settings.<br><br>See also:<br>* [[Chicago Pile Fuel Loader]]<br>* [[Chicago Pile Vent]]",
"ru_RU": "Регулирующие стержни устанавливаются поверх вертикально просверленных каналов [[Чикагской поленницы|Chicago Pile]]. При погружении регулирующих стержней снижается реактивность между топливными каналами. Стержнями можно управлять с помощью редстоун-сигнала (при подаче сигнала стержень полностью извлекается) или через [[РпР контроллер|Redstone-over-Radio Controller]], что позволяет настраивать их более точно.<br><br>См. также:<br>* [[Загрузчик топлива Чикагской поленницы|Chicago Pile Fuel Loader]]<br>* [[Вентель Чикагской поленницы|Chicago Pile Vent]]"
"ru_RU": "Регулирующие стержни устанавливаются поверх вертикально просверленных каналов [[Чикагской поленницы|Chicago Pile]]. При погружении регулирующих стержней снижается реактивность между топливными каналами. Стержнями можно управлять с помощью редстоун-сигнала (при подаче сигнала стержень полностью извлекается) или через [[РпР контроллер|Redstone-over-Radio Controller]], что позволяет настраивать их более точно.<br><br>См. также:<br>* [[Загрузчик топлива Чикагской поленницы|Chicago Pile Fuel Loader]]<br>* [[Вентиль Чикагской поленницы|Chicago Pile Vent]]"
}
}

View File

@ -8,7 +8,7 @@
},
"content": {
"en_US": "The fuel loader is required to load [[Chicago Pile]] fuel rods into the Pile's fuel channels. Right-clicking with a fuel rod will insert that rod into the loader, and right-clicking again will load it into the Pile manually. Fuel can also be supplied using hoppers or conveyors, and the loading action can be triggered by supplying a redstone signal to the loader's back side (where the light grey circle is).<br><br>Additionally, the loader can relay information about the connected channel to the [[RoR reader|Redstone-over-Radio Reader]], like the type (metadata) and depletion of the backmost loaded fuel rod or the channel's current temperature.<br><br>See also:<br>* [[Chicago Pile Vent]]<br>* [[Chicago Pile Control Rod]]",
"ru_RU": "Загрузчик топлива необходим для загрузки топливных стержней [[Чикагской поленницы|Chicago Pile]] в топливные каналы реактора. Клик правой кнопкой мыши с топливным стержнем в руке вставит его в загрузчик, а повторный клик ПКМ загрузит его в реактор вручную. Топливо также можно подавать с помощью воронок или конвейеров, а сам процесс загрузки можно активировать подачей редстоун-сигнала на заднюю сторону загрузчика (туда, где находится светло-серый круг).<br><br>Кроме того, загрузчик может передавать информацию о подключенном канале на [[РпР считыватель|Redstone-over-Radio Reader]] — например, тип (метаданные) и степень истощения самого крайнего загруженного стержня, а также текущую температуру канала.<br><br>См. также:<br>* [[Вентель Чикагской поленницы|Chicago Pile Vent]]<br>* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]"
"ru_RU": "Загрузчик топлива необходим для загрузки топливных стержней [[Чикагской поленницы|Chicago Pile]] в топливные каналы реактора. Клик правой кнопкой мыши с топливным стержнем в руке вставит его в загрузчик, а повторный клик ПКМ загрузит его в реактор вручную. Топливо также можно подавать с помощью воронок или конвейеров, а сам процесс загрузки можно активировать подачей редстоун-сигнала на заднюю сторону загрузчика (туда, где находится светло-серый круг).<br><br>Кроме того, загрузчик может передавать информацию о подключенном канале на [[РпР считыватель|Redstone-over-Radio Reader]] — например, тип (метаданные) и степень истощения самого крайнего загруженного стержня, а также текущую температуру канала.<br><br>См. также:<br>* [[Вентиль Чикагской поленницы|Chicago Pile Vent]]<br>* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]"
}
}

File diff suppressed because one or more lines are too long

View File

@ -4,11 +4,11 @@
"trigger": [["hbm:tile.pile_device", 1, 1]],
"title": {
"en_US": "Chicago Pile Vent",
"ru_RU": "Вентель Чикагской поленницы"
"ru_RU": "Вентиль Чикагской поленницы"
},
"content": {
"en_US": "The vent is needed to insert compressed air at 1 PU into the [[Chicago Pile's|Chicago Pile]] ventilation channels. Due to the pressure requirement, each Pile therefore needs at least one [[compressor|Compressor]]. Hot air will harmlessly exit the Pile at the output side of the ventilation channel.<br><br>The vent's cooling effect only applies to fuel channels that touch the ventilation channel, or rather, fuel channels exactly one block above and below that ventilation channel. Without sufficient cooling, the channel will surpass 800°C, causing the highly-flammable graphite bricks to ignite, forcefully disassembling the Pile.<br><br>See also:<br>* [[Chicago Pile Fuel Loader]]<br>* [[Chicago Pile Control Rod]]",
"ru_RU": "Вентель необходим для подачи сжатого воздуха под давлением 1 PU в вентиляционные каналы [[Чикагской поленницы|Chicago Pile]]. Из-за требования к давлению каждому реактору требуется как минимум один [[компрессор|Compressor]]. Горячий воздух безвредно выходит из реактора с выходной стороны вентиляционного канала.<br><br>Охлаждающий эффект вентилятора распространяется только на топливные каналы, которые касаются вентиляционного канала, а точнее — на топливные каналы ровно на один блок выше и ниже этого вентиляционного канала. Без достаточного охлаждения канал нагреется свыше 800°C, что приведет к воспламенению легковоспламеняющихся графитовых кирпичей и силовому разрушению реактора.<br><br>См. также:<br>* [[Топливный загрузчик Чикагской поленницы|Chicago Pile Fuel Loader]]<br>* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]"
"ru_RU": "Вентиль необходим для подачи сжатого воздуха под давлением 1 PU в вентиляционные каналы [[Чикагской поленницы|Chicago Pile]]. Поскольку давление обязательно, каждому реактору требуется как минимум один [[компрессор|Compressor]]. Горячий воздух безвредно выходит из реактора с выходной стороны вентиляционного канала.<br><br>Охлаждающий эффект вентиля распространяется только на топливные каналы, которые касаются вентиляционного канала, а точнее — на топливные каналы ровно на один блок выше и ниже этого вентиляционного канала. Без достаточного охлаждения канал нагреется свыше 800°C, что приведет к возгоранию легковоспламеняющихся графитовых кирпичей и силовому разрушению реактора.<br><br>См. также:<br>* [[Топливный загрузчик Чикагской поленницы|Chicago Pile Fuel Loader]]<br>* [[Регулирующие стержни Чикагской поленницы|Chicago Pile Control Rod]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 3],
"trigger": [["hbm:item.satellite", 1, 3]],
"title": {
"en_US": "Asteroid Mining Ship"
"en_US": "Asteroid Mining Ship",
"ru_RU": "Астероидный шахтёрский корабль"
},
"content": {
"en_US": "The asteroid mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined in space. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The asteroid mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined in space. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Астероидный шахтёрский корабль, если он связан с ID-чипом спутника, вставленным в грузовую посадочную площадку, будет регулярно приземляться для доставки ресурсов, добытых в космосе. Обратите внимание, что один добывающий корабль может снабжать только одну посадочную площадку. Также держите посадочную площадку свободной от препятствий, так как корабль может взорваться при столкновении с другими блоками.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 9],
"trigger": [["hbm:item.satellite", 1, 9]],
"title": {
"en_US": "Wideband Radio Emission Detector Satellite"
"en_US": "Wideband Radio Emission Detector Satellite",
"ru_RU": "Спутник-детектор широкополосного радиоизлучения"
},
"content": {
"en_US": "The wideband radio emission detector is a type of [[satellite|Satellite]] that can detect certain types of high-energy events from the entire map, albeit with low accuracy. The detector can only give a very rough idea of where such an event is taking place, for more accurate results, the area needs to be scanned wither with a [[spy satellite|Spy Satellite]] or [[narrowband scanner|Narrowband Emission Scanning Satellite]].<br><br>The types of events this satellite can pick up are as follows:<br>* Mini nuke explosions (low intensity, accuracy <10,000m)<br>* Radar (medium intensity, accuracy <2,500m)<br>* Particle accelerator operations (medium intensity, accuracy <2,500m)<br>Nuclear explosions (high intensity, accuracy <500m)<br><br>Events are timed, medium intense ones are the shortest lived as they only show up for half a second, while other events can show up for multiple seconds or even up to a minute. It is therefore important to scan any given area multiple times in rapid succession to get an accurate result.<br><br>* '§esurvey§r' will report any recent events that have not timed out yet. The detector's field of view covers the entire map, so there is no range limitations. All detected results are saved to an internal list.<br>* '§ecount§r' will write the amount of detected events to RX.<br>* '§egettype §eindex§r' will write the type (LOW/MEDIUM/HIGH) of the specified event to RX.<br>* '§egetposition §eindex§r' will write the estimated X/Z position of the specified event to RX. The coordinated are separated by semicolon.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The wideband radio emission detector is a type of [[satellite|Satellite]] that can detect certain types of high-energy events from the entire map, albeit with low accuracy. The detector can only give a very rough idea of where such an event is taking place, for more accurate results, the area needs to be scanned wither with a [[spy satellite|Spy Satellite]] or [[narrowband scanner|Narrowband Emission Scanning Satellite]].<br><br>The types of events this satellite can pick up are as follows:<br>* Mini nuke explosions (low intensity, accuracy <10,000m)<br>* Radar (medium intensity, accuracy <2,500m)<br>* Particle accelerator operations (medium intensity, accuracy <2,500m)<br>Nuclear explosions (high intensity, accuracy <500m)<br><br>Events are timed, medium intense ones are the shortest lived as they only show up for half a second, while other events can show up for multiple seconds or even up to a minute. It is therefore important to scan any given area multiple times in rapid succession to get an accurate result.<br><br>* '§esurvey§r' will report any recent events that have not timed out yet. The detector's field of view covers the entire map, so there is no range limitations. All detected results are saved to an internal list.<br>* '§ecount§r' will write the amount of detected events to RX.<br>* '§egettype §eindex§r' will write the type (LOW/MEDIUM/HIGH) of the specified event to RX.<br>* '§egetposition §eindex§r' will write the estimated X/Z position of the specified event to RX. The coordinated are separated by semicolon.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Детектор широкополосного радиоизлучения — это тип [[спутника|Satellite]], который может обнаруживать определённые типы высокоэнергетических событий по всей карте, хотя и с низкой точностью. Детектор даёт лишь очень приблизительное представление о том, где именно происходит событие, поэтому для более точных результатов область необходимо отсканировать с помощью [[спутника-шпиона|Spy Satellite]] или [[узкополосного сканера|Narrowband Emission Scanning Satellite]].<br><br>Типы событий, которые может засечь этот спутник:<br>* Взрывы мини-ядерок (низкая интенсивность, точность <10 000м)<br>* Радар (средняя интенсивность, точность <2 500м)<br>* Работа ускорителей частиц (средняя интенсивность, точность <2 500м)<br>Ядерные взрывы (высокая интенсивность, точность <500м)<br><br>События ограничены по времени: события средней интенсивности являются самыми короткоживущими и отображаются всего полсекунды, в то время как другие могут висеть от нескольких секунд до минуты. Поэтому важно сканировать область несколько раз подряд с коротким интервалом, чтобы получить точный результат.<br><br>* '§esurvey§r' сообщит обо всех недавних событиях, время которых ещё не истекло. Зона обзора детектора покрывает всю карту, поэтому ограничений по дальности нет. Все обнаруженные результаты сохраняются во внутренний список.<br>* '§ecount§r' запишет количество обнаруженных событий в RX.<br>* '§egettype §eindex§r' запишет тип (LOW/MEDIUM/HIGH) указанного события в RX.<br>* '§egetposition §eindex§r' запишет примерные X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 4],
"trigger": [["hbm:item.satellite", 1, 4]],
"title": {
"en_US": "Lunar Mining Ship"
"en_US": "Lunar Mining Ship",
"ru_RU": "Лунный шахтёрский корабль"
},
"content": {
"en_US": "The lunar mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined on the moon. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.<br><br>Unlike the [[asteroid mining ship|Asteroid Mining Ship]], the selection of items it can harvest is much smaller, however, the large quantities of moon turf it can produce are important for [[helium-3|Helium-3]], a powerful fuel for the [[fusion reactor|Fusion Reactor]].<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The lunar mining ship will, if connected to a satellite ID chip which is inserted into a cargo landing pad, land in regular intervals to deliver items mined on the moon. Do note that one mining ship can only supply a single cargo landing pad. Also keep the landing pad free of obstructions, as the drop ship may explode when impacting other blocks.<br><br>Unlike the [[asteroid mining ship|Asteroid Mining Ship]], the selection of items it can harvest is much smaller, however, the large quantities of moon turf it can produce are important for [[helium-3|Helium-3]], a powerful fuel for the [[fusion reactor|Fusion Reactor]].<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Лунный шахтёрский корабль, если он связан с ID-чипом спутника, вставленным в грузовую посадочную площадку, будет регулярно приземляться для доставки ресурсов, добытых на Луне. Обратите внимание, что один добывающий корабль может снабжать только одну посадочную площадку. Также держите посадочную площадку свободной от препятствий, так как корабль может взорваться при столкновении с другими блоками.<br><br>В отличие от [[|астероидного шахтёрского корабля|Asteroid Mining Ship]], выбор добываемых им предметов гораздо меньше, однако большие объемы лунного грунта, которые он может добывать, важны для [[гелия-3|Helium-3]] — мощного топлива для [[|термоядерного реакторра|Fusion Reactor]].<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -6,6 +6,7 @@
"en_US": "Orbital Death Ray"
},
"content": {
"en_US": "The orbital death ray is a powerful nuclear-powered orbital weapon firing a laser that deals as much damage as a high-yield mini nuke, but without the radiation. Despite the powerful energy source, the ray takes five minutes to fully charge. Unlike the [[precision laser|Orbital Precision Laser]], it lacks the entity targeting option that would let it shoot down missiles or hit fast-moving targets.<br><br>* '§efire§r' will fire the laser at the current target position, assuming the ray has finished charging.<br>* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the death ray is ready to fire.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The orbital death ray is a powerful nuclear-powered orbital weapon firing a laser that deals as much damage as a high-yield mini nuke, but without the radiation. Despite the powerful energy source, the ray takes five minutes to fully charge. Unlike the [[precision laser|Orbital Precision Laser]], it lacks the entity targeting option that would let it shoot down missiles or hit fast-moving targets.<br><br>* '§efire§r' will fire the laser at the current target position, assuming the ray has finished charging.<br>* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the death ray is ready to fire.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Орбитальный луч Смерти — это мощное орбитальное оружие на ядерной энергии, стреляющее лазером, который наносит столько же урона, сколько ядерная мини-бомба высокой мощности, но без радиации. Несмотря на мощный источник энергии, лучу требуется пять минут для полной зарядки. В отличие от [[прецизионного лазера|Orbital Precision Laser]], у него нет функции наведения на сущности, которая позволяла бы сбивать ракеты или поражать быстродвижущиеся цели.<br><br>* «§efire§r» выстрелит лазером по текущей целевой позиции, если луч завершил зарядку.<br>* «§ecanfire§r» запишет «TRUE» или «FALSE» в RX в зависимости от того, истекла ли перезарядка и готов ли луч смерти к выстрелу.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 5],
"trigger": [["hbm:item.satellite", 1, 5]],
"title": {
"en_US": "Orbital Precision Laser"
"en_US": "Orbital Precision Laser",
"ru_RU": "Орбитальный прецизионный лазер"
},
"content": {
"en_US": "The orbital precision laser is a low-power weapon that harvests sunlight to charge up a small laser beam. The beam only takes five seconds to charge up, and deals marginally more block damage than TNT. The direct hit damage for struck entities is however much higher. When combined with the targeting data of a [[radar satellite|Radar Satellite]], it can potentially also shoot down missiles.<br><br>* '§efire§r' will fire the laser at the current target position, assuming the laser has finished charging. If the satellite has been supplied with entity target data, it will use the position of that entitiy instead, assuming it its within 1,000 blocks of the target position. After one shot, the entity targeting data is used up and the satellite's target position will be used again.<br>* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the laser is ready to fire.<br>* '§esetentitytarget §eid§r' supplies an entity ID for precise targeting, which is used up after one shot. The ID can be obtained from a radar satellite.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The orbital precision laser is a low-power weapon that harvests sunlight to charge up a small laser beam. The beam only takes five seconds to charge up, and deals marginally more block damage than TNT. The direct hit damage for struck entities is however much higher. When combined with the targeting data of a [[radar satellite|Radar Satellite]], it can potentially also shoot down missiles.<br><br>* '§efire§r' will fire the laser at the current target position, assuming the laser has finished charging. If the satellite has been supplied with entity target data, it will use the position of that entitiy instead, assuming it its within 1,000 blocks of the target position. After one shot, the entity targeting data is used up and the satellite's target position will be used again.<br>* '§ecanfire§r' will write either 'TRUE' or 'FALSE' to RX depending on whether the cooldown has elapsed and the laser is ready to fire.<br>* '§esetentitytarget §eid§r' supplies an entity ID for precise targeting, which is used up after one shot. The ID can be obtained from a radar satellite.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Орбитальный прецизионный лазер — это оружие малой мощности, которое собирает солнечный свет для зарядки небольшого лазерного луча. Лучу требуется всего пять секунд для зарядки, и он наносит лишь немного больше урона блокам, чем ТНТ. Однако урон при прямом попадании по сущностям значительно выше. В сочетании с данными целеуказания от [[радиолокационного спутника|Radar Satellite]] он также потенциально может сбивать ракеты.<br><br>* «§efire§r» выстрелит лазером по текущей целевой позиции, если лазер завершил зарядку. Если на спутник были переданы данные цели сущности, он будет использовать позицию этой сущности, если она находится в пределах 1000 блоков от целевой позиции. После одного выстрела данные целеуказания сущности расходуются, и снова используется целевая позиция спутника.<br>* «§ecanfire§r» запишет «TRUE» или «FALSE» в RX в зависимости от того, истекла ли перезарядка и готов ли лазер к выстрелу.<br>* «§esetentitytarget §eid§r» передает ID сущности для точного наведения, который расходуется после одного выстрела. ID можно получить с радиолокационного спутника.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 2],
"trigger": [["hbm:item.satellite", 1, 2]],
"title": {
"en_US": "Radar Satellite"
"en_US": "Radar Satellite",
"ru_RU": "Радиолокационный спутник"
},
"content": {
"en_US": "The radar satellite can detect all radar-detectable entities like players and missiles in a 1,000 block radius around its target position. It can compile, filter, and provide a list of detected objects, along with their type and exact position.<br><br>* '§esurvey§r' scans the area and saves the results to a base list and a filtered list. These two lists are now the same, and stored within the satellite.<br>* '§efilter §ename§r' will overwrite the filtered list with a new list, containing only entries from the original list that match that name filter. Since the original list is retained, the filter operation can be run multiple times for multiple types without needing a survey operation.<br>* '§ecount§r' writes the amount of entries on the filterd list to RX.<br>* '§egettargetid §eindex§r' retrieves the unique entity ID from that entry on the list. This ID can be used for precise entity targeting by other satellites.<br>* '§egetposition §eindex§r' retrieves the exact x/y/z position of the specified entry. The coordinates are separated by semicolons.<br>* '§egetname §eindex§r' retrieves the class name of that entry, this name is what's used for filtering.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The radar satellite can detect all radar-detectable entities like players and missiles in a 1,000 block radius around its target position. It can compile, filter, and provide a list of detected objects, along with their type and exact position.<br><br>* '§esurvey§r' scans the area and saves the results to a base list and a filtered list. These two lists are now the same, and stored within the satellite.<br>* '§efilter §ename§r' will overwrite the filtered list with a new list, containing only entries from the original list that match that name filter. Since the original list is retained, the filter operation can be run multiple times for multiple types without needing a survey operation.<br>* '§ecount§r' writes the amount of entries on the filterd list to RX.<br>* '§egettargetid §eindex§r' retrieves the unique entity ID from that entry on the list. This ID can be used for precise entity targeting by other satellites.<br>* '§egetposition §eindex§r' retrieves the exact x/y/z position of the specified entry. The coordinates are separated by semicolons.<br>* '§egetname §eindex§r' retrieves the class name of that entry, this name is what's used for filtering.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Радиолокационный спутник может обнаруживать все видимые для радара сущности, такие как игроки и ракеты, в радиусе 1000 блоков вокруг своей цели. Он может составлять, фильтровать и предоставлять список обнаруженных объектов вместе с их типом и точными координатами.<br><br>* '§esurvey§r' сканирует область и сохраняет результаты в базовый и отфильтрованный списки. На данный момент оба списка одинаковы и хранятся внутри спутника.<br>* '§efilter §ename§r' перезаписывает отфильтрованный список новым, содержащим только те записи из оригинального списка, которые соответствуют указанному фильтру имён. Поскольку оригинальный список сохраняется, операцию фильтрации можно выполнять несколько раз для разных типов без необходимости повторного сканирования.<br>* '§ecount§r' записывает количество записей в отфильтрованном списке в RX.<br>* '§egettargetid §eindex§r' получает уникальный ID сущности из указанной записи списка. Этот ID может использоваться другими спутниками для точного наведения на цель.<br>* '§egetposition §eindex§r' получает точные X/Y/Z координаты указанной записи. Координаты разделяются точкой с запятой.<br>* '§egetname §eindex§r' получает имя класса этой записи — именно это имя используется для фильтрации.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 10],
"trigger": [["hbm:item.satellite", 1, 10]],
"title": {
"en_US": "Narrowband Emission Scanning Satellite"
"en_US": "Narrowband Emission Scanning Satellite",
"ru_RU": "Спутник-сканер узкополосного излучения"
},
"content": {
"en_US": "The narrowband scanner can detect certain high-energy events with high precision in a small area. While the [[wideband detector|Wideband Radio Emission Detector Satellite]] can only give a rough estimation of where a small number of things are happening, the narrowband scanner can detect more types of emission and pinpint their location.<br><br>Types of emissions that can be detected include:<br>* '§6NEUTRON_EMISSION§r' from nuclear reactors<br>* '§6HIGH_ENERGY_PARTICLES§r' from fusion reacotrs and particle accelerators<br>* '§6RADAR_WAVES§r' from terrestrial radar<br>* '§6RADIO_WAVES§r' from satellite ground stations with active TX<br><br>Like with the wideband detector, these emissions are timed, certain events only happen once or in a time interval, so for best results, repeated scans over a timespan are recommended.<br><br>* '§esurvey§r' will perform a scan with a radius of 250m around the target location. The results are saved in an internal list.<br>* '§ecount§r' will write the amount of scan results to RX.<br>* '§egetinfo §eindex§r' will write the specified entry's emission type to RX.<br>* '§egetposition §eindex§r' will write the X/Z position of the specified event to RX. The coordinated are separated by semicolon.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The narrowband scanner can detect certain high-energy events with high precision in a small area. While the [[wideband detector|Wideband Radio Emission Detector Satellite]] can only give a rough estimation of where a small number of things are happening, the narrowband scanner can detect more types of emission and pinpint their location.<br><br>Types of emissions that can be detected include:<br>* '§6NEUTRON_EMISSION§r' from nuclear reactors<br>* '§6HIGH_ENERGY_PARTICLES§r' from fusion reacotrs and particle accelerators<br>* '§6RADAR_WAVES§r' from terrestrial radar<br>* '§6RADIO_WAVES§r' from satellite ground stations with active TX<br><br>Like with the wideband detector, these emissions are timed, certain events only happen once or in a time interval, so for best results, repeated scans over a timespan are recommended.<br><br>* '§esurvey§r' will perform a scan with a radius of 250m around the target location. The results are saved in an internal list.<br>* '§ecount§r' will write the amount of scan results to RX.<br>* '§egetinfo §eindex§r' will write the specified entry's emission type to RX.<br>* '§egetposition §eindex§r' will write the X/Z position of the specified event to RX. The coordinated are separated by semicolon.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Спутник-сканер узкополосного излучения может с высокой точностью обнаруживать определённые высокоэнергетические события на небольшой площади. В то время как [[широкополосный детектор|Wideband Radio Emission Detector Satellite]] даёт лишь приблизительную оценку происходящего, узкополосный сканер видит больше типов излучения и точно определяет их местоположение.<br><br>Типы излучений, которые могут быть обнаружены:<br>* '§6NEUTRON_EMISSION§r' от ядерных реакторов<br>* '§6HIGH_ENERGY_PARTICLES§r' от термоядерных реакторов и ускорителей частиц<br>* '§6RADAR_WAVES§r' от наземных радаров<br>* '§6RADIO_WAVES§r' от спутниковых наземных станций с активным TX<br><br>Как в случае с широкополосным детектором, эти излучения привязаны ко времени: некоторые события происходят лишь единожды или с определённым интервалом, поэтому для лучших результатов рекомендуется проводить повторные сканирования в течение некоторого времени.<br><br>'§esurvey§r' выполняет сканирование в радиусе 250м вокруг целевой точки. Результаты сохраняются во внутренний список.<br>* '§ecount§r' запишет количество результатов сканирования в RX.<br>'§egetinfo §eindex§r' запишет тип излучения указанной записи в RX.<br>* '§egetposition §eindex§r' запишет X/Z координаты указанного события в RX. Координаты разделяются точкой с запятой.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite"],
"trigger": [],
"title": {
"en_US": "Satellite"
"en_US": "Satellite",
"ru_RU": "Спутник"
},
"content": {
"en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.<br><br>Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].<br><br>By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.<br><br>By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.<br><br>The common target commands are as follows:<br>* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')<br>* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX<br>* '§egettargetx§r'<br>* '§egettargetz§r'<br><br>See also:<br>* [[Spy Satellite]]<br>* [[Depth Scanning Satellite]]<br>* [[Radar Satellite]]<br>* [[Asteroid Mining Ship]]<br>* [[Lunar Mining Ship]]<br>* [[Orbital Precision Laser]]<br>* [[Orbital Death Ray]]<br>* [[Xenium Resonator Satellite]]<br>* [[Relay Satellite]]<br>* [[Wideband Radio Emission Detector Satellite]]"
"en_US": "Satellites can be launched into earth orbit using a [[Soyuz]] rocket. Satellites communicate with items and blocks on earth using frequencies, so in order to actually use one, it's necessary to set a random frequency in the satellite ID manager, and then copying that ID to another item, for example a satellite chip.<br><br>Some satellites can perform minor tasks when linked with certain items, like the [[depth scanning satellite|Depth Scanning Satellite]] enabling the neutrino lens, or the [[xenium resonator satellite|Xenium Resonator Satellite]] connected to a satellite laser designator allowing for short range line of sight teleportation. Satellites however are the most powerful when paired with [[Redstone over Radio]] by linking them to a [[ground station|Satellite Ground Station]].<br><br>By using a [[RoR reader|Redstone-over-Radio Reader]], ground stations can receive the RX value, which is received from the connected satellite. Each satellite can only provide one RX value at a time, and the value persists until it changes. The contents of RX depend on what function the satellite has performed prior.<br><br>By using a ground station's TX command, commands can be relayed to the connected satellite. Most commands vary between satellite types, however all satellites have a ground target, i.e. the spot on the surface they are aiming at.<br><br>The common target commands are as follows:<br>* '§esettarget §ex §ez§r' (Example RoR: '§6tx!settarget §6200 §6300§r')<br>* '§egettarget§r' (Example RoR: '§6tx!gettarget§r'), writes the current target X and Z separated by semicolon to the ground station's RX<br>* '§egettargetx§r'<br>* '§egettargetz§r'<br><br>See also:<br>* [[Spy Satellite]]<br>* [[Depth Scanning Satellite]]<br>* [[Radar Satellite]]<br>* [[Asteroid Mining Ship]]<br>* [[Lunar Mining Ship]]<br>* [[Orbital Precision Laser]]<br>* [[Orbital Death Ray]]<br>* [[Xenium Resonator Satellite]]<br>* [[Relay Satellite]]<br>* [[Wideband Radio Emission Detector Satellite]]",
"ru_RU": "Спутники можно запускать на околоземную орбиту с помощью ракеты [[Союз|Soyuz]]. Спутники связываются с предметами и блоками на Земле с помощью частот, поэтому для использования спутника необходимо установить случайную частоту в менеджере ID спутников, а затем скопировать этот ID на другой предмет, например, на спутниковый чип.<br><br>Некоторые спутники могут выполнять небольшие задачи при связывании с определёнными предметами — например, [[спутник глубинного сканирования|Depth Scanning Satellite]]] активирует нейтринную линзу, а [[спутник с Зен-резонатором|Xenium Resonator Satellite]], подключённый к спутниковому лазерному целеуказателю, позволяет телепортироваться в пределах прямой видимости на небольшие расстояния. Однако спутники наиболее эффективны в связке с системой [[Редстоун-по-Радио|Redstone over Radio]], если подключить их к [[наземной станции|Satellite Ground Station]].<br><br>С помощью [[РпР считывателя|Redstone-over-Radio Reader]] наземные станции могут получать значение RX, поступающее с подключённого спутника. Каждый спутник может передавать только одно значение RX за раз, и оно сохраняется до тех пор, пока не изменится. Содержимое RX зависит от того, какую функцию спутник выполнил перед этим.<br><br>Используя команду TX на наземной станции, можно передавать команды подключённому спутнику. Большинство команд различаются в зависимости от типа спутника, однако у всех спутников есть наземная цель — то есть точка на поверхности, на которую они наведены.<br><br>Основные команды для управления целью:<br>* '§esettarget §ex §ez§r' (Пример RoR: '§6tx!settarget §6200 §6300§r')<br>* '§egettarget§r' (Пример РпР: '§6tx!gettarget§r') — записывает текущие X и Z цели через точку с запятой в RX наземной станции<br>* '§egettargetx§r'<br>* '§egettargetz§r'<br><br>См. также:<br>* [[Спутник-шпион|Spy Satellite]]<br>* [[Спутник глубинного сканирования|Depth Scanning Satellite]]<br>* [[Радиолокационный спутник|Radar Satellite]]<br>* [[Астероидный шахтёрский корабль|Asteroid Mining Ship]]<br>* [[Лунный шахтёрский корабль|Lunar Mining Ship]]<br>* [[Орбитальный прецизионный лазер|Orbital Precision Laser]]<br>* [[Орбитальный луч Смерти|Orbital Death Ray]]<br>* [[Cпутник с Зен-резонатором|Xenium Resonator Satellite]]<br>* [[Спутник-ретранслятор|Relay Satellite]]<br>* [[Спутник-детектор широкополосного радиоизлучения|Wideband Radio Emission Detector Satellite]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:tile.machine_satlink"],
"trigger": [["hbm:tile.machine_satlink"]],
"title": {
"en_US": "Satellite Ground Station"
"en_US": "Satellite Ground Station",
"ru_RU": "Спутниковая наземная станция"
},
"content": {
"en_US": "The satellite ground station is an advanced [[Redstone over Radio]] component that allows indirect connection of traditional RoR components and [[satellites|Satellite]]. It doesn't send or receive RoR signals directly, instead, it needs an external [[receiver|Redstone-over-Radio Controller]] or [[transmitter|Redstone-over-Radio Reader]] to interface with RoR.<br><br>The ground station can only connect to one satellite at a time. The frequency can be set either by using a configured satellite ID chip on the ground station, or via RoR command.<br><br>The two most important RoR functions the ground station has are RX and TX.<br><br>RX is a readable value that is relayed from the satellite. The contents of that value depend on the satellite, and is usually set in response to a command. For example, on the [[orbital precision laser|Orbital Precision Laser]], the function 'canfire' will set the RX value to either 'TRUE' or 'FALSE' depending on whether the laser is ready to fire.<br><br>TX is a function that allows commands to be relayed from the ground station to the satellite to control it or to request data. For example, the RoR command 'tx!settarget 200 300' will relay the command 'settarget 200 300' to the connected satellite. Do note that satellite commands do not use parameter separators like RoR commands do, since the satellite command is technically just one big RoR parameter.<br><br>In conjunction with the [[AUTOCAL]], the ground station becomes incredibly powerful, as it allows for automated targeting of satellites, data processing and more. For example, a [[radar satellite|Radar Satellite]] could survey the airspace for airborne missiles, relay that data to the AUTOCAL which then sends a signal to a precision laser which intercepts the missile."
"en_US": "The satellite ground station is an advanced [[Redstone over Radio]] component that allows indirect connection of traditional RoR components and [[satellites|Satellite]]. It doesn't send or receive RoR signals directly, instead, it needs an external [[receiver|Redstone-over-Radio Controller]] or [[transmitter|Redstone-over-Radio Reader]] to interface with RoR.<br><br>The ground station can only connect to one satellite at a time. The frequency can be set either by using a configured satellite ID chip on the ground station, or via RoR command.<br><br>The two most important RoR functions the ground station has are RX and TX.<br><br>RX is a readable value that is relayed from the satellite. The contents of that value depend on the satellite, and is usually set in response to a command. For example, on the [[orbital precision laser|Orbital Precision Laser]], the function 'canfire' will set the RX value to either 'TRUE' or 'FALSE' depending on whether the laser is ready to fire.<br><br>TX is a function that allows commands to be relayed from the ground station to the satellite to control it or to request data. For example, the RoR command 'tx!settarget 200 300' will relay the command 'settarget 200 300' to the connected satellite. Do note that satellite commands do not use parameter separators like RoR commands do, since the satellite command is technically just one big RoR parameter.<br><br>In conjunction with the [[AUTOCAL]], the ground station becomes incredibly powerful, as it allows for automated targeting of satellites, data processing and more. For example, a [[radar satellite|Radar Satellite]] could survey the airspace for airborne missiles, relay that data to the AUTOCAL which then sends a signal to a precision laser which intercepts the missile.",
"ru_RU": "Спутниковая наземная станция — это продвинутый компонент [[Редстоун-по-Радио|Redstone over Radio]], обеспечивающий косвенное соединение классических компонентов РпР и [[спутников|Satellite]]. Она не передаёт и не принимает сигналы РпР напрямую — вместо этого для взаимодействия с РпР ей требуется внешний [[приёмник|Redstone-over-Radio Controller]] или [[передатчик|Redstone-over-Radio Reader]]. Наземная станция может связываться только с одним спутником за раз.<br><br>Частота задаётся либо с использованием настроенного чипа идентификатора спутника на наземной станции, либо через команду РпР.<br><br>Две самые важные функции РпР, которыми обладает наземная станция, — это RX (приём) и TX (передача).<br><br>RX — это считываемое значение, которое транслируется со спутника. Содержимое этого значения зависит от спутника и обычно задаётся в ответ на команду. Например, у [[орбитальный прецизионный лазер|Orbital Precision Laser]] функция «canfire» устанавливает значение RX в «TRUE» или «FALSE» в зависимости от того, готов ли лазер к стрельбе.<br><br>TX — это функция, которая позволяет транслировать команды с наземной станции на спутник для управления им или запроса данных. Например, команда РпР 'tx!settarget 200 300' передаст спутнику команду 'settarget 200 300'. Обратите внимание, что команды спутника не используют разделители параметров, как это делают обычные команды РпР, поскольку команда спутника технически является лишь одним большим параметром РпР.<br><br>В сочетании с [[AUTOCAL|AUTOCAL]] наземная станция становится невероятно мощной, так как позволяет автоматизировать наведение спутников, обработку данных и многое другое. Например, [[радиолокационный спутник|Radar Satellite]] может сканировать воздушное пространство на наличие ракет, передавать эти данные на AUTOCAL, который затем отправляет сигнал на точный лазер для перехвата ракеты."
}
}

View File

@ -3,9 +3,10 @@
"icon": ["hbm:item.satellite", 1, 1],
"trigger": [["hbm:item.satellite", 1, 1]],
"title": {
"en_US": "Depth Scanning Satellite"
"en_US": "Depth Scanning Satellite",
"ru_RU": "Спутник глубинного сканирования"
},
"content": {
"en_US": "The depth scanning satellite is required for the neutrino lens to work. It does not yet have any special interactions with the ground station.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
}
"en_US": "The depth scanning satellite is required for the neutrino lens to work. It does not yet have any special interactions with the ground station.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Спутник глубинного сканирования необходим для работы нейтринной линзы. На данный момент он не имеет никаких особых взаимодействий с наземной станцией.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 0],
"trigger": [["hbm:item.satellite", 1, 0]],
"title": {
"en_US": "Spy Satellite"
"en_US": "Spy Satellite",
"ru_RU": "Спутник-шпион"
},
"content": {
"en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.<br><br>* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.<br>* '$egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.<br>* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The spy satellite allows remote viewing of earth's surface. Due to RoR pixel displays not existing as of now, surface mapping functionality does not yet work. However, they can be used in detecting loaded chunks and spotting players in a small radius.<br><br>* '§etargetloaded§r' writes 'TRUE' or 'FALSE' to RX depending on if the chunk that the satellite is pointed at is loaded or not.<br>* '§egetsmog$r' writes the numeric value (rounded up) of the current target position's soot pollution to RX.<br>* '§espotplayers§r' detects surface players in a 250 block radius and writes all names separated by semicolon to RX.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Спутник-шпион позволяет удаленно вести наблюдение за поверхностью Земли. Из-за отсутствия на данный момент пиксельных дисплеев РпР функция картографирования поверхности пока не работает. Однако их можно использовать для обнаружения прогруженных чанков и выслеживания игроков в небольшом радиусе.<br><br>* «§etargetloaded§r» записывает «TRUE» или «FALSE» в RX в зависимости от того, прогружен ли чанк, на который наведен спутник.<br>* «§egetsmog$r» записывает числовое значение (округленное в большую сторону) загрязнения сажей в текущей целевой позиции в RX.<br>* «§espotplayers§r» обнаруживает игроков на поверхности в радиусе 250 блоков и записывает все имена через точку с запятой в RX.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

View File

@ -3,9 +3,11 @@
"icon": ["hbm:item.satellite", 1, 7],
"trigger": [["hbm:item.satellite", 1, 7]],
"title": {
"en_US": "Xenium Resonator Satellite"
"en_US": "Xenium Resonator Satellite",
"ru_RU": "Спутник с Зен-резонатором"
},
"content": {
"en_US": "The xenium resonator allows teleportation within the same dimension. It can be controlled either with a satellite designator or the satellite laser designator. When using the satellite designator, the Y value can be omitted, which will default it to surface level.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]"
"en_US": "The xenium resonator allows teleportation within the same dimension. It can be controlled either with a satellite designator or the satellite laser designator. When using the satellite designator, the Y value can be omitted, which will default it to surface level.<br><br>See also:<br>* [[Satellite]]<br>* [[Satellite Ground Station]]",
"ru_RU": "Спутник с Зен-резонатором позволяет телепортироваться в пределах одного и того же измерения. Им можно управлять как с помощью спутникового целеуказателя, так и с помощью спутникового лазерного целеуказателя. При использовании спутникового целеуказателя значение Y можно опустить, по умолчанию оно будет установлено на уровень поверхности.<br><br>См. также:<br>* [[Спутник|Satellite]]<br>* [[Спутниковая наземная станция|Satellite Ground Station]]"
}
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.3 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

After

Width:  |  Height:  |  Size: 4.9 KiB