Compare commits

..
Author SHA1 Message Date
Martin Robertz 989c99aaad Merge branch 'master' into nei/handler_fluid 2026-09-27 10:36:09 +02:00
slprime c88cc8fa98 rename tank 2026-09-27 08:30:11 +03:00
slprime 07b44d03ca Replace Fluids in NEI Handlers 2026-09-08 23:23:17 +03:00
65 changed files with 395 additions and 633 deletions

No files matched your search

+2 -2
View File
@@ -3,9 +3,9 @@ name: Build and test
on:
pull_request:
branches: [ master, main, release/** ]
branches: [ master, main ]
push:
branches: [ master, main, release/** ]
branches: [ master, main ]
jobs:
build-and-test:
+2 -2
View File
@@ -3,7 +3,7 @@
dependencies {
api('com.github.GTNewHorizons:EnderCore:0.5.15:dev') {transitive = false}
compileOnly('com.github.GTNewHorizons:ForestryMC:4.11.37:dev')
compileOnly('com.github.GTNewHorizons:NotEnoughItems:2.8.130-GTNH:dev')
devOnlyNonPublishable('com.github.GTNewHorizons:NotEnoughItems:2.8.148-GTNH:dev')
api("com.github.GTNewHorizons:GTNHLib:0.11.45:dev")
compileOnly('com.github.GTNewHorizons:BuildCraft:7.1.63:dev')
api('curse.maven:cofh-lib-220333:2388748') // https://www.curseforge.com/minecraft/mc-mods/cofh-lib/files/2388748
@@ -28,7 +28,7 @@ dependencies {
compileOnly(rfg.deobf('curse.maven:computercraft-67504:2269339')) // https://www.curseforge.com/minecraft/mc-mods/computercraft/files/2269339
compileOnly(rfg.deobf('curse.maven:mekanism-268560:2475797')) // https://www.curseforge.com/minecraft/mc-mods/mekanism/files/2475797
compileOnly(rfg.deobf('maven.modrinth:immibis-microblocks:59.1.2')) // https://modrinth.com/mod/immibis-microblocks/version/59.1.2
compileOnly('com.github.GTNewHorizons:BetterBuildersWands:0.13.12-GTNH:dev@jar')
compileOnlyApi('com.github.GTNewHorizons:Angelica:2.2.10:api') {transitive = false}
compileOnly("com.github.GTNewHorizons:Hodgepodge:2.7.196:dev")
compileOnly('curse.maven:automagy-222153:2285272')
@@ -47,7 +47,6 @@ import cpw.mods.fml.common.registry.EntityRegistry;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import crazypants.enderio.api.IMC;
import crazypants.enderio.betterbuilderswands.PaintedCustomMapping;
import crazypants.enderio.block.BlockDarkSteelAnvil;
import crazypants.enderio.block.BlockDarkSteelLadder;
import crazypants.enderio.block.BlockDarkSteelPressurePlate;
@@ -191,8 +190,7 @@ import crazypants.util.EE3Util;
after:Waila@[1.5.8,);\
after:Thaumcraft;\
after:appliedenergistics2@[rv2-beta-8,);\
after:Railcraft@[9.16.7,);\
after:betterbuilderswands@[0.13.12,)\
after:Railcraft@[9.16.7,)\
""", guiFactory = "crazypants.enderio.config.ConfigFactoryEIO")
public class EnderIO {
@@ -841,9 +839,6 @@ public class EnderIO {
Log.info("Failed to registered Capacitor Banks as Tinkers Construct Flux Upgrades");
}
}
if (Loader.isModLoaded("betterbuilderswands")) {
PaintedCustomMapping.registerMappings();
}
ThaumcraftCompat.load();
}
@@ -1,101 +0,0 @@
package crazypants.enderio.betterbuilderswands;
import java.util.function.BiFunction;
import java.util.function.IntFunction;
import net.minecraft.block.Block;
import net.minecraft.item.ItemStack;
import com.github.bsideup.jabel.Desugar;
import crazypants.enderio.EnderIO;
import crazypants.enderio.machine.painter.BlockPaintedCarpet;
import crazypants.enderio.machine.painter.BlockPaintedFence;
import crazypants.enderio.machine.painter.BlockPaintedFenceGate;
import crazypants.enderio.machine.painter.BlockPaintedGlowstone;
import crazypants.enderio.machine.painter.BlockPaintedSlab;
import crazypants.enderio.machine.painter.BlockPaintedStair;
import crazypants.enderio.machine.painter.BlockPaintedWall;
import crazypants.enderio.machine.painter.TileEntityPaintedBlock;
import portablejim.bbw.BetterBuildersWandsMod;
import portablejim.bbw.basics.Point3d;
import portablejim.bbw.core.conversion.ICustomMapping;
import portablejim.bbw.shims.IPlayerShim;
import portablejim.bbw.shims.IWorldShim;
@Desugar
public record PaintedCustomMapping(Block lookBlock, BiFunction<Block, Integer, ItemStack> itemStackGetter, int meta)
implements ICustomMapping {
@Override
public Block getLookBlock() {
return lookBlock;
}
@Override
public int getMeta() {
return meta;
}
@Override
public ItemStack getItems(IWorldShim world, IPlayerShim player, Point3d point) {
if (world.getTile(point) instanceof TileEntityPaintedBlock painted) {
return itemStackGetter.apply(painted.getSourceBlock(), painted.getSourceBlockMetadata());
}
return null;
}
@Override
public boolean shouldCopyTileNBT() {
return true;
}
public static void registerMappings() {
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedGlowstone,
BlockPaintedGlowstone::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedStair,
BlockPaintedStair::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedFence,
BlockPaintedFence::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedFenceGate,
BlockPaintedFenceGate::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedCarpet,
BlockPaintedCarpet::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedSlab,
BlockPaintedSlab::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedWall,
BlockPaintedWall::createItemStackForSourceBlock,
i));
register(
i -> new PaintedCustomMapping(
EnderIO.blockPaintedDoubleSlab,
BlockPaintedSlab::createItemStackForSourceBlock,
i));
}
private static void register(IntFunction<ICustomMapping> mapping) {
for (int i = 0; i < 16; i++) {
BetterBuildersWandsMod.instance.mappingManager.setMapping(mapping.apply(i));
}
}
}
@@ -320,7 +320,7 @@ public class ConduitUtil {
}
int signalStrength = getInternalSignalForColor(bundle, col);
if (signalStrength < 15 && bundle != null && bundle.getEntity() != null) {
if (signalStrength < 15 && DyeColor.RED == col && bundle != null && bundle.getEntity() != null) {
TileEntity te = bundle.getEntity();
signalStrength = Math
.max(signalStrength, te.getWorldObj().getStrongestIndirectPower(te.xCoord, te.yCoord, te.zCoord));
@@ -175,7 +175,6 @@ public class ItemSettings extends BaseSettingsPanel {
private void updateButtons() {
rsB.onGuiInit();
rsB.setMode(itemConduit.getExtractionRedstoneMode(gui.getDir()));
colorB.onGuiInit();
loopB.onGuiInit();
loopB.setSelected(itemConduit.isSelfFeedEnabled(gui.getDir()));
@@ -8,13 +8,10 @@ import java.util.Map;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.IChatComponent;
import net.minecraftforge.common.util.ForgeDirection;
import com.enderio.core.common.util.BlockCoord;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.AbstractConduitNetwork;
import crazypants.enderio.conduit.item.NetworkedInventory.Target;
import crazypants.enderio.conduit.item.filter.IItemFilter;
@@ -179,8 +176,8 @@ public class ItemConduitNetwork extends AbstractConduitNetwork<IItemConduit, IIt
}
}
public List<IChatComponent> getTargetsForExtraction(BlockCoord extractFrom, IItemConduit con, ItemStack input) {
List<IChatComponent> result = new ArrayList<>();
public List<String> getTargetsForExtraction(BlockCoord extractFrom, IItemConduit con, ItemStack input) {
List<String> result = new ArrayList<>();
List<NetworkedInventory> invs = getOrCreate(extractFrom);
for (NetworkedInventory source : invs) {
@@ -190,12 +187,12 @@ public class ItemConduitNetwork extends AbstractConduitNetwork<IItemConduit, IIt
for (Target t : source.sendPriority) {
IItemFilter f = t.inv.con.getOutputFilter(t.inv.conDir);
if (input == null || f == null || f.doesItemPassFilter(t.inv, input)) {
result.add(
t.inv.getInventoryNameComponent()
.appendText(" " + t.inv.location.chatString() + " ").appendSibling(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("gui.mjReader.distance"),
t.distance)));
String s = t.inv.getLocalizedInventoryName() + " "
+ t.inv.location.chatString()
+ " Distance ["
+ t.distance
+ "] ";
result.add(s);
}
}
}
@@ -205,13 +202,13 @@ public class ItemConduitNetwork extends AbstractConduitNetwork<IItemConduit, IIt
return result;
}
public List<IChatComponent> getInputSourcesFor(IItemConduit con, ForgeDirection dir, ItemStack input) {
List<IChatComponent> result = new ArrayList<>();
public List<String> getInputSourcesFor(IItemConduit con, ForgeDirection dir, ItemStack input) {
List<String> result = new ArrayList<>();
for (NetworkedInventory inv : inventories) {
if (inv.hasTarget(con, dir)) {
IItemFilter f = inv.con.getInputFilter(inv.conDir);
if (input == null || f == null || f.doesItemPassFilter(inv, input)) {
result.add(inv.getInventoryNameComponent().appendText(" " + inv.location.chatString()));
result.add(inv.getLocalizedInventoryName() + " " + inv.location.chatString());
}
}
}
@@ -12,9 +12,6 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.StatCollector;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@@ -445,10 +442,6 @@ public class NetworkedInventory {
this.inventorySide = inventorySide;
}
/**
* @deprecated Translates on the server. Use {@link #getInventoryNameComponent()} for chat.
*/
@Deprecated
public String getLocalizedInventoryName() {
String inventoryName = getInventory().getInventoryName();
if (inventoryName == null) {
@@ -460,22 +453,6 @@ public class NetworkedInventory {
}
}
public IChatComponent getInventoryNameComponent() {
String inventoryName = getInventory().getInventoryName();
if (inventoryName == null) {
return new ChatComponentText("null");
}
// Ask the tile entity: InventoryWrapper always reports no custom name.
// The client parses the translation as a format string and falls back to en_US if it fails, so a '%' in the
// en_US text (or in the key when untranslated) could crash it. A dedicated server translates to en_US.
boolean customName = connectedTileEntity instanceof IInventory
&& ((IInventory) connectedTileEntity).hasCustomInventoryName();
if (customName || StatCollector.translateToLocal(inventoryName).contains("%")) {
return new ChatComponentText(inventoryName);
}
return new ChatComponentTranslation(inventoryName);
}
static class Target implements Comparable<Target> {
NetworkedInventory inv;
@@ -47,8 +47,8 @@ public class ExistingItemFilter implements IItemFilter {
private boolean isStackInInventory(NetworkedInventory ni, ItemStack item) {
int[] slots = ni.getInventory().getAccessibleSlotsFromSide(ni.getInventorySide());
for (int slot : slots) {
ItemStack stack = ni.getInventory().getStackInSlot(slot);
for (int i = 0; i < slots.length; i++) {
ItemStack stack = ni.getInventory().getStackInSlot(i);
if (stackEqual(item, stack)) {
return true;
}
@@ -116,8 +116,8 @@ public class ExistingItemFilter implements IItemFilter {
snapshot = new ArrayList<>();
}
int[] slots = ni.getInventory().getAccessibleSlotsFromSide(ni.getInventorySide());
for (int slot : slots) {
ItemStack stack = ni.getInventory().getStackInSlot(slot);
for (int i = 0; i < slots.length; i++) {
ItemStack stack = ni.getInventory().getStackInSlot(i);
if (stack != null && !isStackInSnapshot(stack)) {
snapshot.add(stack);
}
@@ -8,7 +8,6 @@ import net.minecraft.inventory.IInventory;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.world.World;
@@ -68,7 +67,7 @@ public class ItemExistingItemFilter extends Item implements IItemFilterUpgrade,
ExistingItemFilter filter = (ExistingItemFilter) createFilterFromStack(item);
String unloc = "item.itemExistingItemFilter."
+ (filter.mergeSnapshot(inv) ? "filterUpdated" : "filterNotUpdated");
ChatUtil.sendNoSpam(player, new ChatComponentTranslation(EnderIO.lang.addPrefix(unloc)));
ChatUtil.sendNoSpamUnloc(player, EnderIO.lang, unloc);
FilterRegister.writeFilterToStack(filter, item);
return true;
}
@@ -7,16 +7,15 @@ import java.util.Set;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Items;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.world.EnumSkyBlock;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.FluidContainerRegistry;
import net.minecraftforge.fluids.FluidRegistry;
import net.minecraftforge.fluids.FluidStack;
import com.enderio.core.common.util.BlockCoord;
import com.enderio.core.common.util.ChatUtil;
import com.gtnewhorizon.gtnhlib.chat.customcomponents.ChatComponentFluidName;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.AbstractConduitNetwork;
@@ -111,9 +110,7 @@ public abstract class AbstractTankConduit extends AbstractLiquidConduit {
if (network.fluidTypeLocked) {
network.setFluidTypeLocked(false);
numEmptyEvents = 0;
ChatUtil.sendNoSpam(
player,
new ChatComponentTranslation(EnderIO.lang.addPrefix("itemLiquidConduit.unlockedType")));
ChatUtil.sendNoSpamUnloc(player, EnderIO.lang, "itemLiquidConduit.unlockedType");
}
} else if (network != null) {
network.setFluidType(null);
@@ -131,10 +128,11 @@ public abstract class AbstractTankConduit extends AbstractLiquidConduit {
|| LiquidConduitNetwork.areFluidsCompatable(getFluidType(), fluid))) {
network.setFluidType(fluid);
network.setFluidTypeLocked(true);
ChatUtil.sendNoSpam(
ChatUtil.sendNoSpamUnloc(
player,
new ChatComponentTranslation(EnderIO.lang.addPrefix("itemLiquidConduit.lockedType"))
.appendText(" ").appendSibling(new ChatComponentFluidName(fluid)));
EnderIO.lang,
"itemLiquidConduit.lockedType",
" " + FluidRegistry.getFluidName(fluid));
}
}
return true;
@@ -15,9 +15,7 @@ import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.IIcon;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
@@ -215,20 +213,14 @@ public class OCConduit extends AbstractConduit implements IOCConduit {
return null;
}
private static IChatComponent prettyNode(Node o) {
private static String prettyNode(Node o) {
String at = "";
Environment host = o.host();
String name = host.getClass().getName().replaceFirst("^.*\\.", "");
if (host instanceof TileEntity) {
return new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemOCConduit.chat.nodeAt"),
name,
coords(new BlockCoord((TileEntity) host)));
BlockCoord bc = new BlockCoord((TileEntity) host);
at = " at " + bc.x + "/" + bc.y + "/" + bc.z;
}
return new ChatComponentText(name);
}
private static String coords(BlockCoord bc) {
return bc.x + "/" + bc.y + "/" + bc.z;
return host.getClass().getName().replaceFirst("^.*\\.", "") + at;
}
private static EnumChatFormatting dye2chat(DyeColor dyeColor) {
@@ -285,34 +277,23 @@ public class OCConduit extends AbstractConduit implements IOCConduit {
for (DyeColor color : DyeColor.VALUES) {
if (node(color).neighbors().iterator().hasNext()) {
noconnections = false;
ChatComponentTranslation coltxt = new ChatComponentTranslation(
DyeColor.DYE_ORE_UNLOCAL_NAMES[color.ordinal()]);
ChatComponentText coltxt = new ChatComponentText(color.getLocalisedName());
coltxt.getChatStyle().setColor(dye2chat(color));
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemOCConduit.chat.channel"),
coltxt,
coords(bc)));
ChatComponentText chantxt = new ChatComponentText("Channel ");
chantxt.appendSibling(coltxt);
chantxt.appendText(" at " + bc.x + "/" + bc.y + "/" + bc.z);
player.addChatMessage(chantxt);
for (Node other : node(color).neighbors()) {
player.addChatMessage(
new ChatComponentText(" ").appendSibling(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemOCConduit.chat.connectedTo"),
prettyNode(other))));
player.addChatMessage(new ChatComponentText(" Connected to: " + prettyNode(other)));
}
}
}
if (noconnections) {
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemOCConduit.chat.noConnections"),
coords(bc)));
new ChatComponentText("No connections at " + bc.x + "/" + bc.y + "/" + bc.z));
}
} else {
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemOCConduit.chat.noNetwork"),
coords(bc)));
player.addChatMessage(new ChatComponentText("No network at " + bc.x + "/" + bc.y + "/" + bc.z));
}
}
return true;
@@ -145,7 +145,6 @@ public final class Config {
public static int travelAnchorCooldown = 0;
public static boolean travelAnchorSneak = true;
public static boolean travelAnchorSkipWarning = true;
public static double travelAnchorSnapAngle = 0.175;
public static int travelStaffMaxDistance = 128;
public static float travelStaffPowerPerBlockRF = 250;
@@ -1168,14 +1167,6 @@ public final class Config {
"Travel Anchors send a chat warning when skipping inaccessible anchors")
.getBoolean(travelAnchorSkipWarning);
travelAnchorSnapAngle = Math.toRadians(
config.get(
sectionAnchor.name,
"travelAnchorSnapAngle",
Math.round(Math.toDegrees(travelAnchorSnapAngle)),
"The maximum angle to snap to an anchor when selecting target")
.getDouble(Math.toDegrees(travelAnchorSnapAngle)));
travelStaffMaxDistance = config
.get(
sectionStaff.name,
@@ -18,7 +18,6 @@ import com.enderio.core.common.util.ChatUtil;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.EnderIOTab;
import crazypants.enderio.ModObject;
import crazypants.enderio.api.tool.IHideFacades;
@@ -77,7 +76,7 @@ public class ItemConduitProbe extends Item implements IResourceTooltipProvider,
}
if (isCopy && performedAction && player.worldObj.isRemote) {
ChatUtil.sendNoSpamClientUnloc(EnderIO.lang, "itemConduitProbe.chat.copied");
ChatUtil.sendNoSpamClient("Copied conduit settings");
}
return performedAction;
@@ -1,21 +1,15 @@
package crazypants.enderio.item;
import java.util.ArrayList;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.enderio.core.common.util.ChatUtil;
import com.gtnewhorizon.gtnhlib.chat.customcomponents.ChatComponentItemName;
import cpw.mods.fml.common.network.simpleimpl.IMessage;
import cpw.mods.fml.common.network.simpleimpl.IMessageHandler;
@@ -38,23 +32,22 @@ import io.netty.buffer.ByteBuf;
public class PacketConduitProbe implements IMessage, IMessageHandler<PacketConduitProbe, IMessage> {
private static final String OF = "gui.powerMonitor.of";
private static final String CON_STORAGE = "gui.powerMonitor.monHeading1";
private static final String CAP_BANK_STOR = "gui.powerMonitor.monHeading2";
private static final String MACH_BUF_STOR = "gui.powerMonitor.monHeading3";
private static final String AVE_OUT = "gui.powerMonitor.monHeading4";
private static final String AVE_IN = "gui.powerMonitor.monHeading5";
private static final String OF = " " + EnderIO.lang.localize("gui.powerMonitor.of") + " ";
private static final String CON_STORAGE = " " + EnderIO.lang.localize("gui.powerMonitor.monHeading1") + ": ";
private static final String CAP_BANK_STOR = " " + EnderIO.lang.localize("gui.powerMonitor.monHeading2") + ": ";
private static final String MACH_BUF_STOR = " " + EnderIO.lang.localize("gui.powerMonitor.monHeading3") + ": ";
private static final String AVE_OUT = " " + EnderIO.lang.localize("gui.powerMonitor.monHeading4") + ": ";
private static final String AVE_IN = " " + EnderIO.lang.localize("gui.powerMonitor.monHeading5") + ": ";
private static final String NET_HEADING = "gui.mjReader.networkHeading";
private static final String CON_BUF = "gui.mjReader.conduitBuffer";
private static final String NET_HEADING = EnderIO.lang.localize("gui.mjReader.networkHeading");
private static final String CON_BUF = " " + EnderIO.lang.localize("gui.mjReader.conduitBuffer") + ": ";
private static final String ITEM_HEADING = "gui.mjReader.itemHeading";
private static final String ITEM_NO_CONNECTIONS = "gui.mjReader.itemNoConnections";
private static final String ITEM_HEADING = EnderIO.lang.localize("gui.mjReader.itemHeading");
private static final String ITEM_NO_CONNECTIONS = EnderIO.lang.localize("gui.mjReader.itemNoConnections");
private static final String ENERGY_CONDUIT = "itemPowerConduit.name";
private static final String REQUEST_RANGE = "gui.mjReader.requestRange";
private static final String CUR_REQUEST = "gui.mjReader.currentRequest";
private static final String RF = "power.rf";
private static final String ENERGY_CONDUIT = EnderIO.lang.localize("itemPowerConduit");
private static final String REQUEST_RANGE = " " + EnderIO.lang.localize("gui.mjReader.requestRange") + ": ";;
private static final String CUR_REQUEST = " " + EnderIO.lang.localize("gui.mjReader.currentRequest") + ": ";;
public static boolean canCreatePacket(World world, int x, int y, int z) {
Block block = world.getBlock(x, y, z);
@@ -161,127 +154,191 @@ public class PacketConduitProbe implements IMessage, IMessageHandler<PacketCondu
}
public static void sendInfoMessage(EntityPlayer player, IItemConduit conduit, ItemStack input) {
List<IChatComponent> lines = new ArrayList<>();
String color = "\u00A7a ";
StringBuilder sb = new StringBuilder();
sb.append(color);
if (conduit.getExternalConnections().isEmpty()) {
lines.add(
line(EnumChatFormatting.GREEN).appendSibling(tr(ITEM_HEADING)).appendText(" ")
.appendSibling(tr(ITEM_NO_CONNECTIONS)));
sb.append(ITEM_HEADING);
sb.append(" ");
sb.append(ITEM_NO_CONNECTIONS);
sb.append("\n");
} else {
for (ForgeDirection dir : conduit.getExternalConnections()) {
ConnectionMode mode = conduit.getConnectionMode(dir);
lines.add(
line(EnumChatFormatting.GREEN).appendSibling(tr(ITEM_HEADING)).appendText(" ")
.appendSibling(tr("gui.mjReader.connectionDir")).appendText(" " + dir));
sb.append(ITEM_HEADING);
sb.append(" ");
sb.append(EnderIO.lang.localize("gui.mjReader.connectionDir"));
sb.append(" ");
sb.append(dir);
sb.append("\n");
ItemConduitNetwork icn = (ItemConduitNetwork) conduit.getNetwork();
if (icn != null && mode.acceptsInput()) {
IChatComponent line = line(EnumChatFormatting.BLUE);
color = "\u00A79 ";
sb.append(color);
if (input == null) {
line.appendSibling(tr("gui.mjReader.extractedItems"));
sb.append(EnderIO.lang.localize("gui.mjReader.extractedItems"));
} else {
line.appendSibling(tr("gui.mjReader.extractedItem")).appendText(" ")
.appendSibling(new ChatComponentItemName(input));
sb.append(EnderIO.lang.localize("gui.mjReader.extractedItem"));
sb.append(" ");
sb.append(input.getDisplayName());
}
line.appendText(" ");
List<IChatComponent> targets = icn
sb.append(" ");
List<String> targets = icn
.getTargetsForExtraction(conduit.getLocation().getLocation(dir), conduit, input);
if (targets.isEmpty()) {
lines.add(line.appendSibling(tr("gui.mjReader.noOutputs")).appendText("."));
sb.append(" ");
sb.append(EnderIO.lang.localize("gui.mjReader.noOutputs"));
sb.append(".\n");
} else {
lines.add(line.appendSibling(tr("gui.mjReader.insertedInto")));
for (IChatComponent target : targets) {
lines.add(new ChatComponentText(" - ").appendSibling(target));
sb.append(" ");
sb.append(EnderIO.lang.localize("gui.mjReader.insertedInto"));
sb.append("\n");
for (String str : targets) {
sb.append(" - ");
sb.append(str);
sb.append(" ");
sb.append("\n");
}
}
}
if (icn != null && mode.acceptsOutput()) {
IChatComponent line = line(EnumChatFormatting.BLUE);
List<IChatComponent> targets = icn.getInputSourcesFor(conduit, dir, input);
color = "\u00A79 ";
sb.append(color);
List<String> targets = icn.getInputSourcesFor(conduit, dir, input);
if (targets.isEmpty()) {
if (input == null) {
line.appendSibling(tr("gui.mjReader.noItems"));
sb.append(EnderIO.lang.localize("gui.mjReader.noItems"));
} else {
line.appendSibling(tr("gui.mjReader.noItem")).appendText(" ")
.appendSibling(new ChatComponentItemName(input));
sb.append(EnderIO.lang.localize("gui.mjReader.noItem"));
sb.append(" ");
sb.append(input.getDisplayName());
}
lines.add(line);
} else {
if (input == null) {
line.appendSibling(tr("gui.mjReader.receiveItems"));
sb.append(EnderIO.lang.localize("gui.mjReader.receiveItems"));
} else {
line.appendSibling(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("gui.mjReader.receiveItem"),
new ChatComponentItemName(input)));
sb.append(EnderIO.lang.localize("gui.mjReader.receiveItem1"));
sb.append(" ");
sb.append(input.getDisplayName());
sb.append(" ");
sb.append(EnderIO.lang.localize("gui.mjReader.receiveItem2"));
}
lines.add(line);
for (IChatComponent target : targets) {
lines.add(new ChatComponentText(" - ").appendSibling(target));
sb.append("\n");
for (String str : targets) {
sb.append(" - ");
sb.append(str);
sb.append("\n");
}
}
}
}
}
ChatUtil.sendNoSpam(player, lines.toArray(new IChatComponent[0]));
}
private static IChatComponent tr(String key) {
return new ChatComponentTranslation(EnderIO.lang.addPrefix(key));
}
private static IChatComponent line(EnumChatFormatting color) {
IChatComponent line = new ChatComponentText(" ");
line.getChatStyle().setColor(color);
return line;
}
private static IChatComponent power(long amount, long max) {
return new ChatComponentText(PowerDisplayUtil.formatPower(amount) + " ").appendSibling(tr(OF))
.appendText(" " + PowerDisplayUtil.formatPower(max) + " ").appendSibling(tr(RF));
}
private static IChatComponent label(String key) {
return new ChatComponentText(" ").appendSibling(tr(key)).appendText(": ");
String[] lines = sb.toString().split("\n");
ChatUtil.sendNoSpam(player, lines);
}
public static void sendInfoMessage(EntityPlayer player, NetworkPowerManager pm) {
PowerTracker tracker = pm.getNetworkPowerTracker();
ChatUtil.sendNoSpam(
player,
line(EnumChatFormatting.GREEN).appendSibling(tr(NET_HEADING)),
line(EnumChatFormatting.BLUE).appendSibling(label(CON_STORAGE))
.appendSibling(power(pm.getPowerInConduits(), pm.getMaxPowerInConduits())),
label(CAP_BANK_STOR)
.appendSibling(power(pm.getPowerInCapacitorBanks(), pm.getMaxPowerInCapacitorBanks())),
label(MACH_BUF_STOR).appendSibling(power(pm.getPowerInReceptors(), pm.getMaxPowerInReceptors())),
label(AVE_OUT).appendText(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickSent())),
label(AVE_IN).appendText(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickRecieved())));
String color = "\u00A7a ";
StringBuilder sb = new StringBuilder();
sb.append(color);
sb.append(NET_HEADING);
sb.append("\n");
color = "\u00A79 ";
sb.append(color);
sb.append(CON_STORAGE);
sb.append(PowerDisplayUtil.formatPower(pm.getPowerInConduits()));
sb.append(OF);
sb.append(PowerDisplayUtil.formatPower(pm.getMaxPowerInConduits()));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
sb.append("\n");
sb.append(CAP_BANK_STOR);
sb.append(PowerDisplayUtil.formatPower(pm.getPowerInCapacitorBanks()));
sb.append(OF);
sb.append(PowerDisplayUtil.formatPower(pm.getMaxPowerInCapacitorBanks()));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
sb.append("\n");
sb.append(MACH_BUF_STOR);
sb.append(PowerDisplayUtil.formatPower(pm.getPowerInReceptors()));
sb.append(OF);
sb.append(PowerDisplayUtil.formatPower(pm.getMaxPowerInReceptors()));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
sb.append("\n");
sb.append(AVE_OUT);
sb.append(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickSent()));
sb.append("\n");
sb.append(AVE_IN);
sb.append(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickRecieved()));
String[] lines = sb.toString().split("\n");
ChatUtil.sendNoSpam(player, lines);
}
public static void sendPowerConduitInfo(EntityPlayer player, IPowerConduit con, PowerTracker tracker) {
ChatUtil.sendNoSpam(
player,
line(EnumChatFormatting.GREEN).appendSibling(tr(ENERGY_CONDUIT)).appendSibling(
line(EnumChatFormatting.BLUE).appendSibling(label(CON_BUF))
.appendSibling(power(con.getEnergyStored(), con.getMaxEnergyStored()))),
label(AVE_OUT).appendText(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickSent())),
label(AVE_IN).appendText(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickRecieved())));
String color = "\u00A7a ";
StringBuilder sb = new StringBuilder();
sb.append(color);
sb.append(ENERGY_CONDUIT);
color = "\u00A79 ";
sb.append(color);
sb.append(CON_BUF);
sb.append(PowerDisplayUtil.formatPower(con.getEnergyStored()));
sb.append(OF);
sb.append(PowerDisplayUtil.formatPower(con.getMaxEnergyStored()));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
sb.append("\n");
sb.append(AVE_OUT);
sb.append(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickSent()));
sb.append("\n");
sb.append(AVE_IN);
sb.append(PowerDisplayUtil.formatPowerFloat(tracker.getAverageRfTickRecieved()));
String[] lines = sb.toString().split("\n");
ChatUtil.sendNoSpam(player, lines);
}
private void sendPowerReciptorInfo(EntityPlayer player, Block block, int stored, int maxStored, int minRec,
int maxRec, int request) {
ChatUtil.sendNoSpam(
player,
line(EnumChatFormatting.GREEN)
.appendSibling(new ChatComponentTranslation(block.getUnlocalizedName() + ".name"))
.appendSibling(
line(EnumChatFormatting.BLUE).appendSibling(label(CON_BUF))
.appendSibling(power(stored, maxStored))),
label(REQUEST_RANGE).appendText(
PowerDisplayUtil.formatPower(minRec) + " - " + PowerDisplayUtil.formatPower(maxRec) + " ")
.appendSibling(tr(RF)),
label(CUR_REQUEST).appendText(PowerDisplayUtil.formatPower(request) + " ").appendSibling(tr(RF)));
String color = "\u00A7a ";
StringBuilder sb = new StringBuilder();
sb.append(color);
sb.append(block.getLocalizedName());
color = "\u00A79 ";
sb.append(color);
sb.append(CON_BUF);
sb.append(PowerDisplayUtil.formatPower(stored));
sb.append(OF);
sb.append(PowerDisplayUtil.formatPower(maxStored));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
sb.append("\n");
sb.append(REQUEST_RANGE);
sb.append(PowerDisplayUtil.formatPower(minRec));
sb.append(" - ");
sb.append(PowerDisplayUtil.formatPower(maxRec));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
sb.append("\n");
sb.append(CUR_REQUEST);
sb.append(PowerDisplayUtil.formatPower(request));
sb.append(" ");
sb.append(PowerDisplayUtil.abrevation());
String[] lines = sb.toString().split("\n");
ChatUtil.sendNoSpam(player, lines);
}
}
@@ -41,7 +41,7 @@ public class TileAlloySmelter extends AbstractPoweredTaskEntity {
@Override
public String getInventoryName() {
return "tile.blockAlloySmelter.name";
return "Alloy Smelter";
}
public Mode getMode() {
@@ -33,12 +33,6 @@ public class TileBuffer extends AbstractPowerConsumerEntity implements IPaintabl
super(new SlotDefinition(9, 0, 0));
}
@Override
public String getInventoryName() {
// getMachineName will return the key without the suffix ".name"
return getMachineName() + ".name";
}
@Override
public String getMachineName() {
return BlockItemBuffer.Type.get(this).getUnlocalizedName();
@@ -54,11 +54,6 @@ public class TileCrafter extends AbstractPowerConsumerEntity implements IItemBuf
setCapacitor(new BasicCapacitor(0, io * 4, refCap.getMaxEnergyStored(), io));
}
@Override
public String getInventoryName() {
return "tile.blockCrafter.name";
}
@Override
public String getMachineName() {
return ModObject.blockCrafter.unlocalisedName;
@@ -28,7 +28,7 @@ public class TileCrusher extends AbstractPoweredTaskEntity {
@Override
public String getInventoryName() {
return "tile.blockSagMill.name";
return ModObject.blockSagMill.unlocalisedName;
}
@Override
@@ -16,6 +16,7 @@ import com.gtnewhorizon.gtnhlib.geometry.CubeIterator;
import cpw.mods.fml.common.registry.GameRegistry;
import crazypants.enderio.Log;
import crazypants.enderio.ModObject;
import crazypants.enderio.TileEntityEio;
import crazypants.enderio.config.Config;
import crazypants.enderio.machine.obelisk.xp.TileExperienceObelisk;
@@ -299,7 +300,7 @@ public class TileEnchanter extends TileEntityEio implements ISidedInventory {
@Override
public String getInventoryName() {
return "tile.blockEnchanter.name";
return ModObject.blockEnchanter.unlocalisedName;
}
@Override
@@ -822,7 +822,7 @@ public class TileFarmStation extends AbstractPoweredTaskEntity implements IRange
@Override
public String getInventoryName() {
return "tile.blockFarmStation.name";
return EnderIO.blockFarmStation.getLocalizedName();
}
@Override
@@ -90,11 +90,6 @@ public class TileCombustionGenerator extends AbstractGeneratorEntity implements
return mode != IoMode.PUSH && mode != IoMode.PUSH_PULL;
}
@Override
public String getInventoryName() {
return "tile.blockCombustionGenerator.name";
}
@Override
public String getMachineName() {
return ModObject.blockCombustionGenerator.unlocalisedName;
@@ -42,7 +42,7 @@ public class TileEntityStirlingGenerator extends AbstractGeneratorEntity impleme
@Override
public String getInventoryName() {
return "tile.blockStirlingGenerator.name";
return "Stirling Generator";
}
@Override
@@ -93,11 +93,6 @@ public class TileZombieGenerator extends AbstractGeneratorEntity
minimumTankLevel = (int) (fuelTank.getCapacity() * 0.7F);
}
@Override
public String getInventoryName() {
return "tile.blockZombieGenerator.name";
}
@Override
public String getMachineName() {
return ModObject.blockZombieGenerator.unlocalisedName;
@@ -11,6 +11,8 @@ import net.minecraftforge.common.util.ForgeDirection;
import com.enderio.core.common.util.InventoryWrapper;
import crazypants.enderio.ModObject;
public class CompositeInventory implements ISidedInventory {
private final List<InvEntry> inventories = new ArrayList<>();
@@ -155,7 +157,7 @@ public class CompositeInventory implements ISidedInventory {
@Override
public String getInventoryName() {
return "tile.blockHyperCube.name";
return ModObject.blockHyperCube.unlocalisedName;
}
@Override
@@ -26,6 +26,7 @@ import com.enderio.core.common.util.PlayerUtil;
import com.enderio.core.common.vecmath.VecmathUtil;
import crazypants.enderio.EnderIO;
import crazypants.enderio.ModObject;
import crazypants.enderio.TileEntityEio;
import crazypants.enderio.config.Config;
import crazypants.enderio.machine.IRedstoneModeControlable;
@@ -768,7 +769,7 @@ public class TileHyperCube extends TileEntityEio
@Override
public String getInventoryName() {
return "tile.blockHyperCube.name";
return ModObject.blockHyperCube.unlocalisedName;
}
@Override
@@ -369,11 +369,6 @@ public class TileInventoryPanel extends AbstractMachineEntity implements IFluidH
nbtRoot.setBoolean("active", active);
}
@Override
public String getInventoryName() {
return "tile.blockInventoryPanel.name";
}
@Override
public String getMachineName() {
return ModObject.blockInventoryPanel.unlocalisedName;
@@ -157,11 +157,6 @@ public class TileKillerJoe extends AbstractMachineEntity
}
}
@Override
public String getInventoryName() {
return "tile.blockKillerJoe.name";
}
@Override
public String getMachineName() {
return ModObject.blockKillerJoe.unlocalisedName;
@@ -101,7 +101,7 @@ public class TilePowerMonitor extends AbstractPowerConsumerEntity implements IIn
@Override
public String getInventoryName() {
return "tile.blockPowerMonitor.name";
return EnderIO.blockPowerMonitor.getUnlocalizedName();
}
@Override
@@ -126,11 +126,6 @@ public class TileAttractor extends AbstractPowerConsumerEntity implements IRange
setCapacitor(new BasicCapacitor(powerPerTick * 8, getCapacitor().getMaxEnergyStored(), powerPerTick));
}
@Override
public String getInventoryName() {
return "tile.blockAttractor.name";
}
@Override
public String getMachineName() {
return ModObject.blockAttractor.unlocalisedName;
@@ -106,11 +106,6 @@ public class TileAversionObelisk extends AbstractPowerConsumerEntity implements
bounds = AxisAlignedBB.getBoundingBox(bb.minX, bb.minY, bb.minZ, bb.maxX, bb.maxY, bb.maxZ);
}
@Override
public String getInventoryName() {
return "tile.blockSpawnGuard.name";
}
@Override
public String getMachineName() {
return ModObject.blockSpawnGuard.unlocalisedName;
@@ -19,11 +19,6 @@ public class TileInhibitorObelisk extends AbstractPowerConsumerEntity implements
super(new SlotDefinition(0, 0, 1));
}
@Override
public String getInventoryName() {
return "tile.blockInhibitorObelisk.name";
}
@Override
public String getMachineName() {
return ModObject.blockInhibitorObelisk.unlocalisedName;
@@ -121,11 +121,6 @@ public class TileWeatherObelisk extends AbstractPowerConsumerEntity
setCapacitor(Capacitors.ACTIVATED_CAPACITOR);
}
@Override
public String getInventoryName() {
return "tile.blockWeatherObelisk.name";
}
@Override
public String getMachineName() {
return ModObject.blockWeatherObelisk.unlocalisedName;
@@ -32,11 +32,6 @@ public class TileExperienceObelisk extends AbstractMachineEntity
super(new SlotDefinition(0, 0, 0));
}
@Override
public String getInventoryName() {
return "tile.blockExperienceObelisk.name";
}
@Override
public String getMachineName() {
return ModObject.blockExperienceObelisk.unlocalisedName;
@@ -32,7 +32,7 @@ public class TileEntityPainter extends AbstractPoweredTaskEntity implements ISid
@Override
public String getInventoryName() {
return "tile.blockPainter.name";
return "Auto Painter";
}
@Override
@@ -31,15 +31,12 @@ public class BasicManyToOneRecipe implements IManyToOneRecipe {
@Override
public boolean isValidRecipeComponents(ItemStack... items) {
List<RecipeInput> inputs = new ArrayList<RecipeInput>(Arrays.asList(recipe.getInputs()));
for (int slot = 0; slot < items.length; slot++) {
ItemStack is = items[slot];
List<RecipeInput> inputs = new ArrayList<>(Arrays.asList(recipe.getInputs()));
for (ItemStack is : items) {
if (is != null) {
RecipeInput remove = null;
for (RecipeInput ri : inputs) {
int riSlot = ri.getSlotNumber();
// Match by item type and, if the recipe specifies a slot, also by slot index
if (ri.isInput(is) && (riSlot == -1 || riSlot == slot)) {
if (ri.isInput(is)) {
remove = ri;
break;
}
@@ -100,11 +100,6 @@ public class TileSliceAndSplice extends AbstractPoweredTaskEntity {
super(new SlotDefinition(8, 1));
}
@Override
public String getInventoryName() {
return "tile.blockSliceAndSplice.name";
}
@Override
public String getMachineName() {
return ModObject.blockSliceAndSplice.unlocalisedName;
@@ -113,11 +113,6 @@ public class TileSoulBinder extends AbstractPoweredTaskEntity implements IHaveEx
return xpCont;
}
@Override
public String getInventoryName() {
return "tile.blockSoulBinder.name";
}
@Override
public String getMachineName() {
return ModObject.blockSoulBinder.unlocalisedName;
@@ -197,11 +197,6 @@ public class TilePoweredSpawner extends AbstractPoweredTaskEntity implements IRa
forceClientUpdate = true;
}
@Override
public String getInventoryName() {
return "tile.blockPoweredSpawner.name";
}
@Override
public String getMachineName() {
return ModObject.blockPoweredSpawner.unlocalisedName;
@@ -225,11 +225,6 @@ public class TileTank extends AbstractMachineEntity implements IFluidHandler, IT
this.voidMode = mode;
}
@Override
public String getInventoryName() {
return "tile.blockTank.name";
}
@Override
public String getMachineName() {
return "tank";
@@ -157,11 +157,6 @@ public class TileTransceiver extends AbstractPoweredTaskEntity
}
}
@Override
public String getInventoryName() {
return "tile.blockTransceiver.name";
}
@Override
public String getMachineName() {
return ModObject.blockTransceiver.unlocalisedName;
@@ -148,7 +148,6 @@ public class GuiVacuumChest extends GuiContainerBaseEIO {
break;
case RANGE_ID:
te.setShowRange(showRangeB.isSelected());
break;
case ID_WHITELIST:
itemFilter = te.getItemFilter();
if (itemFilter != null) {
@@ -24,6 +24,7 @@ import com.enderio.core.common.vecmath.Vector3d;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import crazypants.enderio.EnderIO;
import crazypants.enderio.ModObject;
import crazypants.enderio.TileEntityEio;
import crazypants.enderio.conduit.item.FilterRegister;
import crazypants.enderio.conduit.item.filter.IItemFilter;
@@ -211,7 +212,7 @@ public class TileVacuumChest extends TileEntityEio
@Override
public String getInventoryName() {
return "tile.blockVacuumChest.name";
return ModObject.blockVacuumChest.unlocalisedName;
}
@Override
@@ -42,7 +42,7 @@ public class TileVat extends AbstractPoweredTaskEntity implements IFluidHandler,
@Override
public String getInventoryName() {
return "tile.blockVat.name";
return ModObject.blockVat.unlocalisedName;
}
@Override
@@ -78,6 +78,16 @@ public class NEIEnderIOConfig implements IConfigureNEI {
API.hideItem(new ItemStack(EnderIO.itemGasConduit));
}
API.hideItem(new ItemStack(EnderIO.blockHyperCube));
API.hideItem(new ItemStack(EnderIO.blockNutrientDistillation));
API.hideItem(new ItemStack(EnderIO.blockHootch));
API.hideItem(new ItemStack(EnderIO.blockRocketFuel));
API.hideItem(new ItemStack(EnderIO.blockFireWater));
API.hideItem(new ItemStack(EnderIO.blockLiquidSunshine));
API.hideItem(new ItemStack(EnderIO.blockCloudSeed));
API.hideItem(new ItemStack(EnderIO.blockCloudSeedConcentrated));
API.hideItem(new ItemStack(EnderIO.blockEnderDistillation));
API.hideItem(new ItemStack(EnderIO.blockVapourOfLevity));
}
@Override
@@ -1,6 +1,5 @@
package crazypants.enderio.nei;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.ArrayList;
import java.util.HashMap;
@@ -9,7 +8,6 @@ import java.util.Map;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.item.ItemStack;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidContainerRegistry;
@@ -17,17 +15,13 @@ import net.minecraftforge.fluids.FluidStack;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.render.RenderUtil;
import com.enderio.core.common.util.FluidUtil;
import codechicken.lib.gui.GuiDraw;
import codechicken.nei.ItemStackMap;
import codechicken.nei.PositionedStack;
import codechicken.nei.recipe.GuiCraftingRecipe;
import codechicken.nei.recipe.GuiRecipe;
import codechicken.nei.recipe.GuiUsageRecipe;
import codechicken.nei.recipe.StackInfo;
import codechicken.nei.recipe.TemplateRecipeHandler;
import crazypants.enderio.fluid.Fluids;
import crazypants.enderio.gui.GuiContainerBaseEIO;
import crazypants.enderio.machine.recipe.IRecipe;
import crazypants.enderio.machine.recipe.RecipeInput;
@@ -38,9 +32,6 @@ import crazypants.util.ColorUtils;
public class VatRecipeHandler extends TemplateRecipeHandler {
private final Rectangle inTankBounds = new Rectangle(25, 1, 15, 47);
private final Rectangle outTankBounds = new Rectangle(127, 1, 15, 47);
public VatRecipeHandler() {}
@Override
@@ -94,7 +85,7 @@ public class VatRecipeHandler extends TemplateRecipeHandler {
@Override
public void loadCraftingRecipes(ItemStack result) {
FluidStack fluid = FluidUtil.getFluidFromItem(result);
FluidStack fluid = getFluidFromNeiItem(result);
if (fluid != null) {
loadCraftingRecipes(fluid);
}
@@ -122,7 +113,7 @@ public class VatRecipeHandler extends TemplateRecipeHandler {
@Override
public void loadUsageRecipes(ItemStack ingredient) {
FluidStack fluid = FluidUtil.getFluidFromItem(ingredient);
FluidStack fluid = getFluidFromNeiItem(ingredient);
if (fluid != null) {
loadUsageRecipes(fluid);
}
@@ -159,109 +150,37 @@ public class VatRecipeHandler extends TemplateRecipeHandler {
@Override
public void drawExtras(int recipeIndex) {
InnerVatRecipe rec = (InnerVatRecipe) arecipes.get(recipeIndex);
if (rec.inFluid != null && rec.inFluid.getFluid() != null) {
RenderUtil.renderGuiTank(
rec.inFluid,
FluidContainerRegistry.BUCKET_VOLUME * 8,
rec.getInputFluidAmount(),
inTankBounds.x,
inTankBounds.y,
0,
inTankBounds.width,
inTankBounds.height);
}
if (rec.result != null && rec.result.getFluid() != null) {
RenderUtil.renderGuiTank(
rec.result,
FluidContainerRegistry.BUCKET_VOLUME * 8,
rec.getResultFluidAmount(),
outTankBounds.x,
outTankBounds.y,
0,
outTankBounds.width,
outTankBounds.height);
}
String energyString = PowerDisplayUtil.formatPower(rec.energy) + " " + PowerDisplayUtil.abrevation();
GuiDraw.drawStringC(energyString, 86, 54, ColorUtils.neiEnergyString.getColor(), false);
Fluid outputFluid = rec.result.getFluid();
Fluid outputFluid = rec.resultFluid.getFluid();
List<PositionedStack> stacks = rec.getIngredients();
for (PositionedStack ps : stacks) {
if (ps instanceof PositionedStack.Tank) {
continue;
}
float mult = VatRecipeManager.getInstance()
.getMultiplierForInput(rec.inFluid.getFluid(), ps.item, outputFluid);
String str = "x" + mult;
GuiDraw.drawStringC(str, ps.relx + 8, ps.rely + 19, ColorUtils.neiMultiplierString.getColor(), false);
GuiDraw.drawStringC(
"x" + mult,
ps.relx + 8,
ps.rely + 19,
ColorUtils.neiMultiplierString.getColor(),
false);
}
}
@Override
public List<String> handleItemTooltip(GuiRecipe<?> gui, ItemStack stack, List<String> currenttip, int recipeIndex) {
return currenttip;
private static FluidStack getFluidFromNeiItem(ItemStack stack) {
FluidStack fluid = StackInfo.getFluid(stack);
return fluid != null ? fluid : FluidUtil.getFluidFromItem(stack);
}
@Override
public List<String> handleTooltip(GuiRecipe<?> gui, List<String> currenttip, int recipeIndex) {
final InnerVatRecipe rec = (InnerVatRecipe) arecipes.get(recipeIndex);
final Point pos = GuiDraw.getMousePosition();
final Point offset = gui.getRecipePosition(recipeIndex);
final Point relMouse = new Point(pos.x - gui.guiLeft - offset.x, pos.y - gui.guiTop - offset.y);
if (inTankBounds.contains(relMouse) && rec.inFluid != null && rec.inFluid.getFluid() != null) {
currenttip.add(rec.inFluid.getFluid().getLocalizedName(rec.inFluid));
currenttip.add(EnumChatFormatting.GRAY.toString() + rec.getInputFluidAmount() + " " + Fluids.MB());
} else if (outTankBounds.contains(relMouse) && rec.result != null && rec.result.getFluid() != null) {
currenttip.add(rec.result.getFluid().getLocalizedName(rec.result));
currenttip.add(EnumChatFormatting.GRAY.toString() + rec.getResultFluidAmount() + " " + Fluids.MB());
}
return super.handleTooltip(gui, currenttip, recipeIndex);
}
@Override
public boolean mouseClicked(GuiRecipe<?> gui, int button, int recipeIndex) {
if (button == 0) {
if (this.transferFluidTanks(gui, recipeIndex, false)) {
return true;
}
} else if (button == 1) {
if (this.transferFluidTanks(gui, recipeIndex, true)) {
return true;
}
}
return super.mouseClicked(gui, button, recipeIndex);
}
private boolean transferFluidTanks(GuiRecipe<?> gui, int recipeIndex, boolean usage) {
InnerVatRecipe rec = (InnerVatRecipe) arecipes.get(recipeIndex);
Point pos = GuiDraw.getMousePosition();
Point offset = gui.getRecipePosition(recipeIndex);
Point relMouse = new Point(pos.x - gui.guiLeft - offset.x, pos.y - gui.guiTop - offset.y);
if (inTankBounds.contains(relMouse)) {
transferFluidTank(rec.inFluid, usage);
} else if (outTankBounds.contains(relMouse)) {
transferFluidTank(rec.result, usage);
}
return false;
}
private boolean transferFluidTank(FluidStack tank, boolean usage) {
if (tank != null && tank.amount > 0) {
if (usage) {
if (!GuiUsageRecipe.openRecipeGui("liquid", new Object[] { tank.copy() })) {
return false;
}
} else {
if (!GuiCraftingRecipe.openRecipeGui("liquid", new Object[] { tank.copy() })) {
return false;
}
}
return true;
}
return false;
private static FluidStack withAmount(FluidStack fluid, int amount) {
FluidStack copy = fluid.copy();
copy.amount = amount;
return copy;
}
public List<ItemStack> getInputs(RecipeInput input) {
@@ -279,20 +198,32 @@ public class VatRecipeHandler extends TemplateRecipeHandler {
public class InnerVatRecipe extends TemplateRecipeHandler.CachedRecipe {
private final List<PositionedStack> inputs = new ArrayList<>();
private final ItemStackMap<Float> firstItemMultiplier = new ItemStackMap();
private final ItemStackMap<Float> secondItemMultiplier = new ItemStackMap();
private final ItemStackMap<Float> firstItemMultiplier = new ItemStackMap<Float>();
private final ItemStackMap<Float> secondItemMultiplier = new ItemStackMap<Float>();
private final Map<FluidStack, Float> fluidMultiplier = new HashMap<>();
private final FluidStack resultFluid;
private final int energy;
private final FluidStack result;
private FluidStack inFluid;
private int inTankIndex = -1;
private int lastInputAmount;
private PositionedStack resultTank;
private int lastResultAmount;
public int getEnergy() {
return energy;
}
@Override
public List<PositionedStack> getIngredients() {
return getCycledIngredients(cycleticks / 30, this.inputs);
if (this.inTankIndex >= 0) {
int amount = getInputFluidAmount();
if (amount != this.lastInputAmount) {
this.lastInputAmount = amount;
this.inputs.set(this.inTankIndex, createTank(withAmount(this.inFluid, amount), 25, 1));
}
}
return this.inputs;
}
public int getInputFluidAmount() {
@@ -321,7 +252,12 @@ public class VatRecipeHandler extends TemplateRecipeHandler {
@Override
public PositionedStack getResult() {
return null;
int amount = getResultFluidAmount();
if (amount != this.lastResultAmount || this.resultTank == null) {
this.lastResultAmount = amount;
this.resultTank = createTank(withAmount(this.resultFluid, amount), 127, 1);
}
return this.resultTank;
}
public InnerVatRecipe(int energy, RecipeInput[] ingredients, FluidStack result) {
@@ -355,15 +291,28 @@ public class VatRecipeHandler extends TemplateRecipeHandler {
}
// Item stacks must stay at indices 0/1: getFirstItemMultiplier()/getSecondItemMultiplier() rely on it.
if (!inputsOne.isEmpty()) {
this.inputs.add(new PositionedStack(inputsOne, 51, 1));
}
if (!inputsTwo.isEmpty()) {
this.inputs.add(new PositionedStack(inputsTwo, 100, 1));
}
this.energy = energy;
this.result = result;
this.resultFluid = result;
if (this.inFluid != null) {
this.inTankIndex = this.inputs.size();
this.lastInputAmount = getInputFluidAmount();
this.inputs.add(createTank(withAmount(this.inFluid, this.lastInputAmount), 25, 1));
}
this.lastResultAmount = getResultFluidAmount();
this.resultTank = createTank(withAmount(this.resultFluid, this.lastResultAmount), 127, 1);
}
private static PositionedStack.Tank createTank(FluidStack fluid, int x, int y) {
return new PositionedStack.Tank(fluid, x, y, 15, 47, FluidContainerRegistry.BUCKET_VOLUME * 8);
}
}
}
@@ -741,10 +741,7 @@ public class TravelController {
for (Table.Cell<Double, Double, BlockCoord> cell : possibleDestinations.cellSet()) {
if (cell.getColumnKey() <= maxDistance) {
// If the client hasn't selected a target, the server shouldn't try to force one,
// but checking if there is one just outside of range (below message) might still
// be useful.
return Optional.empty();
return Optional.of(cell.getValue());
}
}
@@ -1069,12 +1066,9 @@ public class TravelController {
return;
}
// Find the nearest travel anchor within the configured angle (default ~10 degrees).
Optional<BlockCoord> selectedBlock = findBlocksWithinAngle(
player,
candidates.keySet(),
Config.travelAnchorSnapAngle,
Double.MAX_VALUE).values().stream().findFirst();
// Find the nearest travel anchor within roughly 10 degrees.
Optional<BlockCoord> selectedBlock = findBlocksWithinAngle(player, candidates.keySet(), 0.175, Double.MAX_VALUE)
.values().stream().findFirst();
selectedCoord = selectedBlock.orElse(null);
}
@@ -10,10 +10,7 @@ import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.IIcon;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
@@ -166,13 +163,14 @@ public class BlockTravelAnchor extends BlockEio
public static void sendPrivateChatMessage(EntityPlayer player, UserIdent owner) {
if (!player.isSneaking()) {
IChatComponent ownerName = new ChatComponentText(owner.getPlayerName());
ownerName.getChatStyle().setColor(EnumChatFormatting.RED);
ChatUtil.sendNoSpam(
player,
new ChatComponentTranslation(
EnderIO.lang.addPrefix("gui.travelAccessable.privateBlock"),
ownerName));
EnderIO.lang.localize("gui.travelAccessable.privateBlock1") + " "
+ EnumChatFormatting.RED
+ owner.getPlayerName()
+ EnumChatFormatting.WHITE
+ " "
+ EnderIO.lang.localize("gui.travelAccessable.privateBlock2"));
}
}
@@ -11,9 +11,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.play.client.C08PacketPlayerBlockPlacement;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ChatComponentText;
import net.minecraft.util.ChatComponentTranslation;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
@@ -105,9 +103,8 @@ public class ItemCoordSelector extends Item implements IResourceTooltipProvider
}
if (!world.isRemote) {
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemCoordSelector.chat.setCoords"),
bc.chatString()));
new ChatComponentText(
EnderIO.lang.localize("itemCoordSelector.chat.setCoords", bc.chatString())));
}
}
@@ -119,9 +116,11 @@ public class ItemCoordSelector extends Item implements IResourceTooltipProvider
}
if (!world.isRemote) {
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemCoordSelector.chat.setDimension"),
dimensionComponent(dim)));
new ChatComponentText(
EnderIO.lang.localize(
"itemCoordSelector.chat.setDimension",
EnumChatFormatting.GREEN.toString(),
Integer.toString(dim))));
}
}
@@ -195,29 +194,21 @@ public class ItemCoordSelector extends Item implements IResourceTooltipProvider
private void onCoordsChanged(EntityPlayer player, BlockCoord bc) {
if (!player.worldObj.isRemote) {
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemCoordSelector.chat.newCoords"),
bc.chatString()));
new ChatComponentText(EnderIO.lang.localize("itemCoordSelector.chat.newCoords", bc.chatString())));
}
}
private void onDimensionChanged(EntityPlayer player, int dim) {
if (!player.worldObj.isRemote) {
player.addChatMessage(
new ChatComponentTranslation(
EnderIO.lang.addPrefix("itemCoordSelector.chat.newDimension"),
dimensionComponent(dim)));
new ChatComponentText(
EnderIO.lang.localize(
"itemCoordSelector.chat.newDimension",
EnumChatFormatting.GREEN.toString(),
Integer.toString(dim))));
}
}
private static IChatComponent dimensionComponent(int dim) {
// Color the argument itself: chat resets formatting after each component, so a code in the lang string
// doesn't carry over to it.
IChatComponent component = new ChatComponentText(Integer.toString(dim));
component.getChatStyle().setColor(EnumChatFormatting.GREEN);
return component;
}
public void setCoords(ItemStack stack, BlockCoord bc) {
stack.stackTagCompound.setBoolean("default", false);
bc.writeToNBT(stack.stackTagCompound);
@@ -640,7 +640,8 @@ enderio.gui.mjReader.insertedInto=bude vložen do:
enderio.gui.mjReader.noItems=Nepřijímá zádné předměty.
enderio.gui.mjReader.noItem=Nemůže přijmout
enderio.gui.mjReader.receiveItems=Může přijmout předměty z:
enderio.gui.mjReader.receiveItem=Může přijmout %s z:
enderio.gui.mjReader.receiveItem1=Může přijmout
enderio.gui.mjReader.receiveItem2=z:
#CapactorBank
enderio.gui.capBank.inputRs=Vstupní ruditový mód
@@ -683,7 +684,8 @@ enderio.stirlingGenerator.output=Generuje:
enderio.stirlingGenerator.burnRate=Hodnota spalování:
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Pouze %s může změnit nastavení tohoto bloku.
enderio.gui.travelAccessable.privateBlock1=Pouze
enderio.gui.travelAccessable.privateBlock2=může změnit nastavení tohoto bloku.
enderio.gui.travelAccessable.public=Veřejné
enderio.gui.travelAccessable.private=Soukromé
enderio.gui.travelAccessable.protected=Chráněné
@@ -1059,8 +1061,8 @@ item.itemCoordSelector.tooltip.detailed.line5=select that specific block.
item.itemCoordSelector.tooltip.detailed.line6=Can select from a distance.
enderio.itemCoordSelector.chat.newCoords=New Coords: %s
enderio.itemCoordSelector.chat.setCoords=Set Coords: %s
enderio.itemCoordSelector.chat.newDimension=New Dimension: %s
enderio.itemCoordSelector.chat.setDimension=Set Dimension: %s
enderio.itemCoordSelector.chat.newDimension=New Dimension: %s%s
enderio.itemCoordSelector.chat.setDimension=Set Dimension: %s%s
enderio.item.itemSoulVessel.tooltip.health=Health:
enderio.item.itemSoulVessel.tooltip.fluidname=Fluid Name:
enderio.item.itemSoulVessel.tooltip.color=Color:
@@ -684,14 +684,8 @@ item.itemCoordSelector.tooltip.detailed.line5=den spezifischen Block auszuwähle
item.itemCoordSelector.tooltip.detailed.line6=Kann aus einer Entfernung auswählen
enderio.itemCoordSelector.chat.newCoords=Neue Koordinaten: %s
enderio.itemCoordSelector.chat.setCoords=Festgelegte Koordinaten: %s
enderio.itemCoordSelector.chat.newDimension=Neue Dimension: %s
enderio.itemCoordSelector.chat.setDimension=Festgelegte Dimension: %s
enderio.itemConduitProbe.chat.copied=Conduit Einstellungen kopiert
enderio.itemOCConduit.chat.channel=Kanal %s zu %s
enderio.itemOCConduit.chat.connectedTo=Verbunden mit: %s
enderio.itemOCConduit.chat.nodeAt=%s zu %s
enderio.itemOCConduit.chat.noConnections=Keine Verbindungen an %s
enderio.itemOCConduit.chat.noNetwork=Netzwerk nicht verbunden mit %s
enderio.itemCoordSelector.chat.newDimension=Neue Dimension: %s%s
enderio.itemCoordSelector.chat.setDimension=Festgelegte Dimension: %s%s
#Painter
tile.blockPainter.name=Färbemaschine
@@ -1047,7 +1041,8 @@ enderio.gui.mjReader.insertedInto=wird insertiert nach:
enderio.gui.mjReader.noItems=Empfängt keine Items.
enderio.gui.mjReader.noItem=Kann nicht empfangen
enderio.gui.mjReader.receiveItems=Kann Items empfangen von:
enderio.gui.mjReader.receiveItem=Kann %s empfangen von:
enderio.gui.mjReader.receiveItem1=Kann
enderio.gui.mjReader.receiveItem2=empfangen von:
#CapactorBank
enderio.gui.capBank.inputRs=Input-Redstone-Modus
@@ -1101,7 +1096,8 @@ enderio.stirlingGenerator.upgrades={0} gibt eine Effizienz von {2}{1,number,#.#}
enderio.stirlingGenerator.remaining={0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF verbleibend
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Nur %s darf die Einstellungen dieses Blocks ändern.
enderio.gui.travelAccessable.privateBlock1=Nur
enderio.gui.travelAccessable.privateBlock2=darf die Einstellungen dieses Blocks ändern.
enderio.gui.travelAccessable.public=Öffentlich
enderio.gui.travelAccessable.private=Privat
enderio.gui.travelAccessable.protected=Geschützt
@@ -651,8 +651,6 @@ tile.blockWeatherObelisk.tooltip.detailed.line4=Liquid Sunshine: Sun
tile.blockWeatherObelisk.tooltip.detailed.line5=Cloud Seed: Rain
tile.blockWeatherObelisk.tooltip.detailed.line6=Concentrated Cloud Seed: Thunder
tile.blockInhibitorObelisk.name=Inhibitor Obelisk
tile.blockBuffer.name=Buffer
tile.blockBuffer.item.name=Item Buffer
tile.blockBuffer.power.name=Power Buffer
@@ -781,14 +779,8 @@ item.itemCoordSelector.tooltip.detailed.line5=select that specific block.
item.itemCoordSelector.tooltip.detailed.line6=Can select from a distance.
enderio.itemCoordSelector.chat.newCoords=New Coords: %s
enderio.itemCoordSelector.chat.setCoords=Set Coords: %s
enderio.itemCoordSelector.chat.newDimension=New Dimension: %s
enderio.itemCoordSelector.chat.setDimension=Set Dimension: %s
enderio.itemConduitProbe.chat.copied=Copied conduit settings
enderio.itemOCConduit.chat.channel=Channel %s at %s
enderio.itemOCConduit.chat.connectedTo=Connected to: %s
enderio.itemOCConduit.chat.nodeAt=%s at %s
enderio.itemOCConduit.chat.noConnections=No connections at %s
enderio.itemOCConduit.chat.noNetwork=No network at %s
enderio.itemCoordSelector.chat.newDimension=New Dimension: %s%s
enderio.itemCoordSelector.chat.setDimension=Set Dimension: %s%s
#Painter
tile.blockPainter.name=Painting Machine
@@ -1154,8 +1146,8 @@ enderio.gui.mjReader.insertedInto=will be inserted into:
enderio.gui.mjReader.noItems=Receives no items.
enderio.gui.mjReader.noItem=Can not receive
enderio.gui.mjReader.receiveItems=Can receive items from:
enderio.gui.mjReader.receiveItem=Can receive %s from:
enderio.gui.mjReader.distance=Distance [%s]
enderio.gui.mjReader.receiveItem1=Can receive
enderio.gui.mjReader.receiveItem2=from:
#CapactorBank
enderio.gui.capBank.inputRs=Input Redstone Mode
@@ -1216,7 +1208,8 @@ enderio.gui.blockBuffer.omni.name=Omni Buffer
enderio.gui.blockBuffer.creative.name=Creative Buffer
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Only %s may change this blocks settings.
enderio.gui.travelAccessable.privateBlock1=Only
enderio.gui.travelAccessable.privateBlock2=may change this blocks settings.
enderio.gui.travelAccessable.public=Public
enderio.gui.travelAccessable.private=Private
enderio.gui.travelAccessable.protected=Protected
@@ -517,8 +517,8 @@ item.itemCoordSelector.tooltip.detailed.line3=Shift+Clic-derecho a un bloque par
item.itemCoordSelector.tooltip.detailed.line4=Se puede seleccionar desde la distancia.
enderio.itemCoordSelector.chat.newCoords=Nuevas Coordenadas: %s
enderio.itemCoordSelector.chat.setCoords=Establecer Coordenadas: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s%s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s%s
#Painter
tile.blockPainter.name=Máquina de Pintar
@@ -790,7 +790,8 @@ enderio.gui.mjReader.insertedInto=Será insertado a:
enderio.gui.mjReader.noItems=No recibe objetos.
enderio.gui.mjReader.noItem=No puede recibir.
enderio.gui.mjReader.receiveItems=Puede recibir objetos de:
enderio.gui.mjReader.receiveItem=Puede recibir %s de:
enderio.gui.mjReader.receiveItem1=Puede recibir
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Modo de Entrada de Redstone
@@ -844,7 +845,8 @@ enderio.stirlingGenerator.upgrades={0} proporciona {2}{1,number,#.#}x{3} de efic
enderio.stirlingGenerator.remaining={0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF Restantes.
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Solo %s puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.privateBlock1=Solo
enderio.gui.travelAccessable.privateBlock2=Puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -519,8 +519,8 @@ item.itemCoordSelector.tooltip.detailed.line3=Shift+Clic-derecho a un bloque par
item.itemCoordSelector.tooltip.detailed.line4=Se puede seleccionar desde la distancia.
enderio.itemCoordSelector.chat.newCoords=Nuevas Coordenadas: %s
enderio.itemCoordSelector.chat.setCoords=Establecer Coordenadas: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s%s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s%s
#Painter
tile.blockPainter.name=Máquina de Pintar
@@ -792,7 +792,8 @@ enderio.gui.mjReader.insertedInto=Será insertado a:
enderio.gui.mjReader.noItems=No recibe objetos.
enderio.gui.mjReader.noItem=No puede recibir.
enderio.gui.mjReader.receiveItems=Puede recibir objetos de:
enderio.gui.mjReader.receiveItem=Puede recibir %s de:
enderio.gui.mjReader.receiveItem1=Puede recibir
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Modo de Entrada de Redstone
@@ -846,7 +847,8 @@ enderio.stirlingGenerator.upgrades={0} proporciona {2}{1,number,#.#}x{3} de efic
enderio.stirlingGenerator.remaining={0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF Restantes.
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Solo %s puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.privateBlock1=Solo
enderio.gui.travelAccessable.privateBlock2=Puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -517,8 +517,8 @@ item.itemCoordSelector.tooltip.detailed.line3=Shift+Clic-derecho a un bloque par
item.itemCoordSelector.tooltip.detailed.line4=Se puede seleccionar desde la distancia.
enderio.itemCoordSelector.chat.newCoords=Nuevas Coordenadas: %s
enderio.itemCoordSelector.chat.setCoords=Establecer Coordenadas: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s%s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s%s
#Painter
tile.blockPainter.name=Máquina de Pintar
@@ -790,7 +790,8 @@ enderio.gui.mjReader.insertedInto=Será insertado a:
enderio.gui.mjReader.noItems=No recibe objetos.
enderio.gui.mjReader.noItem=No puede recibir.
enderio.gui.mjReader.receiveItems=Puede recibir objetos de:
enderio.gui.mjReader.receiveItem=Puede recibir %s de:
enderio.gui.mjReader.receiveItem1=Puede recibir
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Modo de Entrada de Redstone
@@ -844,7 +845,8 @@ enderio.stirlingGenerator.upgrades={0} proporciona {2}{1,number,#.#}x{3} de efic
enderio.stirlingGenerator.remaining={0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF Restantes.
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Solo %s puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.privateBlock1=Solo
enderio.gui.travelAccessable.privateBlock2=Puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -517,8 +517,8 @@ item.itemCoordSelector.tooltip.detailed.line3=Shift+Clic-derecho a un bloque par
item.itemCoordSelector.tooltip.detailed.line4=Se puede seleccionar desde la distancia.
enderio.itemCoordSelector.chat.newCoords=Nuevas Coordenadas: %s
enderio.itemCoordSelector.chat.setCoords=Establecer Coordenadas: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s%s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s%s
#Painter
tile.blockPainter.name=Máquina de Pintar
@@ -790,7 +790,8 @@ enderio.gui.mjReader.insertedInto=Será insertado a:
enderio.gui.mjReader.noItems=No recibe objetos.
enderio.gui.mjReader.noItem=No puede recibir.
enderio.gui.mjReader.receiveItems=Puede recibir objetos de:
enderio.gui.mjReader.receiveItem=Puede recibir %s de:
enderio.gui.mjReader.receiveItem1=Puede recibir
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Modo de Entrada de Redstone
@@ -844,7 +845,8 @@ enderio.stirlingGenerator.upgrades={0} proporciona {2}{1,number,#.#}x{3} de efic
enderio.stirlingGenerator.remaining={0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF Restantes.
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Solo %s puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.privateBlock1=Solo
enderio.gui.travelAccessable.privateBlock2=Puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -517,8 +517,8 @@ item.itemCoordSelector.tooltip.detailed.line3=Shift+Clic-derecho a un bloque par
item.itemCoordSelector.tooltip.detailed.line4=Se puede seleccionar desde la distancia.
enderio.itemCoordSelector.chat.newCoords=Nuevas Coordenadas: %s
enderio.itemCoordSelector.chat.setCoords=Establecer Coordenadas: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s
enderio.itemCoordSelector.chat.newDimension=Nueva Dimensión: %s%s
enderio.itemCoordSelector.chat.setDimension=Establecer Dimensión: %s%s
#Painter
tile.blockPainter.name=Máquina de Pintar
@@ -788,7 +788,8 @@ enderio.gui.mjReader.insertedInto=Será insertado a:
enderio.gui.mjReader.noItems=No recibe objetos.
enderio.gui.mjReader.noItem=No puede recibir.
enderio.gui.mjReader.receiveItems=Puede recibir objetos de:
enderio.gui.mjReader.receiveItem=Puede recibir %s de:
enderio.gui.mjReader.receiveItem1=Puede recibir
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Modo de Entrada de Redstone
@@ -842,7 +843,8 @@ enderio.stirlingGenerator.upgrades={0} proporciona {2}{1,number,#.#}x{3} de efic
enderio.stirlingGenerator.remaining={0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF Restantes.
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Solo %s puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.privateBlock1=Solo
enderio.gui.travelAccessable.privateBlock2=Puede cambiar los ajustes de este bloque.
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -520,8 +520,8 @@ item.itemCoordSelector.tooltip.detailed.line5=sélectionner ce bloc.
item.itemCoordSelector.tooltip.detailed.line6=Peut sélectioner à distance.
enderio.itemCoordSelector.chat.newCoords=Nouvelles Coords: %s
enderio.itemCoordSelector.chat.setCoords=Définir Coords: %s
enderio.itemCoordSelector.chat.newDimension=Nouvelle Dimension: %s
enderio.itemCoordSelector.chat.setDimension=Définir Dimension: %s
enderio.itemCoordSelector.chat.newDimension=Nouvelle Dimension: %s%s
enderio.itemCoordSelector.chat.setDimension=Définir Dimension: %s%s
#Painter
tile.blockPainter.name=Machine à Enduction
@@ -810,7 +810,8 @@ enderio.gui.mjReader.insertedInto=sera inséré dans :
enderio.gui.mjReader.noItems=Ne reçoit aucun objet.
enderio.gui.mjReader.noItem=Ne peut pas recevoir
enderio.gui.mjReader.receiveItems=Peut recevoir des objet de :
enderio.gui.mjReader.receiveItem=Peut recevoir %s de :
enderio.gui.mjReader.receiveItem1=Peut recevoir
enderio.gui.mjReader.receiveItem2=de :
#CapacitorBank
enderio.gui.capBank.inputRs=Mode Redstone Entrée
@@ -864,7 +865,8 @@ enderio.stirlingGenerator.upgrades={0} donne efficacité {2}{1,number,#.#}x{3}
enderio.stirlingGenerator.remaining=Reste {0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Seulement %s peut modifier les paramètres de ce bloc.
enderio.gui.travelAccessable.privateBlock1=Seulement
enderio.gui.travelAccessable.privateBlock2=peut modifier les paramètres de ce bloc.
enderio.gui.travelAccessable.public=Publique
enderio.gui.travelAccessable.private=Privé
enderio.gui.travelAccessable.protected=Protégé
@@ -678,7 +678,8 @@ enderio.gui.mjReader.insertedInto=will be inserted into:
enderio.gui.mjReader.noItems=Receives no items.
enderio.gui.mjReader.noItem=Can not receive
enderio.gui.mjReader.receiveItems=Can receive items from:
enderio.gui.mjReader.receiveItem=Can receive %s from:
enderio.gui.mjReader.receiveItem1=Can receive
enderio.gui.mjReader.receiveItem2=from:
#CapactorBank
enderio.gui.capBank.inputRs=Input Redstone Mode
@@ -723,7 +724,8 @@ enderio.stirlingGenerator.output=Generating:
enderio.stirlingGenerator.burnRate=Burn Rate:
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Only %s may change this blocks settings.
enderio.gui.travelAccessable.privateBlock1=Only
enderio.gui.travelAccessable.privateBlock2=may change this blocks settings.
enderio.gui.travelAccessable.public=Public
enderio.gui.travelAccessable.private=Private
enderio.gui.travelAccessable.protected=Protected
@@ -179,7 +179,8 @@ enderio.gui.mjReader.insertedInto=zostanie wysłany do:
enderio.gui.mjReader.noItems=Nie otrzymuje rzeczy.
enderio.gui.mjReader.noItem=Nie można przesłać
enderio.gui.mjReader.receiveItems=Może otrzymać rzeczy z:
enderio.gui.mjReader.receiveItem=Przyjmie %s z:
enderio.gui.mjReader.receiveItem1=Przyjmie
enderio.gui.mjReader.receiveItem2=z:
#CapactorBank
enderio.gui.capBank.inputRs=Włącznik przyrostu energii
@@ -207,7 +208,8 @@ enderio.gui.alloy.mode.alloy=Tylko stopy
enderio.gui.alloy.mode.furnace=Tylko jak zwykły piec
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Można %s zmienić tylko te ustawienia.
enderio.gui.travelAccessable.privateBlock1=Można
enderio.gui.travelAccessable.privateBlock2=zmienić tylko te ustawienia.
enderio.gui.travelAccessable.public=Publiczny
enderio.gui.travelAccessable.private=Prywatny
enderio.gui.travelAccessable.protected=Chroniony
@@ -728,7 +728,8 @@ enderio.gui.mjReader.insertedInto=vai ser inserido em:
enderio.gui.mjReader.noItems=Não recebe itens.
enderio.gui.mjReader.noItem=Não pode receber
enderio.gui.mjReader.receiveItems=Pode receber itens de:
enderio.gui.mjReader.receiveItem=Pode receber %s de:
enderio.gui.mjReader.receiveItem1=Pode receber
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Entrada Redstone Mode
@@ -773,7 +774,8 @@ enderio.stirlingGenerator.output=Gerando:
enderio.stirlingGenerator.burnRate=Taxa de Queima:
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Apenas %s pode mudar as configurações desse bloco
enderio.gui.travelAccessable.privateBlock1=Apenas
enderio.gui.travelAccessable.privateBlock2=pode mudar as configurações desse bloco
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -730,7 +730,8 @@ enderio.gui.mjReader.insertedInto=vai ser inserido em:
enderio.gui.mjReader.noItems=Não recebe itens.
enderio.gui.mjReader.noItem=Não pode receber
enderio.gui.mjReader.receiveItems=Pode receber itens de:
enderio.gui.mjReader.receiveItem=Pode receber %s de:
enderio.gui.mjReader.receiveItem1=Pode receber
enderio.gui.mjReader.receiveItem2=de:
#CapactorBank
enderio.gui.capBank.inputRs=Entrada Redstone Mode
@@ -775,7 +776,8 @@ enderio.stirlingGenerator.output=A Gerar:
enderio.stirlingGenerator.burnRate=Taxa de Queima:
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Apenas %s pode mudar as configurações desse bloco
enderio.gui.travelAccessable.privateBlock1=Apenas
enderio.gui.travelAccessable.privateBlock2=pode mudar as configurações desse bloco
enderio.gui.travelAccessable.public=Público
enderio.gui.travelAccessable.private=Privado
enderio.gui.travelAccessable.protected=Protegido
@@ -727,14 +727,8 @@ item.itemCoordSelector.tooltip.detailed.line5=выбрать конкретны
item.itemCoordSelector.tooltip.detailed.line6=Можно выбирать блоки на расстоянии.
enderio.itemCoordSelector.chat.newCoords=Новые координаты: %s
enderio.itemCoordSelector.chat.setCoords=Выбранные координаты: %s
enderio.itemCoordSelector.chat.newDimension=Новое измерение: %s
enderio.itemCoordSelector.chat.setDimension=Выбранное измерение: %s
enderio.itemConduitProbe.chat.copied=Настройки труб скопированы
enderio.itemOCConduit.chat.channel=Канал %s на %s
enderio.itemOCConduit.chat.connectedTo=Подключено к: %s
enderio.itemOCConduit.chat.nodeAt=%s на %s
enderio.itemOCConduit.chat.noConnections=Нет подключений на %s
enderio.itemOCConduit.chat.noNetwork=Нет сети на %s
enderio.itemCoordSelector.chat.newDimension=Новое измерение: %s%s
enderio.itemCoordSelector.chat.setDimension=Выбранное измерение: %s%s
#Painter
tile.blockPainter.name=Покрасочный механизм
@@ -1092,8 +1086,8 @@ enderio.gui.mjReader.insertedInto=будет направлен:
enderio.gui.mjReader.noItems=Не получает предметов.
enderio.gui.mjReader.noItem=Не может получать
enderio.gui.mjReader.receiveItems=Может получать предметы от:
enderio.gui.mjReader.receiveItem=Может получать %s от:
enderio.gui.mjReader.distance=Расстояние [%s]
enderio.gui.mjReader.receiveItem1=Может получать
enderio.gui.mjReader.receiveItem2=от:
#CapactorBank
enderio.gui.capBank.inputRs=Режим красного камня на входе
@@ -1147,7 +1141,8 @@ enderio.stirlingGenerator.upgrades={0} даёт {2}{1,number,#.#}x{3} эффек
enderio.stirlingGenerator.remaining=Осталось {0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=Только %s может изменить настройки этого блока.
enderio.gui.travelAccessable.privateBlock1=Только
enderio.gui.travelAccessable.privateBlock2=может управлять настройками этого блока.
enderio.gui.travelAccessable.public=Общедоступный
enderio.gui.travelAccessable.private=Частный
enderio.gui.travelAccessable.protected=Защищённый
@@ -608,8 +608,6 @@ tile.blockExperienceObelisk.tooltip.detailed.line3=至相邻的储罐中
tile.blockWeatherObelisk.name=气象方尖碑
tile.blockWeatherObelisk.tooltip.detailed.line1=改变当前天气
tile.blockInhibitorObelisk.name=传送抑制方尖碑
tile.blockBuffer.item.name=物品缓存器
tile.blockBuffer.power.name=能量缓存器
tile.blockBuffer.omni.name=多功能缓存器
@@ -729,8 +727,8 @@ item.itemCoordSelector.tooltip.detailed.line5=选取特定方块.
item.itemCoordSelector.tooltip.detailed.line6=可以在远处选取.
enderio.itemCoordSelector.chat.newCoords=新坐标: %s
enderio.itemCoordSelector.chat.setCoords=设置坐标: %s
enderio.itemCoordSelector.chat.newDimension=新世界: %s
enderio.itemCoordSelector.chat.setDimension=设置世界: %s
enderio.itemCoordSelector.chat.newDimension=新世界: %s%s
enderio.itemCoordSelector.chat.setDimension=设置世界: %s%s
#Painter
tile.blockPainter.name=喷涂机
@@ -1088,7 +1086,8 @@ enderio.gui.mjReader.insertedInto=会被输入于:
enderio.gui.mjReader.noItems=未接收到物品.
enderio.gui.mjReader.noItem=无法接收
enderio.gui.mjReader.receiveItems=合法的接收对象:
enderio.gui.mjReader.receiveItem=可以接收 %s 从:
enderio.gui.mjReader.receiveItem1=可以接收
enderio.gui.mjReader.receiveItem2=从:
#CapactorBank
enderio.gui.capBank.inputRs=输入红石控制
@@ -1142,7 +1141,8 @@ enderio.stirlingGenerator.upgrades={0} 提供 {2}{1,number,#.#}x{3} 的效率
enderio.stirlingGenerator.remaining=残余 {0,number,percent}|{1,choice,0#|0<{1}m }{2,number}s|{3,number,#,###} RF
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=只有 %s 才能改变该方块的设置.
enderio.gui.travelAccessable.privateBlock1=只有
enderio.gui.travelAccessable.privateBlock2=才能改变该方块的设置.
enderio.gui.travelAccessable.public=公共
enderio.gui.travelAccessable.private=私有
enderio.gui.travelAccessable.protected=被保护
@@ -698,7 +698,8 @@ enderio.gui.mjReader.insertedInto=會被輸入于:
enderio.gui.mjReader.noItems=未接收到物品.
enderio.gui.mjReader.noItem=無法接收
enderio.gui.mjReader.receiveItems=合法的接收對象:
enderio.gui.mjReader.receiveItem=可以接收 %s 從:
enderio.gui.mjReader.receiveItem1=可以接收
enderio.gui.mjReader.receiveItem2=從:
#CapactorBank
enderio.gui.capBank.inputRs=輸入紅石控制
@@ -743,7 +744,8 @@ enderio.stirlingGenerator.output=產能速率:
enderio.stirlingGenerator.burnRate=燃燒速率:
#Travel Blocks
enderio.gui.travelAccessable.privateBlock=只有 %s 才能改變該方塊的設置.
enderio.gui.travelAccessable.privateBlock1=只有
enderio.gui.travelAccessable.privateBlock2=才能改變該方塊的設置.
enderio.gui.travelAccessable.public=公共
enderio.gui.travelAccessable.private=私有
enderio.gui.travelAccessable.protected=被保護
@@ -1078,8 +1080,8 @@ item.itemCoordSelector.tooltip.detailed.line5=select that specific block.
item.itemCoordSelector.tooltip.detailed.line6=Can select from a distance.
enderio.itemCoordSelector.chat.newCoords=New Coords: %s
enderio.itemCoordSelector.chat.setCoords=Set Coords: %s
enderio.itemCoordSelector.chat.newDimension=New Dimension: %s
enderio.itemCoordSelector.chat.setDimension=Set Dimension: %s
enderio.itemCoordSelector.chat.newDimension=New Dimension: %s%s
enderio.itemCoordSelector.chat.setDimension=Set Dimension: %s%s
enderio.item.itemSoulVessel.tooltip.health=Health:
enderio.item.itemSoulVessel.tooltip.fluidname=Fluid Name:
enderio.item.itemSoulVessel.tooltip.color=Color: