Merge branch 'MC1.11' into marx

This commit is contained in:
malte0811 2017-06-23 17:33:13 +02:00
commit 5f8ef84e0f
12 changed files with 160 additions and 133 deletions

View file

@ -1,5 +1,5 @@
def mainVersion = "1.4"
def buildNumber = "9"
def mainVersion = "1.5"
def buildNumber = "11"
/*
* This file is part of Industrial Wires.

View file

@ -1,6 +1,20 @@
#####Version 1.5-11
- Updated to Minecraft 1.11.2
- Added Panel Meters to monitor a redstone signal with reasonable accuracy
- Multiple components on the same panel network can modify the same signal now without causing undefined behavior
- Lock Switches no longer break the model cache
#####Version 1.4-10
- added lock switches for control panels (backport from 1.11)
- Can only be turned on by someone with the correct key to prevent unauthorized access
- up to 10 keys can be added to a keyring to reduce inventory spam
- IC2 items can be added to the appropriate sections of the engineers toolbox (backport from 1.11)
- Components (lighted button, indicator light, etc.) on panels now actually light up (backport from 1.11)
- Fixed power loss when no energy is being transmitted
#####Version 1.4-9
- added Control Panels
- They can be used to control and monitor a lot of redstone signals from a few blocks
#####Version 1.3-8
- the converters and the motor don't have missing textures any more when using Chisel
#####Version 1.3-7

View file

@ -30,6 +30,7 @@ import malte0811.industrialWires.blocks.IBlockBoundsIW;
import malte0811.industrialWires.blocks.INetGUI;
import malte0811.industrialWires.controlpanel.PanelComponent;
import malte0811.industrialWires.controlpanel.PanelUtils;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.player.EntityPlayer;
@ -44,8 +45,8 @@ import net.minecraft.world.World;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.lang.ref.WeakReference;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implements IRedstoneConnector, ITickable, INetGUI, IEBlockInterfaces.IDirectionalTile, IBlockBoundsIW {
@ -109,13 +110,55 @@ public class TileEntityRSPanelConn extends TileEntityImmersiveConnectable implem
aabb = null;
}
private BiConsumer<Integer, Byte> rsOut = (channel, value) -> {
if (value != out[channel]) {
private final Map<PCWrapper, byte[]> outputs = new HashMap<>();
private TriConsumer<Integer, Byte, PanelComponent> rsOut = (channel, value, pc) -> {
PCWrapper wrapper = new PCWrapper(pc);
if (!outputs.containsKey(wrapper)) {
outputs.put(wrapper, new byte[16]);
}
if (outputs.get(wrapper)[channel] != value) {
outputs.get(wrapper)[channel] = value;
byte max = 0;
Iterator<Map.Entry<PCWrapper, byte[]>> it = outputs.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<PCWrapper, byte[]> curr = it.next();
if (curr.getKey().pc.get() == null) {
it.remove();
continue;
}
if (curr.getValue()[channel] > max) {
max = curr.getValue()[channel];
}
}
dirty = true;
out[channel] = value;
out[channel] = max;
}
};
private class PCWrapper {
@Nonnull
private final WeakReference<PanelComponent> pc;
public PCWrapper(@Nonnull PanelComponent pc) {
this.pc = new WeakReference<>(pc);
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
PCWrapper pcWrapper = (PCWrapper) o;
return pcWrapper.pc.get() == pc.get();
}
@Override
public int hashCode() {
return System.identityHashCode(pc.get());
}
}
public void registerPanel(TileEntityPanel panel) {
PropertyComponents.PanelRenderProperties p = panel.getComponents();
for (PanelComponent pc : p) {

View file

@ -22,6 +22,7 @@ import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
import malte0811.industrialWires.client.RawQuad;
import malte0811.industrialWires.client.gui.GuiPanelCreator;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.nbt.NBTBase;
@ -34,10 +35,7 @@ import org.lwjgl.util.vector.Vector3f;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
public class LightedButton extends PanelComponent implements IConfigurableComponent {
public int color = 0xFF0000;
@ -46,7 +44,6 @@ public class LightedButton extends PanelComponent implements IConfigurableCompon
public int rsOutputId;
public int rsOutputChannel;
private int ticksTillOff;
private Set<BiConsumer<Integer, Byte>> rsOut = new HashSet<>();
public LightedButton() {
super("lighted_button");
@ -141,17 +138,10 @@ public class LightedButton extends PanelComponent implements IConfigurableCompon
}
@Override
public void registerRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void registerRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
if (id == rsOutputId) {
rsOut.add(out);
out.accept(rsOutputChannel, (byte) (active ? 15 : 0));
}
}
@Override
public void unregisterRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
if (id == rsOutputId) {
rsOut.remove(out);
super.registerRSOutput(id, out);
out.accept(rsOutputChannel, (byte) (active ? 15 : 0), this);
}
}
@ -174,9 +164,7 @@ public class LightedButton extends PanelComponent implements IConfigurableCompon
active = on;
tile.markDirty();
tile.triggerRenderUpdate();
for (BiConsumer<Integer, Byte> rs : rsOut) {
rs.accept(rsOutputChannel, (byte) (active ? 15 : 0));
}
setOut(rsOutputChannel, active ? 15 : 0);
}
@Override

View file

@ -24,6 +24,7 @@ import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
import malte0811.industrialWires.client.RawQuad;
import malte0811.industrialWires.client.gui.GuiPanelCreator;
import malte0811.industrialWires.items.ItemKey;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.block.Block;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.resources.I18n;
@ -41,8 +42,9 @@ import org.lwjgl.util.vector.Vector3f;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.*;
import java.util.function.BiConsumer;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Lock extends PanelComponent implements IConfigurableComponent {
private final static Random rand = new Random();
@ -54,7 +56,6 @@ public class Lock extends PanelComponent implements IConfigurableComponent {
private int rsOutputChannel;
private int ticksTillOff;
private int lockID;
private Set<BiConsumer<Integer, Byte>> rsOut = new HashSet<>();
public Lock() {
super("lock");
@ -215,17 +216,10 @@ public class Lock extends PanelComponent implements IConfigurableComponent {
}
@Override
public void registerRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void registerRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
if (id == rsOutputId) {
rsOut.add(out);
out.accept(rsOutputChannel, (byte) (turned ? 15 : 0));
}
}
@Override
public void unregisterRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
if (id == rsOutputId) {
rsOut.remove(out);
super.registerRSOutput(id, out);
out.accept(rsOutputChannel, (byte) (turned ? 15 : 0), this);
}
}
@ -253,9 +247,7 @@ public class Lock extends PanelComponent implements IConfigurableComponent {
private void setOut(TileEntityPanel tile) {
tile.markDirty();
tile.triggerRenderUpdate();
for (BiConsumer<Integer, Byte> rs : rsOut) {
rs.accept(rsOutputChannel, (byte) (turned ? 15 : 0));
}
setOut(rsOutputChannel, turned ? 15 : 0);
}
@Override

View file

@ -23,6 +23,7 @@ import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
import malte0811.industrialWires.client.RawQuad;
import malte0811.industrialWires.client.gui.GuiPanelCreator;
import malte0811.industrialWires.util.MiscUtils;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderGlobal;
@ -34,10 +35,7 @@ import net.minecraft.util.math.Vec3d;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.function.BiConsumer;
import java.util.*;
import java.util.function.Consumer;
import java.util.function.Supplier;
@ -48,6 +46,7 @@ public abstract class PanelComponent {
private final String type;
protected final static float[] GRAY = {.8F, .8F, .8F};
protected final static int GRAY_INT = 0xFFD0D0D0;
private Set<TriConsumer<Integer, Byte, PanelComponent>> outputs = new HashSet<>();
protected PanelComponent(String type) {
this.type = type;
@ -99,10 +98,12 @@ public abstract class PanelComponent {
return null;
}
public void registerRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void registerRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
outputs.add(out);
}
public void unregisterRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void unregisterRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
outputs.remove(out);
}
public void dropItems(TileEntityPanel te) {
@ -211,6 +212,12 @@ public abstract class PanelComponent {
return true;
}
void setOut(int channel, int level) {
for (TriConsumer<Integer, Byte, PanelComponent> out : outputs) {
out.accept(channel, (byte) level, this);
}
}
@Override
public boolean equals(Object o) {
if (this == o) return true;

View file

@ -22,6 +22,7 @@ import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
import malte0811.industrialWires.client.RawQuad;
import malte0811.industrialWires.client.gui.GuiPanelCreator;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayerMP;
@ -33,10 +34,7 @@ import org.lwjgl.util.vector.Vector3f;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
public class Slider extends PanelComponent implements IConfigurableComponent {
private static final float WIDTH = .0625F;
@ -46,7 +44,6 @@ public class Slider extends PanelComponent implements IConfigurableComponent {
private byte out;
private byte rsChannel;
private int rsId;
private Set<BiConsumer<Integer, Byte>> outputs = new HashSet<>();
public Slider(float length, int color, boolean horizontal, int rsId, byte rsChannel) {
this();
@ -135,9 +132,7 @@ public class Slider extends PanelComponent implements IConfigurableComponent {
double pos = horizontal ? hitRelative.xCoord : (length - hitRelative.zCoord);
byte newLevel = (byte) (Math.min(pos * 16 / length, 15));
if (newLevel != out) {
for (BiConsumer<Integer, Byte> output : outputs) {
output.accept((int) rsChannel, newLevel);
}
setOut(rsChannel, newLevel);
out = newLevel;
tile.markDirty();
tile.triggerRenderUpdate();
@ -145,17 +140,10 @@ public class Slider extends PanelComponent implements IConfigurableComponent {
}
@Override
public void registerRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void registerRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
if (id == rsId) {
outputs.add(out);
out.accept((int) rsChannel, this.out);
}
}
@Override
public void unregisterRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
if (id == rsId) {
outputs.remove(out);
super.registerRSOutput(id, out);
out.accept((int) rsChannel, this.out, this);
}
}
@ -183,9 +171,7 @@ public class Slider extends PanelComponent implements IConfigurableComponent {
@Override
public void invalidate(TileEntityPanel te) {
for (BiConsumer<Integer, Byte> out : outputs) {
out.accept((int) rsChannel, (byte) 0);
}
setOut(rsChannel, 0);
}
@Override

View file

@ -23,6 +23,7 @@ import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
import malte0811.industrialWires.client.RawQuad;
import malte0811.industrialWires.client.gui.GuiPanelCreator;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayerMP;
@ -37,16 +38,12 @@ import org.lwjgl.util.vector.Vector3f;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
public class ToggleSwitch extends PanelComponent implements IConfigurableComponent {
public boolean active;
public int rsOutputId;
public byte rsOutputChannel;
private Set<BiConsumer<Integer, Byte>> rsOut = new HashSet<>();
public ToggleSwitch() {
super("toggle_switch");
@ -132,17 +129,10 @@ public class ToggleSwitch extends PanelComponent implements IConfigurableCompone
}
@Override
public void registerRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void registerRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
if (id == rsOutputId) {
rsOut.add(out);
out.accept((int) rsOutputChannel, (byte) (active ? 15 : 0));
}
}
@Override
public void unregisterRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
if (id == rsOutputId) {
rsOut.remove(out);
super.registerRSOutput(id, out);
out.accept((int) rsOutputChannel, (byte) (active ? 15 : 0), this);
}
}
@ -178,9 +168,7 @@ public class ToggleSwitch extends PanelComponent implements IConfigurableCompone
active = on;
tile.markDirty();
tile.triggerRenderUpdate();
for (BiConsumer<Integer, Byte> rs : rsOut) {
rs.accept((int) rsOutputChannel, (byte) (active ? 15 : 0));
}
setOut(rsOutputChannel, active ? 15 : 0);
}
@Override

View file

@ -23,6 +23,7 @@ import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanel;
import malte0811.industrialWires.client.RawQuad;
import malte0811.industrialWires.client.gui.GuiPanelCreator;
import malte0811.industrialWires.util.TriConsumer;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.resources.I18n;
@ -38,10 +39,7 @@ import org.lwjgl.util.vector.Vector3f;
import javax.annotation.Nonnull;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.BiConsumer;
public class Variac extends PanelComponent implements IConfigurableComponent {
private static final float SIZE = 3 / 16F;
@ -56,7 +54,6 @@ public class Variac extends PanelComponent implements IConfigurableComponent {
private byte out;
private byte rsChannel;
private int rsId;
private Set<BiConsumer<Integer, Byte>> outputs = new HashSet<>();
public Variac(int rsId, byte rsChannel) {
this();
@ -103,10 +100,10 @@ public class Variac extends PanelComponent implements IConfigurableComponent {
new Vector3f(innerSize, getHeight() / 2, innerSize), ret, false, mat);
mat.translate(SIZE / 2, 0, SIZE / 2);
mat.rotate(Math.PI / 2, 0, 1, 0);
mat.translate(-SIZE / 2, 0, -SIZE / 2);
PanelUtils.addColoredQuad(ret, new Vector3f(offset, getHeight() + .00001F, offset), new Vector3f(offset, getHeight() + .00001F, offset),
new Vector3f(offset + arrowSize / 2, getHeight() + .00001F, offset + arrowSize),
new Vector3f(offset + arrowSize, getHeight() + .00001F, offset + arrowSize / 2), EnumFacing.UP, white, mat);
mat.translate(-SIZE / 2, .0001, -SIZE / 2);
PanelUtils.addColoredQuad(ret, new Vector3f(offset, getHeight(), offset), new Vector3f(offset, getHeight(), offset),
new Vector3f(offset + arrowSize / 2, getHeight(), offset + arrowSize),
new Vector3f(offset + arrowSize, getHeight(), offset + arrowSize / 2), EnumFacing.UP, white, mat);
return ret;
}
@ -153,9 +150,7 @@ public class Variac extends PanelComponent implements IConfigurableComponent {
}
newLevel = (byte) Math.max(0, Math.min(newLevel, 15));
if (newLevel != out) {
for (BiConsumer<Integer, Byte> output : outputs) {
output.accept((int) rsChannel, newLevel);
}
setOut(rsChannel, newLevel);
out = newLevel;
tile.markDirty();
tile.triggerRenderUpdate();
@ -163,17 +158,10 @@ public class Variac extends PanelComponent implements IConfigurableComponent {
}
@Override
public void registerRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
public void registerRSOutput(int id, @Nonnull TriConsumer<Integer, Byte, PanelComponent> out) {
if (id == rsId) {
outputs.add(out);
out.accept((int) rsChannel, this.out);
}
}
@Override
public void unregisterRSOutput(int id, @Nonnull BiConsumer<Integer, Byte> out) {
if (id == rsId) {
outputs.remove(out);
super.registerRSOutput(id, out);
out.accept((int) rsChannel, this.out, this);
}
}
@ -208,9 +196,7 @@ public class Variac extends PanelComponent implements IConfigurableComponent {
@Override
public void invalidate(TileEntityPanel te) {
for (BiConsumer<Integer, Byte> out : outputs) {
out.accept((int) rsChannel, (byte) 0);
}
setOut(rsChannel, 0);
}
@Override

View file

@ -0,0 +1,23 @@
/*
* This file is part of Industrial Wires.
* Copyright (C) 2016-2017 malte0811
*
* Industrial Wires is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Industrial Wires is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Industrial Wires. If not, see <http://www.gnu.org/licenses/>.
*/
package malte0811.industrialWires.util;
public interface TriConsumer<A, B, C> {
void accept(A a, B b, C c);
}

View file

@ -112,7 +112,7 @@ ie.manual.entry.industrialwires.intro.subtext=
ie.manual.entry.industrialwires.intro0=Control Panels allow you to monitor and control a large amount of redstone signals using only a few blocks. Those signals can currently be connected using redstone wires and connectors.<br>Buttons, switches, indicator lights and other things that can be placed on a control panel are called §l(Panel) Components§r<br>To create a control panel you will need a Panel Creator, the individual components and a basic machine casing as the enclosure of the panel. Each
ie.manual.entry.industrialwires.intro1=component is described in the entry "Panel Components". Right-clicking with a panel component opens up a GUI in which the properties of the component, like the redstone channel and ID or the color, can be configured.
ie.manual.entry.industrialwires.intro2=A §l(panel) network§r is formed by panel blocks connected to each other, directly or through other panel blocks. Panel blocks include the control panel itself, the panel connector and the Redstone Wire Controller. If multiple components in one network are configured to modify the same
ie.manual.entry.industrialwires.intro3=redstone signal, the resulting behavior is undefined (but won't crash the game). Having multiple components accepting the same signal on a network is valid though.
ie.manual.entry.industrialwires.intro3=redstone signal, the resulting signal will be the highest of the individual signals. Having multiple components accepting the same signal on a network is valid as well.
ie.manual.entry.industrialwires.panel_creator.name=Panel Creator
ie.manual.entry.industrialwires.panel_creator.subtext=

View file

@ -1,24 +1,24 @@
tile.industrialwires.ic2Connector.tin_conn.name=锡质接线器
tile.industrialwires.ic2Connector.tin_relay.name=锡质继电器
tile.industrialwires.ic2Connector.copper_conn.name=铜质接线器
tile.industrialwires.ic2Connector.copper_relay.name=铜质继电器
tile.industrialwires.ic2Connector.gold_conn.name=金质接线器
tile.industrialwires.ic2Connector.gold_relay.name=金质继电器
tile.industrialwires.ic2Connector.hv_conn.name=工业2高压接线器
tile.industrialwires.ic2Connector.hv_relay.name=工业2高压继电器
tile.industrialwires.ic2Connector.glass_conn.name=玻璃纤维接线器
tile.industrialwires.ic2Connector.glass_relay.name=玻璃纤维继电器
tile.industrialwires.ic2_connector.tin_conn.name=锡质接线器
tile.industrialwires.ic2_connector.tin_relay.name=锡质继电器
tile.industrialwires.ic2_connector.copper_conn.name=铜质接线器
tile.industrialwires.ic2_connector.copper_relay.name=铜质继电器
tile.industrialwires.ic2_connector.gold_conn.name=金质接线器
tile.industrialwires.ic2_connector.gold_relay.name=金质继电器
tile.industrialwires.ic2_connector.hv_conn.name=工业2高压接线器
tile.industrialwires.ic2_connector.hv_relay.name=工业2高压继电器
tile.industrialwires.ic2_connector.glass_conn.name=玻璃纤维接线器
tile.industrialwires.ic2_connector.glass_relay.name=玻璃纤维继电器
tile.industrialwires.mechanical_converter.ie_motor.name=旋转能马达
tile.industrialwires.mechanical_converter.ie_to_ic2.name=转换器IE旋转能-IC动能
tile.industrialwires.mechanical_converter.ic2_to_ie.name=转换器IC动能-IE旋转能
item.industrialwires.ic2wireCoil.tin.name=锡质线圈
item.industrialwires.ic2wireCoil.copper.name=铜质线圈
item.industrialwires.ic2wireCoil.gold.name=金质线圈
item.industrialwires.ic2wireCoil.hv.name=工业2高压线圈
item.industrialwires.ic2wireCoil.glass.name=玻璃纤维线圈
item.industrialwires.ic2_wire_coil.tin.name=锡质线圈
item.industrialwires.ic2_wire_coil.copper.name=铜质线圈
item.industrialwires.ic2_wire_coil.gold.name=金质线圈
item.industrialwires.ic2_wire_coil.hv.name=工业2高压线圈
item.industrialwires.ic2_wire_coil.glass.name=玻璃纤维线圈
industrialwires.desc.wireLength=线缆长度: %1s 格
@ -30,16 +30,16 @@ industrialwires.chat.stackSize=连接时只能使用一个线圈
itemGroup.industrialwires=工业线缆
ie.manual.category.industrialWires.name=工业线缆
ie.manual.category.industrialwires.name=工业线缆
ie.manual.entry.industrialWires.wires.name=工业线缆
ie.manual.entry.industrialWires.wires.subtext=没有复杂的阻抗概念!
ie.manual.entry.industrialWires.wires0=工业线缆mod的线缆可以像工业2的导线一样传输能量。<br>其使用方法与使用ImmersiveEngineering的线缆完全一样。每种线缆所能传输的EU与其对应的导线相同所以
ie.manual.entry.industrialWires.wires1=将接线器接在一个会损坏导线的电源上同样会损坏接线器。<br>用以充当工业2导线的线圈与ImmersiveEngineering的线圈不同距离越长所使用的线缆也会越长线圈是通过在合成格中放置任意组合的未绝缘的工业2导线和相应的线圈来合成的。下一页展示了一些有效的配方及其合成产物的例子。
ie.manual.entry.industrialWires.wires2=未绝缘的锡质导线可以由未绝缘的铜质导线、金质导线、高压导线或玻璃纤维导线替代,以制造其他线圈。
ie.manual.entry.industrialwires.wires.name=工业线缆
ie.manual.entry.industrialwires.wires.subtext=没有复杂的阻抗概念!
ie.manual.entry.industrialwires.wires0=工业线缆mod的线缆可以像工业2的导线一样传输能量。<br>其使用方法与使用ImmersiveEngineering的线缆完全一样。每种线缆所能传输的EU与其对应的导线相同所以
ie.manual.entry.industrialwires.wires1=将接线器接在一个会损坏导线的电源上同样会损坏接线器。<br>用以充当工业2导线的线圈与ImmersiveEngineering的线圈不同距离越长所使用的线缆也会越长线圈是通过在合成格中放置任意组合的未绝缘的工业2导线和相应的线圈来合成的。下一页展示了一些有效的配方及其合成产物的例子。
ie.manual.entry.industrialwires.wires2=未绝缘的锡质导线可以由未绝缘的铜质导线、金质导线、高压导线或玻璃纤维导线替代,以制造其他线圈。
ie.manual.entry.industrialWires.mechConv.name=机械能转换器
ie.manual.entry.industrialWires.mechConv.subtext=我为此发明了旋转能!
ie.manual.entry.industrialWires.mechConv0=工业2和IE都有产生某种动能的机器。工业线缆mod的新型转换器允许您在这两种形式的能量之间转换<br>要使用“转换器IE旋转能-IC动能”需要将其齿轮面与一个IE的旋转能源
ie.manual.entry.industrialWires.mechConv1=如水车或旋转能马达见第3页相连其对面与一个工业2消耗动能的机器相连。“转换器IC动能-IE旋转能”的使用方法与“转换器UE旋转能-IC动能”相似只是转换方向变成了IC动能到IE旋转能。<br>不幸的是,转换过程中会
ie.manual.entry.industrialWires.mechConv2=损失一部分能量。<br>作为一个小的额外的“机械能转换器”系列其中还包含了旋转能马达它消耗IF以产生IE旋转能。 与转换器一样,这不是无损过程。
ie.manual.entry.industrialwires.mechConv.name=机械能转换器
ie.manual.entry.industrialwires.mechConv.subtext=我为此发明了旋转能!
ie.manual.entry.industrialwires.mechConv0=工业2和IE都有产生某种动能的机器。工业线缆mod的新型转换器允许您在这两种形式的能量之间转换<br>要使用“转换器IE旋转能-IC动能”需要将其齿轮面与一个IE的旋转能源
ie.manual.entry.industrialwires.mechConv1=如水车或旋转能马达见第3页相连其对面与一个工业2消耗动能的机器相连。“转换器IC动能-IE旋转能”的使用方法与“转换器UE旋转能-IC动能”相似只是转换方向变成了IC动能到IE旋转能。<br>不幸的是,转换过程中会
ie.manual.entry.industrialwires.mechConv2=损失一部分能量。<br>作为一个小的额外的“机械能转换器”系列其中还包含了旋转能马达它消耗IF以产生IE旋转能。 与转换器一样,这不是无损过程。