Merge branch 'HbmMods:master' into rulang

This commit is contained in:
Raaaaaaaaaay 2026-04-20 16:45:43 +03:00 committed by GitHub
commit 9fa747a404
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
14 changed files with 273 additions and 71 deletions

View File

@ -11,4 +11,8 @@
## Changed
* RoR readers can now read neutron flux from fuel channels and the fill state of boilers and heat exchangers
* Canned recursion can now be crafted from canned recursion
* Soldering recipes are now prioritized over anvil recipes in the NEI listing
* Soldering recipes are now prioritized over anvil recipes in the NEI listing
* Paintable blocks now have tooltips explaining all the tools that can be used
## Fixed
* Fixed barrel connectors appearing between barrels even though they have different fluid types

View File

@ -3123,15 +3123,15 @@ public class ModBlocks {
GameRegistry.registerBlock(pribris_radiating, pribris_radiating.getUnlocalizedName());
GameRegistry.registerBlock(pribris_digamma, pribris_digamma.getUnlocalizedName());
GameRegistry.registerBlock(red_cable, red_cable.getUnlocalizedName());
GameRegistry.registerBlock(red_cable_classic, red_cable_classic.getUnlocalizedName());
GameRegistry.registerBlock(red_cable_paintable, red_cable_paintable.getUnlocalizedName());
register(red_cable);
register(red_cable_classic);
register(red_cable_paintable);
register(red_cable_gauge);
register(red_cable_box);
GameRegistry.registerBlock(red_wire_coated, red_wire_coated.getUnlocalizedName());
register(red_wire_coated);
register(red_connector);
register(red_connector_super);
GameRegistry.registerBlock(red_pylon, ItemBlockBase.class, red_pylon.getUnlocalizedName());
register(red_pylon);
register(red_pylon_medium_wood);
register(red_pylon_medium_wood_transformer);
register(red_pylon_medium_steel);

View File

@ -49,8 +49,8 @@ public class BlockFluidBarrel extends BlockContainer implements ITooltipProvider
public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) {
return new TileEntityBarrel(capacity);
}
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
public static int renderID = RenderingRegistry.getNextAvailableRenderId();
@Override
public int getRenderType(){

View File

@ -1,7 +1,11 @@
package com.hbm.blocks.network;
import api.hbm.block.IToolable;
import java.util.List;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.interfaces.ICopiable;
import com.hbm.lib.RefStrings;
import com.hbm.render.block.RenderBlockMultipass;
@ -25,7 +29,7 @@ import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
public class BlockCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass {
public class BlockCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlay;
@ -202,4 +206,9 @@ public class BlockCablePaintable extends BlockContainer implements IToolable, IB
}
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -2,7 +2,10 @@ package com.hbm.blocks.network;
import api.hbm.block.IToolable;
import java.util.List;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.interfaces.ICopiable;
import com.hbm.lib.RefStrings;
import com.hbm.render.block.RenderBlockMultipass;
@ -36,7 +39,7 @@ import li.cil.oc.api.internal.Colored;
import com.hbm.handler.CompatHandler.OCColors;
import net.minecraftforge.oredict.OreDictionary;
public class BlockOpenComputersCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass {
public class BlockOpenComputersCablePaintable extends BlockContainer implements IToolable, IBlockMultiPass, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlay;
@SideOnly(Side.CLIENT) protected IIcon overlayColor;
@ -349,4 +352,9 @@ public class BlockOpenComputersCablePaintable extends BlockContainer implements
return color.getColor();
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -4,6 +4,7 @@ import api.hbm.block.IToolable;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.interfaces.ICopiable;
import com.hbm.lib.RefStrings;
import com.hbm.render.block.RenderBlockMultipass;
@ -28,7 +29,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import java.util.ArrayList;
import java.util.List;
public class FluidDuctPaintable extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay {
public class FluidDuctPaintable extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlay;
@SideOnly(Side.CLIENT) protected IIcon overlayColor;
@ -224,4 +225,9 @@ public class FluidDuctPaintable extends FluidDuctBase implements IToolable, IBlo
}
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -4,6 +4,7 @@ import api.hbm.block.IToolable;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ILookOverlay;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.interfaces.ICopiable;
import com.hbm.inventory.fluid.Fluids;
import com.hbm.lib.RefStrings;
@ -32,7 +33,7 @@ import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre;
import java.util.ArrayList;
import java.util.List;
public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay {
public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements IToolable, IBlockMultiPass, ILookOverlay, ITooltipProvider {
@SideOnly(Side.CLIENT) protected IIcon overlay;
@ -212,4 +213,9 @@ public class FluidDuctPaintableBlockExhaust extends FluidDuctBase implements ITo
}
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -2,7 +2,10 @@ package com.hbm.blocks.network;
import api.hbm.block.IToolable;
import java.util.List;
import com.hbm.blocks.IBlockMultiPass;
import com.hbm.blocks.ITooltipProvider;
import com.hbm.interfaces.ICopiable;
import com.hbm.lib.RefStrings;
import com.hbm.main.MainRegistry;
@ -31,7 +34,7 @@ import net.minecraft.world.World;
import net.minecraft.world.WorldServer;
import net.minecraftforge.common.util.ForgeDirection;
public class PneumoTubePaintableBlock extends BlockContainer implements IToolable, IBlockMultiPass {
public class PneumoTubePaintableBlock extends BlockContainer implements IToolable, IBlockMultiPass, ITooltipProvider {
@SideOnly(Side.CLIENT) public IIcon overlay;
@SideOnly(Side.CLIENT) public IIcon overlayIn;
@ -248,4 +251,9 @@ public class PneumoTubePaintableBlock extends BlockContainer implements IToolabl
}
}
}
@Override
public void addInformation(ItemStack stack, EntityPlayer player, List list, boolean ext) {
this.addStandardInfo(stack, player, list, ext);
}
}

View File

@ -23,70 +23,65 @@ public class RenderFluidBarrel extends TileEntitySpecialRenderer {
GL11.glPushMatrix();
GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5);
GL11.glEnable(GL11.GL_LIGHTING);
if(te instanceof TileEntityBarrel) {
TileEntityBarrel barrel = (TileEntityBarrel)te;
TileEntityBarrel barrel = (TileEntityBarrel) te;
FluidType type = barrel.tank.getTankType();
if(type != Fluids.NONE) {
GL11.glPushMatrix();
int poison = type.poison;
int flammability = type.flammability;
int reactivity = type.reactivity;
EnumSymbol symbol = type.symbol;
int cx = te.xCoord;
int cy = te.yCoord;
int cz = te.zCoord;
if(te.getBlockType() == ModBlocks.barrel_plastic)
bindTexture(ResourceManager.barrel_plastic_tex);
else if(te.getBlockType() == ModBlocks.barrel_steel)
bindTexture(ResourceManager.barrel_steel_tex);
else if(te.getBlockType() == ModBlocks.barrel_tcalloy)
bindTexture(ResourceManager.barrel_tcalloy_tex);
else if(te.getBlockType() == ModBlocks.barrel_antimatter)
bindTexture(ResourceManager.barrel_antimatter_tex);
if(Library.canConnectFluid(te.getWorldObj(), cx + 1, cy, cz, Library.POS_X, type)) {
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
GL11.glRotatef(0F, 0F, 0F, 0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
}
if(Library.canConnectFluid(te.getWorldObj(), cx - 1, cy, cz, Library.NEG_X, type)) {
GL11.glRotatef(180, 0F, 1F, 0F);
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
GL11.glRotatef(-180, 0F, 1F, 0F);
}
int cx = te.xCoord;
int cy = te.yCoord;
int cz = te.zCoord;
if(Library.canConnectFluid(te.getWorldObj(), cx, cy, cz - 1, Library.NEG_Z, type)) {
GL11.glRotatef(90, 0F, 1F, 0F);
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
GL11.glRotatef(-90, 0F, 1F, 0F);
}
if(te.getBlockType() == ModBlocks.barrel_plastic) bindTexture(ResourceManager.barrel_plastic_tex);
else if(te.getBlockType() == ModBlocks.barrel_steel) bindTexture(ResourceManager.barrel_steel_tex);
else if(te.getBlockType() == ModBlocks.barrel_tcalloy) bindTexture(ResourceManager.barrel_tcalloy_tex);
else if(te.getBlockType() == ModBlocks.barrel_antimatter) bindTexture(ResourceManager.barrel_antimatter_tex);
if(Library.canConnectFluid(te.getWorldObj(), cx + 1, cy, cz, Library.POS_X, type)) {
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
GL11.glRotatef(0F, 0F, 0F, 0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
}
if(Library.canConnectFluid(te.getWorldObj(), cx - 1, cy, cz, Library.NEG_X, type)) {
GL11.glRotatef(180, 0F, 1F, 0F);
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
GL11.glRotatef(-180, 0F, 1F, 0F);
}
if(Library.canConnectFluid(te.getWorldObj(), cx, cy, cz - 1, Library.NEG_Z, type)) {
GL11.glRotatef(90, 0F, 1F, 0F);
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
GL11.glRotatef(-90, 0F, 1F, 0F);
}
if(Library.canConnectFluid(te.getWorldObj(), cx, cy, cz + 1, Library.POS_Z, type)) {
GL11.glRotatef(-90, 0F, 1F, 0F);
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
GL11.glRotatef(90, 0F, 1F, 0F);
}
if(Library.canConnectFluid(te.getWorldObj(), cx, cy, cz + 1, Library.POS_Z, type)) {
GL11.glRotatef(-90, 0F, 1F, 0F);
GL11.glTranslatef(0.0F, -0.5F, 0.0F);
ResourceManager.barrel.renderPart("Connector");
GL11.glTranslatef(0.0F, 0.5F, 0.0F);
GL11.glRotatef(90, 0F, 1F, 0F);
}
RenderHelper.disableStandardItemLighting();
for(int j = 0; j < 4; j++) {
GL11.glPushMatrix();
GL11.glTranslated(0.4, 0.30, -0.24);
GL11.glScalef(1.0F, 0.25F, 0.25F);
@ -94,14 +89,13 @@ public class RenderFluidBarrel extends TileEntitySpecialRenderer {
GL11.glPopMatrix();
GL11.glRotatef(90, 0, 1, 0);
}
GL11.glPopMatrix();
RenderHelper.enableStandardItemLighting();
}
}
GL11.glPopMatrix();
}

View File

@ -1,5 +1,6 @@
package com.hbm.tileentity.machine.rbmk;
import com.hbm.handler.CompatHandler;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GUIScreenRBMKIndicator;
import com.hbm.tileentity.IGUIProvider;
@ -8,14 +9,20 @@ import com.hbm.tileentity.network.RTTYSystem;
import com.hbm.tileentity.network.RTTYSystem.RTTYChannel;
import com.hbm.util.BufferUtil;
import cpw.mods.fml.common.Optional;
import io.netty.buffer.ByteBuf;
import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Callback;
import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class TileEntityRBMKIndicator extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver {
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public class TileEntityRBMKIndicator extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent {
/* __________
* / /|
@ -195,4 +202,81 @@ public class TileEntityRBMKIndicator extends TileEntityLoadedBase implements IGU
indicator.max = data.hasKey("max" + i) ? data.getInteger("max" + i) : Integer.MAX_VALUE;
}
}
// OpenComputers methods
@Override
@Optional.Method(modid = "OpenComputers")
public String getComponentName() {
return "rbmk_indicator";
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getIndicatorInfo(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {null, "Invalid index (1-6)"};
java.util.LinkedHashMap<String, Object> map = new java.util.LinkedHashMap<>();
map.put("active", indicators[idx].active);
map.put("polling", indicators[idx].polling);
map.put("light", indicators[idx].light);
map.put("color", indicators[idx].color);
map.put("label", indicators[idx].label);
map.put("channel", indicators[idx].rtty);
map.put("min", indicators[idx].min);
map.put("max", indicators[idx].max);
return new Object[] {map};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorActive(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].active = args.checkBoolean(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorLight(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].light = args.checkBoolean(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorColor(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].color = MathHelper.clamp_int(args.checkInteger(1), 0, 0xffffff);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorLabel(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
indicators[idx].label = args.checkString(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setIndicatorBounds(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 6) return new Object[] {false, "Invalid index (1-6)"};
long min = (long) args.checkInteger(1);
long max = (long) args.checkInteger(2);
indicators[idx].min = min;
indicators[idx].max = max;
markDirty();
return new Object[] {true};
}
}

View File

@ -1,5 +1,6 @@
package com.hbm.tileentity.machine.rbmk;
import com.hbm.handler.CompatHandler;
import com.hbm.handler.threading.PacketThreading;
import com.hbm.interfaces.IControlReceiver;
import com.hbm.inventory.gui.GUIScreenRBMKLever;
@ -10,15 +11,21 @@ import com.hbm.tileentity.TileEntityLoadedBase;
import com.hbm.tileentity.network.RTTYSystem;
import com.hbm.util.BufferUtil;
import cpw.mods.fml.common.Optional;
import cpw.mods.fml.common.network.NetworkRegistry.TargetPoint;
import io.netty.buffer.ByteBuf;
import li.cil.oc.api.machine.Arguments;
import li.cil.oc.api.machine.Callback;
import li.cil.oc.api.machine.Context;
import li.cil.oc.api.network.SimpleComponent;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver {
@Optional.InterfaceList({@Optional.Interface(iface = "li.cil.oc.api.network.SimpleComponent", modid = "OpenComputers")})
public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIProvider, IControlReceiver, SimpleComponent, CompatHandler.OCComponent {
/* __________
* / /|
@ -230,4 +237,48 @@ public class TileEntityRBMKLever extends TileEntityLoadedBase implements IGUIPro
this.markDirty();
}
// OpenComputers methods
@Override
@Optional.Method(modid = "OpenComputers")
public String getComponentName() {
return "rbmk_lever";
}
@Callback(direct = true)
@Optional.Method(modid = "OpenComputers")
public Object[] getLeverInfo(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 2) return new Object[] {null, "Invalid index (1-2)"};
java.util.LinkedHashMap<String, Object> map = new java.util.LinkedHashMap<>();
map.put("active", levers[idx].active);
map.put("polling", levers[idx].polling);
map.put("state", levers[idx].flipProgress >= 1.0);
map.put("progress", levers[idx].flipProgress);
map.put("label", levers[idx].label);
map.put("channel", levers[idx].rtty);
map.put("commandOn", levers[idx].commandOn);
map.put("commandOff", levers[idx].commandOff);
return new Object[] {map};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setLeverActive(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 2) return new Object[] {false, "Invalid index (1-2)"};
levers[idx].active = args.checkBoolean(1);
markDirty();
return new Object[] {true};
}
@Callback(direct = true, limit = 2)
@Optional.Method(modid = "OpenComputers")
public Object[] setLeverLabel(Context context, Arguments args) {
int idx = args.checkInteger(0) - 1;
if(idx < 0 || idx >= 2) return new Object[] {false, "Invalid index (1-2)"};
levers[idx].label = args.checkString(1);
markDirty();
return new Object[] {true};
}
}

View File

@ -291,7 +291,10 @@ public class TileEntityBarrel extends TileEntityMachineBase implements SimpleCom
tank.writeToNBT(nbt, "tank");
}
@Override public boolean canConnect(FluidType fluid, ForgeDirection dir) { return true; }
@Override
public boolean canConnect(FluidType fluid, ForgeDirection dir) {
return fluid == tank.getTankType();
}
@Override
public FluidTank[] getSendingTanks() {

View File

@ -5559,10 +5559,12 @@ tile.fluid_duct.name=Universal Fluid Duct (Deprecated)
tile.fluid_duct_box.name=Universal Fluid Duct (Boxduct)
tile.fluid_duct_exhaust.name=Exhaust Pipe
tile.fluid_duct_paintable_block_exhaust.name=Paintable Coated Exhaust Pipe
tile.fluid_duct_paintable_block_exhaust.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool
tile.fluid_duct_gauge.name=Flow Gauge Pipe
tile.fluid_duct_gauge.desc=Pipe that displays how much fluid$moves within the network per tick.$Split networks connected by barrels$or tanks are considered as one shared network.
tile.fluid_duct_neo.name=Universal Fluid Duct
tile.fluid_duct_paintable.name=Paintable Coated Universal Fluid Duct
tile.fluid_duct_paintable.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool
tile.fluid_duct_solid.name=Coated Universal Fluid Duct (Deprecated)
tile.fluid_pump.name=Flow Control Pump
tile.fluid_counter_valve.name=Fluid Valve with Counter
@ -5956,6 +5958,7 @@ tile.nuke_prototype.name=The Prototype
tile.nuke_solinium.name=The Blue Rinse
tile.nuke_tsar.name=Tsar Bomba
tile.oc_cable_paintable.name=Paintable Network Cable
tile.oc_cable_paintable.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool
tile.oil_duct.name=Oil Pipe
tile.oil_duct_solid.name=Coated Oil Pipe
tile.oil_pipe.name=Crude Oil Extraction Pipe
@ -6087,6 +6090,7 @@ tile.plushie.name=%s Plushie
tile.pneumatic_tube.name=Pneumatic Tube
tile.pneumatic_tube.desc=Sends items using compressed air.$Right-click with screwdriver to toggle an input.$Shift right-click with screwdriver to toggle an output.$Inputs can be configured, and connected to compressed air.$Sends up to one stack, four times per second.
tile.pneumatic_tube_paintable.name=Paintable Pneumatic Tube
tile.pneumatic_tube_paintable.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool
tile.pole_satellite_receiver.name=Satellite Dish
tile.pole_top.name=Antenna Top
tile.press_preheater.name=Burner Press Preheater
@ -6262,6 +6266,7 @@ tile.red_cable_classic.name=Red Copper Cable (Classic)
tile.red_cable_gauge.name=Power Gauge
tile.red_cable_gauge.desc=Cable that displays how much power$moves within the network per tick.$Split networks connected by energy$storage blocks are considered as one shared network.
tile.red_cable_paintable.name=Paintable Red Copper Cable
tile.red_cable_paintable.desc=Right-click with a solid block to set a paint$Paint can be cleared with a screwdriver$Port texture can be disabled with a defuser$Paints can be copied with the copy tool
tile.red_connector.name=Electricity Connector
tile.red_connector_super.name=Heavy Duty Electricity Connector
tile.red_pylon.name=Electricity Pylon

View File

@ -0,0 +1,24 @@
# What is QMAW, anyway?
QMAW stands for *Quick Manual And Wiki*. While the word "wiki" might give the impression that it should be a complete description of certain topics, that is not actually the case. Navigation is handled mostly over hyperlinks in the text, much like a wiki, but the actual content adheres the "quick manual" part of the name.
# So how should a QMAW page be written?
Concise and informative. It may be enticing to simply write down everything you can think of about a certain topic, but that's not exactly useful. QMAW is primarily a simple to digest guide for starters, and as such, topics should only be described as deeply as they have to be.
A simple way to explain this concept is as such: Pretend you are a new player, you don't know a whole lot about the mod in general, just the basics that got you as far into progression as you are, and you now for the first time encounter a topic: What information about that topic would be the most useful right now? A player who is reading about crude oil will most likely be in the stage of using crude oil for the first time. That will include drilling for oil, the most important products derived from oil which are required to progress from that step, and a few other oil related things one might expect in the near future, assuming they are important enough to mention. That is it. One could explain every single oil processing step, every recipe, and every machine involved, but that is not exactly useful for people who are only going to be working with a very small set of those machines in the coming hours.
# What shouldn't a QMAW page contain?
* Things that simply aren't relevant to players who are the most likely to read the given page
* Lengthy explanations of recipes (to some extent that can be useful, for example pointing towards the next progression material derived from the topic in question), since NEI already covers those
* Very fine details on how things are used (ideally, by understanding the subject, people will figure that out themselves), although general instructions on difficult topics are sometimes needed (for example, even with the particle accelerator pages, some people may not manage to build a functioning accelerator, which is why a step-by-step construction guide was included)
# Conclusion
A lot of people have short attention spans, so don't write an entire novel that no one's going to read. Keep the info short, but include everything that is *actually* relevant at the point when the player is expected to look that page up. And most importantly, double check if your info is correct - no information is better than wrong information.
_________ ___ ___ _____ ___ ___
//////// / // /_ _// / ////_/ // / // /
// / // / //// ///// / // / // / // / // /
// / // / // ///_/// / // / // / // / // /
// / // / // / // / //////// / // /___ // /
// ///// / // / // / // / // / // /// /// /
// / //_/_ // / // / // / // / ////_///// /
//////////_/ //_/ //_/ //_/ //_/ //_/ //_/