Conduit gui 1.12.2 backport (#74)

* Update EnderCore

* Backport BaseSettingsPanel

* Add the 1.12.2 gui textures

* First pass ItemSettings GUI

* Item conduit&filter gui

* Fix broken texture height on other panels

* Improved fluid conduit gui

* Make sure inventory slots are hidden by default on conduit guis

* Clear ghost slots on tab changes

* Update EnderCore version
This commit is contained in:
Raven Szewczyk authored and GitHub committed 2022-06-26 09:56:10 +02:00
1 parent f8e96eaa59
commit fab7b9b354
39 files changed
+1205 -728

No files matched your search

+4 -1
View File
@@ -20,4 +20,7 @@ indent_size = 2
[*.java]
indent_size = 2
ij_java_space_before_if_parentheses = false
ij_java_space_before_if_parentheses = false
[*.lang]
trim_trailing_whitespace = false
+166 -14
View File
@@ -1,4 +1,4 @@
//version: 1652851397
//version: 1655755555
/*
DO NOT CHANGE THIS FILE!
@@ -12,7 +12,12 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
import org.gradle.internal.logging.text.StyledTextOutput.Style
import org.gradle.internal.logging.text.StyledTextOutputFactory
import java.nio.file.Files
import java.nio.file.Paths
import java.util.concurrent.TimeUnit
import java.util.zip.ZipEntry
import java.util.zip.ZipInputStream
import java.util.zip.ZipOutputStream
buildscript {
repositories {
@@ -105,6 +110,9 @@ checkPropertyExists("developmentEnvironmentUserName")
boolean noPublishedSources = project.findProperty("noPublishedSources") ? project.noPublishedSources.toBoolean() : false
boolean usesMixinDebug = project.findProperty('usesMixinDebug') ?: project.usesMixins.toBoolean()
String channel = project.findProperty('channel') ? project.channel : 'stable'
String mappingsVersion = project.findProperty('mappingsVersion') ? project.mappingsVersion : '12'
String remoteMappings = project.findProperty('remoteMappings') ? project.remoteMappings : 'https://raw.githubusercontent.com/MinecraftForge/FML/1.7.10/conf/'
String javaSourceDir = "src/main/java/"
String scalaSourceDir = "src/main/scala/"
@@ -669,7 +677,103 @@ configure(updateBuildScript) {
description = 'Updates the build script to the latest version'
}
// Deobfuscation
// Parameter Deobfuscation
task deobfParams {
doLast {
String mcpDir = "$project.gradle.gradleUserHomeDir/caches/minecraft/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion"
String mcpZIP = "$mcpDir/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip"
String paramsCSV = "$mcpDir/params.csv"
download.run {
src "https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_$channel/$mappingsVersion-$minecraftVersion/mcp_$channel-$mappingsVersion-${minecraftVersion}.zip"
dest mcpZIP
overwrite false
}
if(!file(paramsCSV).exists()) {
println("Extracting MCP archive ...")
unzip(mcpZIP, mcpDir)
}
println("Parsing params.csv ...")
Map<String, String> params = new HashMap<>()
Files.lines(Paths.get(paramsCSV)).forEach{line ->
String[] cells = line.split(",")
if(cells.length > 2 && cells[0].matches("p_i?\\d+_\\d+_")) {
params.put(cells[0], cells[1])
}
}
out.style(Style.Success).println("Modified ${replaceParams(file("$projectDir/src/main/java"), params)} files!")
out.style(Style.Failure).println("Don't forget to verify that the code still works as before!\n It could be broken due to duplicate variables existing now\n or parameters taking priority over other variables.")
}
}
static int replaceParams(File file, Map<String, String> params) {
int fileCount = 0
if(file.isDirectory()) {
for(File f : file.listFiles()) {
fileCount += replaceParams(f, params)
}
return fileCount
}
println("Visiting ${file.getName()} ...")
try {
String content = new String(Files.readAllBytes(file.toPath()))
int hash = content.hashCode()
params.forEach{key, value ->
content = content.replaceAll(key, value)
}
if(hash != content.hashCode()) {
Files.write(file.toPath(), content.getBytes("UTF-8"))
return 1
}
} catch(Exception e) {
e.printStackTrace()
}
return 0
}
// Credit: bitsnaps (https://gist.github.com/bitsnaps/00947f2dce66f4bbdabc67d7e7b33681)
static unzip(String zipFileName, String outputDir) {
byte[] buffer = new byte[16384]
ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFileName))
ZipEntry zipEntry = zis.getNextEntry()
while (zipEntry != null) {
File newFile = new File(outputDir + File.separator, zipEntry.name)
if (zipEntry.isDirectory()) {
if (!newFile.isDirectory() && !newFile.mkdirs()) {
throw new IOException("Failed to create directory $newFile")
}
} else {
// fix for Windows-created archives
File parent = newFile.parentFile
if (!parent.isDirectory() && !parent.mkdirs()) {
throw new IOException("Failed to create directory $parent")
}
// write file content
FileOutputStream fos = new FileOutputStream(newFile)
int len = 0
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len)
}
fos.close()
}
zipEntry = zis.getNextEntry()
}
zis.closeEntry()
zis.close()
}
configure(deobfParams) {
group = 'forgegradle'
description = 'Rename all obfuscated parameter names inherited from Minecraft classes'
}
// Dependency Deobfuscation
def deobf(String sourceURL) {
try {
@@ -682,7 +786,7 @@ def deobf(String sourceURL) {
fileName = fileName.substring(lastSlash + 1)
}
//get rid of extension:
if(fileName.endsWith(".jar")) {
if(fileName.endsWith(".jar") || fileName.endsWith(".litemod")) {
fileName = fileName.substring(0, fileName.lastIndexOf("."))
}
@@ -694,26 +798,40 @@ def deobf(String sourceURL) {
Collections.reverse(parts)
hostName = String.join(".", parts)
return deobf(sourceURL, hostName + "/" + fileName)
return deobf(sourceURL, "$hostName/$fileName")
} catch(Exception e) {
return deobf(sourceURL, "deobf/" + String.valueOf(sourceURL.hashCode()))
return deobf(sourceURL, "deobf/${sourceURL.hashCode()}")
}
}
// The method above is to be preferred. Use this method if the filename is not at the end of the URL.
def deobf(String sourceURL, String fileName) {
String cacheDir = System.getProperty("user.home") + "/.gradle/caches/"
String bon2Dir = cacheDir + "forge_gradle/deobf"
String bon2File = bon2Dir + "/BON2-2.5.0.jar"
String obfFile = cacheDir + "modules-2/files-2.1/" + fileName + ".jar"
String deobfFile = cacheDir + "modules-2/files-2.1/" + fileName + "-deobf.jar"
def deobf(String sourceURL, String rawFileName) {
String bon2Version = "2.5.1"
String fileName = URLDecoder.decode(rawFileName, "UTF-8")
String cacheDir = "$project.gradle.gradleUserHomeDir/caches"
String bon2Dir = "$cacheDir/forge_gradle/deobf"
String bon2File = "$bon2Dir/BON2-${bon2Version}.jar"
String obfFile = "$cacheDir/modules-2/files-2.1/${fileName}.jar"
String deobfFile = "$cacheDir/modules-2/files-2.1/${fileName}-deobf.jar"
if(file(deobfFile).exists()) {
return files(deobfFile)
}
String mappingsVer
if(remoteMappings) {
String id = "${forgeVersion.split("\\.")[3]}-$minecraftVersion"
String mappingsZIP = "$cacheDir/forge_gradle/maven_downloader/de/oceanlabs/mcp/mcp_snapshot_nodoc/$id/mcp_snapshot_nodoc-${id}.zip"
zipMappings(mappingsZIP, remoteMappings, bon2Dir)
mappingsVer = "snapshot_$id"
} else {
mappingsVer = "${channel}_$mappingsVersion"
}
download.run {
src 'https://github.com/GTNewHorizons/BON2/releases/download/2.5.0/BON2-2.5.0.CUSTOM-all.jar'
src "http://jenkins.usrv.eu:8081/nexus/content/repositories/releases/com/github/parker8283/BON2/$bon2Version-CUSTOM/BON2-$bon2Version-CUSTOM-all.jar"
dest bon2File
quiet true
overwrite false
@@ -727,14 +845,48 @@ def deobf(String sourceURL, String fileName) {
}
exec {
commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', '1.7.10', '--mappingsVer', 'stable_12', '--notch'
commandLine 'java', '-jar', bon2File, '--inputJar', obfFile, '--outputJar', deobfFile, '--mcVer', minecraftVersion, '--mappingsVer', mappingsVer, '--notch'
workingDir bon2Dir
standardOutput = new ByteArrayOutputStream()
standardOutput = new FileOutputStream("${deobfFile}.log")
}
return files(deobfFile)
}
def zipMappings(String zipPath, String url, String bon2Dir) {
File zipFile = new File(zipPath)
if(zipFile.exists()) {
return
}
String fieldsCache = "$bon2Dir/data/fields.csv"
String methodsCache = "$bon2Dir/data/methods.csv"
download.run {
src "${url}fields.csv"
dest fieldsCache
quiet true
}
download.run {
src "${url}methods.csv"
dest methodsCache
quiet true
}
zipFile.getParentFile().mkdirs()
ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(zipFile))
zos.putNextEntry(new ZipEntry("fields.csv"))
Files.copy(Paths.get(fieldsCache), zos)
zos.closeEntry()
zos.putNextEntry(new ZipEntry("methods.csv"))
Files.copy(Paths.get(methodsCache), zos)
zos.closeEntry()
zos.close()
}
// Helper methods
def checkPropertyExists(String propertyName) {
+1 -1
View File
@@ -1,7 +1,7 @@
// Add your dependencies here
dependencies {
compile('com.github.GTNewHorizons:EnderCore:0.2.6:dev')
compile('com.github.GTNewHorizons:EnderCore:0.2.9:dev')
compile('com.github.GTNewHorizons:ForestryMC:4.4.6:dev')
compile('com.github.GTNewHorizons:NotEnoughItems:2.2.15-GTNH:dev')
compile('com.github.GTNewHorizons:BuildCraft:7.1.27:dev')
@@ -5,6 +5,7 @@ import java.text.DecimalFormat;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.potion.Potion;
import net.minecraft.potion.PotionEffect;
import net.minecraft.util.ResourceLocation;
import net.minecraft.world.World;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
@@ -44,7 +45,7 @@ public class CommonProxy {
public void loadIcons() {
;
}
public void load() {
FMLCommonHandler.instance().bus().register(tickTimer);
}
@@ -68,6 +69,13 @@ public class CommonProxy {
protected void onClientTick() {
}
private static final String TEXTURE_PATH = ":textures/gui/23/";
private static final String TEXTURE_EXT = ".png";
public ResourceLocation getGuiTexture(String name) {
return new ResourceLocation(EnderIO.DOMAIN + TEXTURE_PATH + name + TEXTURE_EXT);
}
public final class TickTimer {
@SubscribeEvent
@@ -142,7 +142,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
if (MicroblocksUtil.supportMicroblocks() && IM__addHitEffects(world, target, effectRenderer)) {
return true;
}
IIcon tex = null;
TileConduitBundle cb = (TileConduitBundle) world.getTileEntity(target.blockX, target.blockY, target.blockZ);
@@ -263,7 +263,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
return getPickBlock(target, world, x, y, z, null);
}
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
ItemStack ret = null;
@@ -532,7 +532,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
drop.addAll(con.getDrops());
}
}
BlockCoord bc = te.getLocation();
ConduitUtil.playBreakSound(Block.soundTypeMetal, te.getWorld(), bc.x, bc.y, bc.z);
@@ -699,7 +699,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
if (MicroblocksUtil.supportMicroblocks() && hasMicroblocks(bundle)) {
return false;
}
// Add facade
if(player.isSneaking()) {
return false;
@@ -724,7 +724,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
Util.dropItems(world, fac, x, y, z, false);
}
}
bundle.setFacadeId(facadeID);
bundle.setFacadeMetadata(facadeMeta);
bundle.setFacadeType(FacadeType.values()[facadeType]);
@@ -817,7 +817,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
@Override
public void addCollisionBoxesToList(World world, int x, int y, int z, AxisAlignedBB axisalignedbb, @SuppressWarnings("rawtypes") List arraylist,
Entity par7Entity) {
if (MicroblocksUtil.supportMicroblocks()) {
IM__addCollisionBoxesToList(world, x, y, z, axisalignedbb, arraylist, par7Entity);
}
@@ -1097,7 +1097,7 @@ public class BlockConduitBundle extends BlockEio implements IGuiHandler, IFacade
IConduitBundle bundle = (IConduitBundle) te;
return bundle.getConduit(IRedstoneConduit.class);
}
public ItemStack getMicroblockPickBlock(MovingObjectPosition target, World world, int x, int y, int z, EntityPlayer player) {
return IMultipartSystem.instance.hook_getPickBlock(target, world, x, y, z, player);
}
@@ -1,16 +1,24 @@
package crazypants.enderio.conduit.gui;
import java.awt.Color;
import java.awt.*;
import java.util.ArrayList;
import java.util.List;
import com.enderio.core.client.gui.button.CheckBox;
import com.enderio.core.client.gui.button.IconButton;
import com.enderio.core.client.gui.widget.GuiToolTip;
import com.enderio.core.client.handlers.SpecialTooltipHandler;
import crazypants.enderio.conduit.item.FunctionUpgrade;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import org.lwjgl.opengl.GL11;
import net.minecraft.util.ResourceLocation;
import javax.annotation.Nonnull;
import com.enderio.core.api.client.gui.ITabPanel;
import com.enderio.core.api.client.render.IWidgetIcon;
import com.enderio.core.client.gui.button.MultiIconButton;
import com.enderio.core.client.render.ColorUtil;
import crazypants.enderio.EnderIO;
@@ -20,76 +28,206 @@ import crazypants.enderio.conduit.packet.PacketConnectionMode;
import crazypants.enderio.gui.IconEIO;
import crazypants.enderio.network.PacketHandler;
public class BaseSettingsPanel implements ITabPanel {
static final int PREV_MODE_B = 327;
static final int NEXT_MODE_B = 328;
static final int ID_INSERT_ENABLED = 327;
static final int ID_EXTRACT_ENABLED = 328;
protected static final int ID_INSERT_FILTER_OPTIONS = 329;
protected static final int ID_EXTRACT_FILTER_OPTIONS = 330;
protected final int ID_ENABLED = 331;
protected final IconEIO icon;
protected final GuiExternalConnection gui;
protected final IConduit con;
protected final String typeName;
protected final @Nonnull IWidgetIcon icon;
protected final @Nonnull GuiExternalConnection gui;
protected @Nonnull IConduit con;
protected final @Nonnull String typeName;
protected final @Nonnull ResourceLocation texture;
protected MultiIconButton leftArrow;
protected MultiIconButton rightArrow;
protected String modeLabel;
protected ConnectionMode oldConnectionMode;
private @Nonnull String inputHeading;
private @Nonnull String outputHeading;
private boolean insertEnabled = false;
private boolean extractEnabled = false;
private boolean enabled = false;
private final @Nonnull CheckBox extractEnabledB;
private final @Nonnull CheckBox insertEnabledB;
private final @Nonnull CheckBox enabledB;
protected int left = 0;
protected int top = 0;
protected int width = 0;
protected int height = 0;
protected int rightColumn = 112;
protected int leftColumn = 22;
protected int gap = 5;
protected int customTop = 0;
protected BaseSettingsPanel(IconEIO icon, String typeName, GuiExternalConnection gui, IConduit con) {
protected int textureHeight = 166 + 29;
private final @Nonnull GuiToolTip speedUpgradeTooltip;
private final @Nonnull GuiToolTip functionUpgradeTooltip;
protected @Nonnull GuiToolTip filterExtractUpgradeTooltip;
protected @Nonnull GuiToolTip filterInsertUpgradeTooltip;
protected BaseSettingsPanel(@Nonnull IWidgetIcon icon, @Nonnull String typeName, @Nonnull GuiExternalConnection gui, @Nonnull IConduit con) {
this(icon, typeName, gui, con, "externalConduitConnection");
}
protected BaseSettingsPanel(@Nonnull IWidgetIcon icon, @Nonnull String typeName, @Nonnull GuiExternalConnection gui, @Nonnull IConduit con,
@Nonnull String texture) {
this.icon = icon;
this.typeName = typeName;
this.gui = gui;
this.con = con;
this.texture = EnderIO.proxy.getGuiTexture(texture);
modeLabel = EnderIO.lang.localize("gui.conduit.ioMode");
inputHeading = getInputHeading();
outputHeading = getOutputHeading();
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
int x = gap * 3 + fr.getStringWidth(modeLabel);
int y = 8;// + fr.FONT_HEIGHT;
leftArrow = MultiIconButton.createLeftArrowButton(gui, PREV_MODE_B, x, y);
x += leftArrow.getWidth() + gap + getLongestModeStringWidth() + gap;
rightArrow = MultiIconButton.createRightArrowButton(gui, NEXT_MODE_B, x, y);
customTop = top + gap * 5 + fr.FONT_HEIGHT * 2;
customTop -= 16;
//customTop = top;
int x = leftColumn;
int y = 6;
insertEnabledB = new CheckBox(gui, ID_INSERT_ENABLED, x, y);
enabledB = new CheckBox(gui, ID_ENABLED, x, y);
x = rightColumn;
extractEnabledB = new CheckBox(gui, ID_EXTRACT_ENABLED, x, y);
x = leftColumn;
y = 92;
x = rightColumn;
x = rightColumn + 18 + 1;
filterExtractUpgradeTooltip = new GuiToolTip(new Rectangle(rightColumn, 70, 18, 18), EnderIO.lang.localize("gui.conduit.item.filterupgrade")) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasFilterUpgrades(false) && super.shouldDraw();
}
};
filterInsertUpgradeTooltip = new GuiToolTip(new Rectangle(leftColumn, 70, 18, 18), EnderIO.lang.localize("gui.conduit.item.filterupgrade")) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasFilterUpgrades(true) && super.shouldDraw();
}
};
speedUpgradeTooltip = new GuiToolTip(new Rectangle(rightColumn + 18, customTop + 43, 18, 18), EnderIO.lang.localize("gui.conduit.item.speedupgrade"),
EnderIO.lang.localize("gui.conduit.item.speedupgrade2")) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasSpeedUpgrades() && super.shouldDraw();
}
};
ArrayList<String> funcUpgradeTips = new ArrayList<String>();
SpecialTooltipHandler.addTooltipFromResources(funcUpgradeTips, "enderio.gui.conduit.item.functionupgrade.line");
for(FunctionUpgrade upgrade : FunctionUpgrade.values()) {
funcUpgradeTips.add(EnderIO.lang.localizeExact(upgrade.unlocName.concat(".name")));
}
functionUpgradeTooltip = new GuiToolTip(new Rectangle(rightColumn + 36, customTop + 43, 18, 18), funcUpgradeTips.toArray(new String[0])) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasFunctionUpgrades() && super.shouldDraw();
}
};
gui.getContainer().setInoutSlotsVisible(false, false);
}
@Override
public void onGuiInit(int left, int top, int width, int height) {
this.left = left;
this.top = top;
this.width = width;
this.height = height;
public ResourceLocation getTexture() {
return texture;
}
leftArrow.onGuiInit();
rightArrow.onGuiInit();
public int getTextureHeight() {
return textureHeight;
}
connectionModeChanged(con.getConnectionMode(gui.getDir()));
protected void updateFilterButtons() {
}
protected boolean hasFilterGui(boolean input) {
return true;
}
public boolean updateConduit(@Nonnull IConduit conduit) {
this.con = conduit;
if (oldConnectionMode != con.getConnectionMode(gui.getDir())) {
connectionModeChanged(con.getConnectionMode(gui.getDir()));
}
return true;
}
@Override
public void onGuiInit(int leftIn, int topIn, int widthIn, int heightIn) {
this.left = leftIn;
this.top = topIn;
this.width = widthIn;
this.height = heightIn;
updateConduit(con);
if (hasInOutModes()) {
insertEnabledB.onGuiInit();
extractEnabledB.onGuiInit();
insertEnabledB.setSelected(insertEnabled);
extractEnabledB.setSelected(extractEnabled);
} else {
enabledB.onGuiInit();
enabledB.setSelected(enabled);
}
if (hasFilters()) {
gui.addToolTip(filterExtractUpgradeTooltip);
gui.addToolTip(filterInsertUpgradeTooltip);
}
if (hasUpgrades()) {
gui.addToolTip(speedUpgradeTooltip);
gui.addToolTip(functionUpgradeTooltip);
}
initCustomOptions();
}
protected boolean hasUpgrades() {
return false;
}
protected void initCustomOptions() {
}
@Override
public void deactivate() {
insertEnabledB.detach();
extractEnabledB.detach();
gui.removeToolTip(speedUpgradeTooltip);
gui.removeToolTip(functionUpgradeTooltip);
gui.removeToolTip(filterExtractUpgradeTooltip);
gui.removeToolTip(filterInsertUpgradeTooltip);
}
@Override
public void mouseClicked(int x, int y, int par3) {
public void mouseClicked(int x, int y, int par3) {
}
@Override
@@ -97,79 +235,108 @@ public class BaseSettingsPanel implements ITabPanel {
}
@Override
public void updateScreen() {
public void updateScreen() {
}
@Override
@Nonnull
public IWidgetIcon getIcon() {
return icon;
}
@Override
public void actionPerformed(GuiButton guiButton) {
if(guiButton.id == PREV_MODE_B) {
con.setConnectionMode(gui.getDir(), con.getPreviousConnectionMode(gui.getDir()));
PacketHandler.INSTANCE.sendToServer(new PacketConnectionMode(con, gui.getDir()));
connectionModeChanged(con.getConnectionMode(gui.getDir()));
private void updateConnectionMode() {
ConnectionMode mode = ConnectionMode.DISABLED;
if (insertEnabled && extractEnabled || enabled) {
mode = ConnectionMode.IN_OUT;
} else if (insertEnabled) {
mode = ConnectionMode.OUTPUT;
} else if (extractEnabled) {
mode = ConnectionMode.INPUT;
}
con.setConnectionMode(gui.getDir(), mode);
PacketHandler.INSTANCE.sendToServer(new PacketConnectionMode(con, gui.getDir()));
}
} else if(guiButton.id == NEXT_MODE_B) {
con.setConnectionMode(gui.getDir(), con.getNextConnectionMode(gui.getDir()));
PacketHandler.INSTANCE.sendToServer(new PacketConnectionMode(con, gui.getDir()));
connectionModeChanged(con.getConnectionMode(gui.getDir()));
@Override
public void actionPerformed(@Nonnull GuiButton guiButton) {
if (guiButton.id == ID_INSERT_ENABLED) {
insertEnabled = !insertEnabled;
updateConnectionMode();
} else if (guiButton.id == ID_EXTRACT_ENABLED) {
extractEnabled = !extractEnabled;
updateConnectionMode();
} else if (guiButton.id == ID_ENABLED) {
enabled = !enabled;
updateConnectionMode();
}
}
protected void connectionModeChanged(ConnectionMode conectionMode) {
protected void connectionModeChanged(@Nonnull ConnectionMode mode) {
oldConnectionMode = mode;
if (hasInOutModes()) {
insertEnabled = mode.acceptsOutput();
extractEnabled = mode.acceptsInput();
} else {
enabled = mode == ConnectionMode.IN_OUT;
}
}
@Override
public void render(float par1, int par2, int par3) {
updateFilterButtons();
FontRenderer fr = gui.getFontRenderer();
int rgb = ColorUtil.getRGB(Color.darkGray);
int x = left + (width - fr.getStringWidth(getTypeName())) / 2;
int x = left + 32;
int y = gui.getGuiTop() + 10;
//fr.drawString(getTypeName(), x, top, rgb);
x = left;
int y = gui.getGuiTop() + 13;//customTop + 8;//gap + fr.FONT_HEIGHT + gap;
gui.getFontRenderer().drawString(modeLabel, x, y, rgb);
String modeString = con.getConnectionMode(gui.getDir()).getLocalisedName();
x += gap + leftArrow.getWidth() + fr.getStringWidth(modeLabel) + gap;
GL11.glColor3f(1, 1, 1);
// TODO figure out what this should be
// IconEIO icon = new IconEIO(10, 48, 64, 16);
// icon.getMap().render(icon, x - gap, y - (fr.FONT_HEIGHT / 2) - 1, getLongestModeStringWidth() + gap * 2, leftArrow.getHeight(), 0, true);
int move = (getLongestModeStringWidth() - fr.getStringWidth(modeString)) / 2;
x += move;
rgb = ColorUtil.getRGB(Color.white);
gui.getFontRenderer().drawString(modeString, x, y, rgb);
renderCustomOptions(y + gap + fr.FONT_HEIGHT + gap, par1, par2, par3);
//renderCustomOptions(y + gap, par1, par2, par3);
}
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
}
private int getLongestModeStringWidth() {
int maxWidth = 0;
for (ConnectionMode mode : ConnectionMode.values()) {
int width = gui.getFontRenderer().getStringWidth(mode.getLocalisedName());
if(width > maxWidth) {
maxWidth = width;
}
if (hasInOutModes()) {
fr.drawString(inputHeading, x, y, rgb);
x += 92;
fr.drawString(outputHeading, x, y, rgb);
} else {
String heading = enabled ? getEnabledHeading() : getDisabledHeading();
fr.drawString(heading, x, y, rgb);
}
return maxWidth;
renderCustomOptions(y + gap + fr.FONT_HEIGHT + gap, par1, par2, par3);
}
protected String getTypeName() {
protected void renderCustomOptions(int topIn, float par1, int par2, int par3) {
}
protected @Nonnull String getTypeName() {
return typeName;
}
protected boolean hasFilters() {
return false;
}
@Nonnull
protected String getInputHeading() {
// lang strings are nonintuitive for some reason
return EnderIO.lang.localize("gui.conduit.ioMode.output");
}
@Nonnull
protected String getOutputHeading() {
return EnderIO.lang.localize("gui.conduit.ioMode.input");
}
@Nonnull
protected String getEnabledHeading() {
return EnderIO.lang.localize("gui.enabled");
}
@Nonnull
protected String getDisabledHeading() {
return EnderIO.lang.localize("gui.disabled");
}
protected boolean hasInOutModes() {
return true;
}
}
@@ -2,8 +2,10 @@ package crazypants.enderio.conduit.gui;
import java.awt.Point;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import crazypants.enderio.conduit.item.filter.IItemFilter;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.IInventory;
@@ -27,6 +29,7 @@ import crazypants.enderio.network.PacketHandler;
public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrades> {
private final IItemConduit itemConduit;
private final ForgeDirection direction;
private int speedUpgradeSlotLimit = 15;
@@ -40,13 +43,14 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
private Slot slotInputFilterUpgrades;
private Slot slotOutputFilterUpgrades;
private final List<Point> slotLocations = new ArrayList<Point>();
private final List<Point> slotLocations = new ArrayList<>();
final List<FilterChangeListener> filterListeners = new ArrayList<FilterChangeListener>();
final List<GhostBackgroundItemSlot> bgSlots = new ArrayList<GhostBackgroundItemSlot>();
final List<FilterChangeListener> filterListeners = new ArrayList<>();
final List<GhostBackgroundItemSlot> bgSlots = new ArrayList<>();
public ExternalConnectionContainer(InventoryPlayer playerInv, IConduitBundle bundle, ForgeDirection dir) {
super(playerInv, new InventoryUpgrades(bundle.getConduit(IItemConduit.class), dir));
this.direction = dir;
this.itemConduit = bundle.getConduit(IItemConduit.class);
slotLocations.addAll(playerSlotLocations.values());
@@ -54,20 +58,20 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
int y;
if (itemConduit != null) {
x = 10;
y = 47;
x = 113;
y = 71;
slotOutputFilterUpgrades = addSlotToContainer(new FilterSlot(getInv(), 3, x, y));
slotLocations.add(new Point(x, y));
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemBasicFilterUpgrade, slotOutputFilterUpgrades));
x = 10;
y = 47;
x = 23;
y = 71;
slotInputFilterUpgrades = addSlotToContainer(new FilterSlot(getInv(), 2, x, y));
slotLocations.add(new Point(x, y));
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemBasicFilterUpgrade, slotInputFilterUpgrades));
x = 10;
y = 83;
x = 131;
y = 71;
slotSpeedUpgrades = addSlotToContainer(new Slot(getInv(), 0, x, y) {
@Override
public boolean isItemValid(ItemStack par1ItemStack) {
@@ -82,8 +86,8 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
slotLocations.add(new Point(x, y));
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemExtractSpeedUpgrade, slotSpeedUpgrades));
x = 10;
y = 65;
x = 149;
y = 71;
slotFunctionUpgrades = addSlotToContainer(new Slot(getInv(), 1, x, y) {
@Override
public boolean isItemValid(ItemStack par1ItemStack) {
@@ -98,6 +102,8 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
slotLocations.add(new Point(x, y));
bgSlots.add(new GhostBackgroundItemSlot(EnderIO.itemFunctionUpgrade, slotFunctionUpgrades));
}
setInventorySlotsVisible(false);
}
public void createGhostSlots(List<GhostSlot> slots) {
@@ -106,7 +112,7 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
@Override
public Point getPlayerInventoryOffset() {
return new Point(23, 113);
return new Point(23, 161);
}
public void addFilterListener(FilterChangeListener list) {
@@ -132,6 +138,17 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
return slot != null && slot.getHasStack();
}
public ForgeDirection getDirection() {
return direction;
}
public IItemFilter getFilter(boolean input) {
if (itemConduit == null) {
return null;
}
return input ? itemConduit.getInputFilter(direction) : itemConduit.getOutputFilter(direction);
}
public void setInoutSlotsVisible(boolean inputVisible, boolean outputVisible) {
if(itemConduit == null) {
return;
@@ -282,4 +299,8 @@ public class ExternalConnectionContainer extends ContainerEnder<InventoryUpgrade
}
public List<String> getFunctionUpgradeToolTipText() {
return Collections.emptyList();
}
}
@@ -0,0 +1,72 @@
package crazypants.enderio.conduit.gui;
import javax.annotation.Nonnull;
import com.enderio.core.client.gui.button.TooltipButton;
import org.lwjgl.opengl.GL11;
import com.enderio.core.api.client.gui.IGuiScreen;
import com.enderio.core.api.client.render.IWidgetIcon;
import net.minecraft.client.Minecraft;
public class FakeButton extends TooltipButton {
public static final int DEFAULT_WIDTH = 16;
public static final int DEFAULT_HEIGHT = 16;
protected @Nonnull IWidgetIcon icon;
private int marginY = 0;
private int marginX = 0;
public FakeButton(@Nonnull IGuiScreen gui, int x, int y, @Nonnull IWidgetIcon icon) {
super(gui, -1, x, y, DEFAULT_WIDTH, DEFAULT_HEIGHT, "");
this.icon = icon;
}
@Override
public FakeButton setPosition(int x, int y) {
super.setPosition(x, y);
return this;
}
public FakeButton setIconMargin(int x, int y) {
marginX = x;
marginY = y;
return this;
}
public @Nonnull IWidgetIcon getIcon() {
return icon;
}
public void setIcon(@Nonnull IWidgetIcon icon) {
this.icon = icon;
}
public boolean mousePressedButton(@Nonnull Minecraft mc, int mouseX, int mouseY, int button) {
return false;
}
protected boolean checkMousePress(@Nonnull Minecraft mc, int mouseX, int mouseY) {
return false;
}
/**
* Draws this button to the screen.
*/
@Override
public void drawButton(@Nonnull Minecraft mc, int mouseX, int mouseY) {
updateTooltip(mc, mouseX, mouseY);
if (isVisible()) {
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
icon.getMap().render(icon, xPosition + marginX, yPosition + marginY, width - 2 * marginX, height - 2 * marginY, 0, true);
GL11.glPopAttrib();
}
}
}
@@ -0,0 +1,21 @@
package crazypants.enderio.conduit.gui;
public class FilterGuiUtil {
// List of filter indexes for reference in guis
public static final int INDEX_INPUT_ITEM = 1;
public static final int INDEX_OUTPUT_ITEM = 2;
public static final int INDEX_INPUT_FLUID = 3;
public static final int INDEX_OUTPUT_FLUID = 4;
public static final int INDEX_INPUT_REDSTONE = 6;
public static final int INDEX_OUTPUT_REDSTONE = 5;
public static final int INDEX_NONE = 0;
public static final int INDEX_FILTER_HANDHELD = -1;
private static int nextButtonId = 1;
public static int nextButtonId() {
return nextButtonId++;
}
}
@@ -7,6 +7,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.enderio.core.client.gui.GuiContainerBase;
import com.enderio.core.client.gui.widget.GhostSlot;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiContainer;
import net.minecraft.client.renderer.Tessellator;
@@ -43,6 +45,12 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
return nextButtonId++;
}
public static int nextButtonIds(int count) {
int id = nextButtonId;
nextButtonId += count;
return id;
}
private static final Map<Class<? extends IConduit>, Integer> TAB_ORDER = new HashMap<Class<? extends IConduit>, Integer>();
static {
TAB_ORDER.put(IItemConduit.class, 0);
@@ -73,11 +81,10 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
this.bundle = bundle;
this.dir = dir;
ySize = 166 + 29;
ySize = 166 + 29 + 48;
xSize = 206;
container.setInoutSlotsVisible(false, false);
container.setInventorySlotsVisible(false);
List<IConduit> cons = new ArrayList<IConduit>(bundle.getConduits());
Collections.sort(cons, new Comparator<IConduit>() {
@@ -92,8 +99,7 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
if(int2 == null) {
return 1;
}
//NB: using Double.comp instead of Integer.comp as the int version is only from Java 1.7+
return Double.compare(int1, int2);
return Integer.compare(int1, int2);
}
});
@@ -105,12 +111,17 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
if(tab != null) {
conduits.add(con);
tabs.add(tab);
tab.deactivate();
}
}
}
}
public IConduitBundle getBundle() {
return bundle;
}
@Override
public void initGui() {
super.initGui();
@@ -119,8 +130,6 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
for (int i = 0; i < tabs.size(); i++) {
if(i == activeTab) {
tabs.get(i).onGuiInit(guiLeft + 10, guiTop, xSize - 20, ySize - 20);
} else {
tabs.get(i).deactivate();
}
}
}
@@ -132,6 +141,16 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
@Override
protected void mouseClicked(int x, int y, int par3) {
// handle out-of-bounds ghost slots
boolean outOfBounds = x < guiLeft || y < guiTop || x >= guiLeft + xSize || y >= guiTop + ySize;
boolean hasItem = playerInv.getItemStack() != null;
if (outOfBounds && hasItem && !getGhostSlots().isEmpty()) {
GhostSlot slot = getGhostSlot(x, y);
if (slot != null) {
ghostSlotClicked(slot, x, y, par3);
return;
}
}
super.mouseClicked(x, y, par3);
int tabLeftX = xSize;
@@ -145,6 +164,8 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
if(x > tabLeftX && x < tabRightX + 24) {
if(y > minY && y < maxY) {
tabs.get(activeTab).deactivate();
getGhostSlots().clear();
activeTab = (y - minY) / 24;
initGui();
return;
@@ -186,8 +207,17 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
tes.draw();
bindGuiTexture();
drawTexturedModalRect(sx, sy, 0, 0, this.xSize, this.ySize);
int textureHeight = 166 + 29;
if (tabs.isEmpty()) {
bindGuiTexture();
} else {
ITabPanel tab = tabs.get(activeTab);
RenderUtil.bindTexture(tab.getTexture());
if (tab instanceof BaseSettingsPanel) {
textureHeight = ((BaseSettingsPanel) tab).getTextureHeight();
}
}
drawTexturedModalRect(sx, sy, 0, 0, this.xSize, textureHeight);
RenderUtil.bindTexture(IconEIO.TEXTURE);
tes.startDrawingQuads();
@@ -216,13 +246,44 @@ public class GuiExternalConnection extends GuiContainerBaseEIO {
@Override
@Optional.Method(modid = "NotEnoughItems")
public boolean hideItemPanelSlot(GuiContainer gc, int x, int y, int w, int h) {
int sx = (width - xSize) / 2;
int sy = (height - ySize) / 2;
if(tabs.size() > 0) {
int sx = (width - xSize) / 2;
int sy = (height - ySize) / 2;
int tabX = sx + xSize - 3;
int tabY = sy + tabYOffset;
return (x+w) >= tabX && x < (tabX + 14) && (y+h) >= tabY && y < (tabY + tabs.size()*TAB_HEIGHT);
if((x+w) >= tabX && x < (tabX + 14) && (y+h) >= tabY && y < (tabY + tabs.size()*TAB_HEIGHT)) {
return true;
}
}
List<GhostSlot> slots = getGhostSlots();
if (slots != null && !slots.isEmpty()) {
for (GhostSlot slot : slots) {
int slotX = sx + slot.x;
int slotY = sy + slot.y;
if((x+w) >= slotX && x < (slotX + 20) && (y+h) >= slotY && y < (slotY + 20)) {
return true;
}
}
}
return false;
}
@Override
@Optional.Method(modid = "NotEnoughItems")
public boolean handleDragNDrop(GuiContainer gc, int x, int y, ItemStack is, int button)
{
if (super.handleDragNDrop(gc, x, y, is, button)) {
return true;
}
x -= guiLeft;
y -= guiTop;
if (is != null && is.stackSize > 0 && !tabs.isEmpty() && tabs.get(activeTab) instanceof LiquidSettings) {
LiquidSettings settings = (LiquidSettings) tabs.get(activeTab);
if (settings.setFilterFromItem(x, y, is)) {
is.stackSize = 0;
return true;
}
}
return false;
}
@@ -44,16 +44,19 @@ public class LiquidSettings extends BaseSettingsPanel {
private static final int ID_COLOR_BUTTON = GuiExternalConnection.nextButtonId();
private static final int ID_ROUND_ROBIN_BUTTON = GuiExternalConnection.nextButtonId();
private static final int ID_WHITELIST = GuiExternalConnection.nextButtonId();
private static final int ID_INSERT_WHITELIST = GuiExternalConnection.nextButtonId();
private static final int ID_EXTRACT_WHITELIST = GuiExternalConnection.nextButtonId();
private static final int NEXT_FILTER_ID = 989322;
private static final int ID_CHANNEL = GuiExternalConnection.nextButtonId();
private static final int ID_INSERT_CHANNEL = GuiExternalConnection.nextButtonId();
private static final int ID_EXTRACT_CHANNEL = GuiExternalConnection.nextButtonId();
private final RedstoneModeButton rsB;
private final ToggleButton roundRobinB;
private final ColorButton colorB;
private ColorButton channelB;
private ColorButton insertChannelB;
private ColorButton extractChannelB;
private static final String autoExtractStr = EnderIO.lang.localize("gui.conduit.fluid.autoExtract");
private static final String filterStr = EnderIO.lang.localize("gui.conduit.fluid.filter");
@@ -62,17 +65,20 @@ public class LiquidSettings extends BaseSettingsPanel {
private AbstractEnderLiquidConduit eConduit;
private boolean isEnder;
private static final int filterX = 59;
private static final int filterIX = 4;
private static final int filterEX = 104;
private static final int filterY = 63;
private static final Rectangle filterBounds = new Rectangle(filterX, filterY, 90, 18);
private static final Rectangle insertFilterBounds = new Rectangle(filterIX, filterY, 90, 18);
private static final Rectangle extractFilterBounds = new Rectangle(filterEX, filterY, 90, 18);
private GuiToolTip[] filterToolTips;
private boolean inOutShowIn = true;
private MultiIconButton inOutNextB;
private IconButton whiteListB;
private IconButton insertWhiteListB;
private IconButton extractWhiteListB;
protected LiquidSettings(final GuiExternalConnection gui, IConduit con) {
super(IconEIO.WRENCH_OVERLAY_FLUID, EnderIO.lang.localize("itemLiquidConduit.name"), gui, con);
super(IconEIO.WRENCH_OVERLAY_FLUID, EnderIO.lang.localize("itemLiquidConduit.name"), gui, con, "in_out_settings");
this.textureHeight += 48;
conduit = (ILiquidConduit) con;
if(con instanceof AbstractEnderLiquidConduit) {
@@ -80,33 +86,34 @@ public class LiquidSettings extends BaseSettingsPanel {
isEnder = true;
int x = 52;
int x = leftColumn;
int y = customTop;
insertWhiteListB = new IconButton(gui, ID_INSERT_WHITELIST, x, y, IconEIO.FILTER_WHITELIST);
insertWhiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.whitelist"));
inOutNextB = MultiIconButton.createRightArrowButton(gui, NEXT_FILTER_ID, x, y);
x = filterX - 20;
y = filterY + 1;
whiteListB = new IconButton(gui, ID_WHITELIST, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.whitelist"));
x = rightColumn;
extractWhiteListB = new IconButton(gui, ID_EXTRACT_WHITELIST, x, y, IconEIO.FILTER_WHITELIST);
extractWhiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.whitelist"));
} else {
isEnder = false;
gui.getContainer().setInventorySlotsVisible(false);
}
int x = 66;
int x = leftColumn + 21;
int y = customTop;
if(isEnder)
{
channelB = new ColorButton(gui, ID_CHANNEL, x, y);
channelB.setColorIndex(0);
channelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
x += channelB.getWidth() + gap;
insertChannelB = new ColorButton(gui, ID_INSERT_CHANNEL, x, y);
insertChannelB.setColorIndex(0);
insertChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
extractChannelB = new ColorButton(gui, ID_EXTRACT_CHANNEL, x + rightColumn - leftColumn, y);
extractChannelB.setColorIndex(0);
extractChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
x += insertChannelB.getWidth();
}
x += rightColumn - leftColumn;
rsB = new RedstoneModeButton(gui, ID_REDSTONE_BUTTON, x, y, new IRedstoneModeControlable() {
@Override
@@ -125,13 +132,13 @@ public class LiquidSettings extends BaseSettingsPanel {
}
});
x += rsB.getWidth() + gap;
x += rsB.getWidth();
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x, y);
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.redstone.signalColor"));
colorB.setColorIndex(conduit.getExtractionSignalColor(gui.getDir()).ordinal());
if (isEnder) {
x += rsB.getWidth() + gap;
x += rsB.getWidth();
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN_BUTTON, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
@@ -144,8 +151,13 @@ public class LiquidSettings extends BaseSettingsPanel {
private void addFilterTooltips() {
filterToolTips = new GuiToolTip[5];
for (int i = 0; i < 5; i++) {
Rectangle bound = new Rectangle(filterX + (i * 18), filterY, 18, 18);
filterToolTips[i] = new FilterToolTip(bound, i);
Rectangle bound = new Rectangle(filterIX + (i * 18), filterY, 18, 18);
filterToolTips[i] = new FilterToolTip(bound, i, false);
gui.addToolTip(filterToolTips[i]);
}
for (int i = 0; i < 5; i++) {
Rectangle bound = new Rectangle(filterEX + (i * 18), filterY, 18, 18);
filterToolTips[i] = new FilterToolTip(bound, i, true);
gui.addToolTip(filterToolTips[i]);
}
}
@@ -156,48 +168,24 @@ public class LiquidSettings extends BaseSettingsPanel {
if(guiButton.id == ID_COLOR_BUTTON) {
conduit.setExtractionSignalColor(gui.getDir(), DyeColor.values()[colorB.getColorIndex()]);
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(conduit, gui.getDir()));
} else if(guiButton.id == ID_WHITELIST) {
toggleBlacklist();
} else if(guiButton.id == NEXT_FILTER_ID) {
inOutShowIn = !inOutShowIn;
if(channelB != null) {
channelB.onGuiInit();
if(isInput()) {
channelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
} else {
channelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
}
}
if(isInput()) {
if (isEnder) {
roundRobinB.onGuiInit();
}
rsB.onGuiInit();
colorB.onGuiInit();
} else {
if (isEnder) {
roundRobinB.detach();
}
rsB.detach();
colorB.detach();
}
if(isFilterVisible()) {
updateWhiteListButton(eConduit.getFilter(gui.getDir(), isInput()));
}
} else if(guiButton.id == ID_CHANNEL) {
} else if(guiButton.id == ID_INSERT_WHITELIST || guiButton.id == ID_EXTRACT_WHITELIST) {
toggleBlacklist(guiButton.id == ID_EXTRACT_WHITELIST);
}else if(guiButton.id == ID_INSERT_CHANNEL || guiButton.id == ID_EXTRACT_CHANNEL) {
ColorButton btn = (ColorButton) guiButton;
if(isEnder) {
DyeColor col = DyeColor.values()[channelB.getColorIndex()];
DyeColor col = DyeColor.values()[btn.getColorIndex()];
boolean isInput = guiButton.id == ID_EXTRACT_CHANNEL;
if (isInput()) {
if (isInput) {
eConduit.setInputColor(gui.getDir(), col);
} else {
eConduit.setOutputColor(gui.getDir(), col);
}
setConduitChannel(col);
setConduitChannel(isInput, col);
}
} else if(guiButton.id == ID_ROUND_ROBIN_BUTTON) {
if (isEnder && isInput()) {
if (isEnder) {
final boolean selected = roundRobinB.isSelected();
eConduit.setRoundRobin(gui.getDir(), selected);
PacketHandler.INSTANCE.sendToServer(new PacketRoundRobinMode(eConduit, gui.getDir()));
@@ -211,17 +199,17 @@ public class LiquidSettings extends BaseSettingsPanel {
updateGuiVisibility();
}
private void toggleBlacklist() {
private void toggleBlacklist(boolean isInput) {
if(!isFilterVisible()) {
return;
}
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput());
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput);
if(filter == null) {
filter = new FluidFilter();
}
filter.setBlacklist(!filter.isBlacklist());
setConduitFilter(filter);
updateWhiteListButton(filter);
setConduitFilter(isInput, filter);
updateWhiteListButton(filter, isInput);
}
@Override
@@ -230,35 +218,56 @@ public class LiquidSettings extends BaseSettingsPanel {
if(!isFilterVisible()) {
return;
}
if(!filterBounds.contains(x, y)) {
return;
}
ItemStack st = Minecraft.getMinecraft().thePlayer.inventory.getItemStack();
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput());
if(filter == null && st == null) {
if (st == null && par3 == 0) {
return;
}
if(filter == null) {
filter = new FluidFilter();
setFilterFromItem(x, y, st);
}
public boolean setFilterFromItem(int x, int y, ItemStack st) {
if (insertFilterBounds.contains(x, y)) {
FluidFilter filter = eConduit.getFilter(gui.getDir(), false);
if(filter == null && st == null) {
return false;
}
if(filter == null) {
filter = new FluidFilter();
}
int slot = (x - filterIX) / 18;
filter.setFluid(slot, st);
setConduitFilter(false, filter);
return true;
}
int slot = (x - filterX) / 18;
filter.setFluid(slot, st);
setConduitFilter(filter);
if (extractFilterBounds.contains(x, y)) {
FluidFilter filter = eConduit.getFilter(gui.getDir(), true);
if(filter == null && st == null) {
return false;
}
if(filter == null) {
filter = new FluidFilter();
}
int slot = (x - filterEX) / 18;
filter.setFluid(slot, st);
setConduitFilter(true, filter);
return true;
}
return false;
}
protected void setConduitFilter(FluidFilter filter) {
eConduit.setFilter(gui.getDir(), filter, isInput());
protected void setConduitFilter(boolean isInput, FluidFilter filter) {
eConduit.setFilter(gui.getDir(), filter, isInput);
PacketHandler.INSTANCE.sendToServer(new PacketFluidFilter(eConduit, gui.getDir(), filter, isInput()));
PacketHandler.INSTANCE.sendToServer(new PacketFluidFilter(eConduit, gui.getDir(), filter, isInput));
}
protected void setConduitChannel(DyeColor channel) {
if(isInput()) {
protected void setConduitChannel(boolean isInput, DyeColor channel) {
if(isInput) {
eConduit.setInputColor(gui.getDir(), channel);
} else {
eConduit.setOutputColor(gui.getDir(), channel);
}
PacketHandler.INSTANCE.sendToServer(new PacketFluidChannel(eConduit, gui.getDir(), isInput(), channel));
PacketHandler.INSTANCE.sendToServer(new PacketFluidChannel(eConduit, gui.getDir(), isInput, channel));
}
@Override
@@ -269,47 +278,37 @@ public class LiquidSettings extends BaseSettingsPanel {
private void updateGuiVisibility() {
deactivate();
if(isInput()) {
rsB.onGuiInit();
colorB.onGuiInit();
}
rsB.onGuiInit();
colorB.onGuiInit();
if(!isEnder) {
return;
}
if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.DISABLED) {
channelB.detach();
} else {
channelB.onGuiInit();
if (isInput()) {
channelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
} else {
channelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
}
}
if(isInput()) {
roundRobinB.onGuiInit();
roundRobinB.setSelected(eConduit.isRoundRobin(gui.getDir()));
}
insertChannelB.onGuiInit();
insertChannelB.setColorIndex(eConduit.getOutputColor(gui.getDir()).ordinal());
extractChannelB.onGuiInit();
extractChannelB.setColorIndex(eConduit.getInputColor(gui.getDir()).ordinal());
roundRobinB.onGuiInit();
roundRobinB.setSelected(eConduit.isRoundRobin(gui.getDir()));
gui.getContainer().setInventorySlotsVisible(true);
if(isFilterVisible()) {
gui.getContainer().setInventorySlotsVisible(true);
addFilterTooltips();
whiteListB.onGuiInit();
updateWhiteListButton(eConduit.getFilter(gui.getDir(), isInput()));
} else {
gui.getContainer().setInventorySlotsVisible(false);
}
ConnectionMode mode = con.getConnectionMode(gui.getDir());
if(mode == ConnectionMode.IN_OUT) {
inOutNextB.onGuiInit();
insertWhiteListB.onGuiInit();
extractWhiteListB.onGuiInit();
updateWhiteListButtons();
}
}
private void updateWhiteListButton(FluidFilter filter) {
private void updateWhiteListButtons() {
updateWhiteListButton(eConduit.getFilter(gui.getDir(), false), false);
updateWhiteListButton(eConduit.getFilter(gui.getDir(), true), true);
}
private void updateWhiteListButton(FluidFilter filter, boolean isInput) {
IconButton whiteListB = isInput ? extractWhiteListB : insertWhiteListB;
if(filter != null && filter.isBlacklist()) {
whiteListB.setIcon(IconEIO.FILTER_BLACKLIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.fluid.blacklist"));
@@ -324,9 +323,9 @@ public class LiquidSettings extends BaseSettingsPanel {
rsB.detach();
colorB.detach();
gui.getContainer().setInventorySlotsVisible(false);
if(isEnder) {
roundRobinB.detach();
gui.getContainer().setInventorySlotsVisible(false);
if(filterToolTips != null) {
for (GuiToolTip tt : filterToolTips) {
if(tt != null) {
@@ -334,43 +333,53 @@ public class LiquidSettings extends BaseSettingsPanel {
}
}
}
inOutNextB.detach();
whiteListB.detach();
channelB.detach();
insertWhiteListB.detach();
extractWhiteListB.detach();
insertChannelB.detach();
extractChannelB.detach();
}
}
@Override
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
boolean isInput = isInput();
if(isEnder && isFilterVisible()) {
String inOutStr = EnderIO.lang.localize("gui.conduit.ioMode.output");
if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.IN_OUT) {
inOutStr = inOutShowIn ? EnderIO.lang.localize("gui.conduit.ioMode.input") : EnderIO.lang.localize("gui.conduit.ioMode.output");
} else if(conduit.getConnectionMode(gui.getDir()) == ConnectionMode.INPUT){
inOutStr = EnderIO.lang.localize("gui.conduit.ioMode.input");
}
int x = left;
int y = top;
gui.getFontRenderer().drawString(inOutStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture(1);
gui.drawTexturedModalRect(gui.getGuiLeft(), gui.getGuiTop() + 55, 0, 55, gui.getXSize(), 145);
//gui.drawTexturedModalRect(gui.getGuiLeft(), gui.getGuiTop() + 55, 0, 55, gui.getXSize(), 145);
FontRenderer fr = gui.getFontRenderer();
int sw = fr.getStringWidth(filterStr);
x = (gui.width / 2) - sw / 2;
x = left + 50 - sw/2;
y = top + 20;
fr.drawString(filterStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
x = left + 150 - sw/2;
fr.drawString(filterStr, x, y, ColorUtil.getRGB(Color.DARK_GRAY));
x = gui.getGuiLeft() + filterX;
x = gui.getGuiLeft() + filterIX;
y = gui.getGuiTop() + filterY;
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture();
gui.drawTexturedModalRect(x, y, 24, 238, 90, 18);
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput);
FluidFilter filter = eConduit.getFilter(gui.getDir(), false);
if(filter != null && !filter.isEmpty()) {
for (int i = 0; i < filter.size(); i++) {
FluidStack f = filter.getFluidStackAt(i);
if(f != null) {
renderFluid(f, x + (i * 18), y);
}
}
}
x = gui.getGuiLeft() + filterEX;
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture();
gui.drawTexturedModalRect(x, y, 24, 238, 90, 18);
filter = eConduit.getFilter(gui.getDir(), true);
if(filter != null && !filter.isEmpty()) {
for (int i = 0; i < filter.size(); i++) {
FluidStack f = filter.getFluidStackAt(i);
@@ -395,26 +404,19 @@ public class LiquidSettings extends BaseSettingsPanel {
}
private boolean isInput() {
ConnectionMode mode = conduit.getConnectionMode(gui.getDir());
return (mode == ConnectionMode.IN_OUT && inOutShowIn) || (mode == ConnectionMode.INPUT);
}
private boolean isFilterVisible() {
if(!isEnder) {
return false;
}
ConnectionMode mode = conduit.getConnectionMode(gui.getDir());
return mode == ConnectionMode.INPUT || mode == ConnectionMode.OUTPUT || mode == ConnectionMode.IN_OUT;
return isEnder;
}
private class FilterToolTip extends GuiToolTip {
int index;
boolean isInput;
public FilterToolTip(Rectangle bounds, int index) {
public FilterToolTip(Rectangle bounds, int index, boolean isInput) {
super(bounds, (String[]) null);
this.index = index;
this.isInput = isInput;
}
@Override
@@ -422,7 +424,7 @@ public class LiquidSettings extends BaseSettingsPanel {
if(!isFilterVisible()) {
return null;
}
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput());
FluidFilter filter = eConduit.getFilter(gui.getDir(), isInput);
if(filter == null) {
return null;
}
@@ -13,38 +13,41 @@ import net.minecraft.client.gui.GuiButton;
import org.lwjgl.opengl.GL11;
public class BasicItemFilterGui implements IItemFilterGui {
private static final int ID_WHITELIST = GuiExternalConnection.nextButtonId();
private static final int ID_NBT = GuiExternalConnection.nextButtonId();
private static final int ID_META = GuiExternalConnection.nextButtonId();
private static final int ID_ORE_DICT = GuiExternalConnection.nextButtonId();
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
private static final int ID_FUZZY = GuiExternalConnection.nextButtonId();
private final GuiContainerBaseEIO gui;
private final ToggleButton useMetaB;
private final ToggleButton useNbtB;
private final IconButton whiteListB;
private final ToggleButton useOreDictB;
private final ToggleButton stickyB;
private final CycleButton<FuzzyMode> fuzzyB;
final boolean isAdvanced;
final boolean isStickyModeAvailable;
private final IItemFilterContainer filterContainer;
private final ItemFilter filter;
private int buttonIdOffset;
private int xOffset;
private int yOffset;
public BasicItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable) {
this(gui, filterContainer, isStickyModeAvailable, 32, 68, 0);
private boolean isInput;
public BasicItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable, boolean isInput) {
this(gui, filterContainer, isStickyModeAvailable, isInput, isInput ? 6 : 104, 96, isInput ? 0 : 256);
}
public BasicItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable,
boolean isInput,
int xOffset, int yOffset,
int buttonIdOffset) {
this.gui = gui;
@@ -53,44 +56,43 @@ public class BasicItemFilterGui implements IItemFilterGui {
this.xOffset = xOffset;
this.yOffset = yOffset;
this.buttonIdOffset = buttonIdOffset;
this.isInput = isInput;
filter = filterContainer.getItemFilter();
isAdvanced = filter.isAdvanced();
int butLeft = xOffset + 92;
int butLeft = xOffset;
int x = butLeft;
int y = yOffset + 1;
int y = yOffset + (isAdvanced ? 40 : 20);
whiteListB = new IconButton(gui, ID_WHITELIST + buttonIdOffset, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(getWhitelistTooltips(false));
x += 20;
x += 16;
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
useMetaB.setPaintSelectedBorder(false);
x += 20;
x += 16;
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
stickyB.setPaintSelectedBorder(false);
y += 20;
x = butLeft;
if(isStickyModeAvailable) x += 16;
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
useOreDictB.setPaintSelectedBorder(false);
x += 20;
x += 16;
useNbtB = new ToggleButton(gui, ID_NBT + buttonIdOffset, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
useNbtB.setPaintSelectedBorder(false);
x += 20;
x += 16;
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
}
@@ -104,9 +106,9 @@ public class BasicItemFilterGui implements IItemFilterGui {
}
@Override
public void mouseClicked(int x, int y, int par3) {
public void mouseClicked(int x, int y, int par3) {
}
@Override
public void updateButtons() {
ItemFilter activeFilter = filter;
@@ -117,7 +119,7 @@ public class BasicItemFilterGui implements IItemFilterGui {
useOreDictB.onGuiInit();
useOreDictB.setSelected(activeFilter.isUseOreDict());
if(isStickyModeAvailable) {
stickyB.onGuiInit();
stickyB.setSelected(activeFilter.isSticky());
@@ -138,10 +140,10 @@ public class BasicItemFilterGui implements IItemFilterGui {
whiteListB.setIcon(IconEIO.FILTER_WHITELIST);
}
}
@Override
public void actionPerformed(GuiButton guiButton) {
if(guiButton.id == ID_META + buttonIdOffset) {
filter.setMatchMeta(useMetaB.isSelected());
sendFilterChange();
@@ -160,16 +162,16 @@ public class BasicItemFilterGui implements IItemFilterGui {
} else if(guiButton.id == ID_WHITELIST + buttonIdOffset) {
filter.setBlacklist(!filter.isBlacklist());
sendFilterChange();
}
}
}
private void sendFilterChange() {
updateButtons();
filterContainer.onFilterChanged();
}
@Override
public void deactivate() {
public void deactivate() {
useNbtB.detach();
useMetaB.detach();
useOreDictB.detach();
@@ -177,13 +179,13 @@ public class BasicItemFilterGui implements IItemFilterGui {
stickyB.detach();
fuzzyB.detach();
}
@Override
public void renderCustomOptions(int top, float par1, int par2, int par3) {
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture(1);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset, 0, 238, 18 * 5, 18);
if(filter.isAdvanced()) {
if(filter.isAdvanced()) {
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
}
}
@@ -44,11 +44,11 @@ public class BigItemFilterGui implements IItemFilterGui {
private int xOffset;
private int yOffset;
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable) {
this(gui, filterContainer, isStickyModeAvailable, 32, 48, 0);
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable, boolean isInput) {
this(gui, filterContainer, isStickyModeAvailable, isInput, isInput ? 6 : 104, 96, isInput ? 0 : 256);
}
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable,
public BigItemFilterGui(GuiContainerBaseEIO gui, IItemFilterContainer filterContainer, boolean isStickyModeAvailable, boolean isInput,
int xOffset, int yOffset,
int buttonIdOffset) {
this.gui = gui;
@@ -62,38 +62,45 @@ public class BigItemFilterGui implements IItemFilterGui {
isAdvanced = filter.isAdvanced();
int butLeft = xOffset + 92+ 54;
int butLeft = xOffset;
int x = butLeft;
int y = yOffset + 40;
int y = yOffset - 8;
whiteListB = new IconButton(gui, ID_WHITELIST + buttonIdOffset, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
y -= 20;
x += 16;
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
useMetaB.setPaintSelectedBorder(false);
y -= 20;
x += 16;
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
useOreDictB.setPaintSelectedBorder(false);
y -= 20;
x += 16;
useNbtB = new ToggleButton(gui, ID_NBT + buttonIdOffset, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
useNbtB.setPaintSelectedBorder(false);
y -= 20;
x += 16;
fuzzyB = new CycleButton(gui, ID_FUZZY + buttonIdOffset, x, y, FuzzyMode.class);
x -= 20;
x += 16;
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
stickyB.setSelectedToolTip(EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled"));
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
stickyB.setPaintSelectedBorder(false);
this.yOffset += 8;
if (isInput) {
this.xOffset -= 50;
} else {
//
}
}
public void createFilterSlots() {
@@ -189,10 +196,10 @@ public class BigItemFilterGui implements IItemFilterGui {
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 20, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 40, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 40, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 18, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 18, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset + 54, gui.getGuiTop() + yOffset + 36, 0, 238, 18 * 5, 18);
gui.drawTexturedModalRect(gui.getGuiLeft() + xOffset, gui.getGuiTop() + yOffset + 36, 0, 238, 18 * 5, 18);
}
}
@@ -32,12 +32,12 @@ public class ExistingItemFilterGui implements IItemFilterGui {
private static final int ID_META = GuiExternalConnection.nextButtonId();
private static final int ID_ORE_DICT = GuiExternalConnection.nextButtonId();
private static final int ID_STICKY = GuiExternalConnection.nextButtonId();
private static final int ID_SNAPSHOT = GuiExternalConnection.nextButtonId();
private static final int ID_CLEAR = GuiExternalConnection.nextButtonId();
private static final int ID_SHOW = GuiExternalConnection.nextButtonId();
private static final int ID_MERGE = GuiExternalConnection.nextButtonId();
private IItemConduit itemConduit;
private GuiExternalConnection gui;
@@ -46,7 +46,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
private ToggleButton useNbtB;
private ToggleButton useOreDictB;
private ToggleButton stickyB;
private final IconButton whiteListB;
private GuiButton snapshotB;
@@ -56,6 +56,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
private SnapshotOverlay snapshotOverlay;
boolean isInput;
private int buttonIdOffset = 0;
private ExistingItemFilter filter;
@@ -63,6 +64,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
this.gui = gui;
this.itemConduit = itemConduit;
this.isInput = isInput;
this.buttonIdOffset = isInput ? 0 : 256;
if(isInput) {
filter = (ExistingItemFilter) itemConduit.getInputFilter(gui.getDir());
@@ -70,54 +72,51 @@ public class ExistingItemFilterGui implements IItemFilterGui {
filter = (ExistingItemFilter) itemConduit.getOutputFilter(gui.getDir());
}
int butLeft = 37;
int butLeft = isInput ? 6 : 104;
int x = butLeft;
int y = 68;
int y = 96;
useMetaB = new ToggleButton(gui, ID_META, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
useMetaB = new ToggleButton(gui, ID_META + buttonIdOffset, x, y, IconEIO.FILTER_META_OFF, IconEIO.FILTER_META);
useMetaB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchMetaData"));
useMetaB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreMetaData"));
useMetaB.setPaintSelectedBorder(false);
x += 20;
stickyB = new ToggleButton(gui, ID_STICKY, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
x += 16;
whiteListB = new IconButton(gui, -1, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
x += 16;
stickyB = new ToggleButton(gui, ID_STICKY + buttonIdOffset, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
String[] lines = EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled");
stickyB.setSelectedToolTip(lines);
stickyB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.stickyDisbaled"));
stickyB.setPaintSelectedBorder(false);
y += 20;
x = butLeft;
x += 20;
useNbtB = new ToggleButton(gui, ID_NBT, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
if(!isInput) x += 16;
useNbtB = new ToggleButton(gui, ID_NBT + buttonIdOffset, x, y, IconEIO.FILTER_NBT_OFF, IconEIO.FILTER_NBT);
useNbtB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.matchNBT"));
useNbtB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.ignoreNBT"));
useNbtB.setPaintSelectedBorder(false);
x = butLeft;
useOreDictB = new ToggleButton(gui, ID_ORE_DICT, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
x += 16;
useOreDictB = new ToggleButton(gui, ID_ORE_DICT + buttonIdOffset, x, y, IconEIO.FILTER_ORE_DICT_OFF, IconEIO.FILTER_ORE_DICT);
useOreDictB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicEnabled"));
useOreDictB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.oreDicDisabled"));
useOreDictB.setPaintSelectedBorder(false);
snapshotB = new GuiButton(ID_SNAPSHOT, 0, 0, 60, 20, EnderIO.lang.localize("gui.conduit.button.snap"));
mergeB = new GuiButton(ID_MERGE, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.merge"));
clearB = new GuiButton(ID_CLEAR, 0, 0, 60, 20, EnderIO.lang.localize("gui.conduit.button.clear"));
showB = new GuiButton(ID_SHOW, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.show"));
x -= 20;
whiteListB = new IconButton(gui, -1, x, y, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
snapshotB = new GuiButton(ID_SNAPSHOT + buttonIdOffset, 0, 0, 56, 20, EnderIO.lang.localize("gui.conduit.button.snap"));
mergeB = new GuiButton(ID_MERGE + buttonIdOffset, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.merge"));
clearB = new GuiButton(ID_CLEAR + buttonIdOffset, 0, 0, 56, 20, EnderIO.lang.localize("gui.conduit.button.clear"));
showB = new GuiButton(ID_SHOW + buttonIdOffset, 0, 0, 40, 20, EnderIO.lang.localize("gui.conduit.button.show"));
snapshotOverlay = new SnapshotOverlay();
gui.addOverlay(snapshotOverlay);
}
@Override
public void mouseClicked(int x, int y, int par3) {
public void mouseClicked(int x, int y, int par3) {
}
@Override
@@ -148,22 +147,25 @@ public class ExistingItemFilterGui implements IItemFilterGui {
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
}
int x0 = gui.getGuiLeft() + 80;
int y0 = gui.getGuiTop() + 65;
int x1 = x0 + 65;
int y1 = y0 + 22;
int butLeft = gui.getGuiLeft() + (isInput ? 5 : 104);
int x = butLeft;
int y = gui.getGuiTop() + 96 + 20;
snapshotB.xPosition = x0;
snapshotB.yPosition = y0;
snapshotB.xPosition = x;
snapshotB.yPosition = y;
mergeB.xPosition = x1;
mergeB.yPosition = y0;
x += 56;
mergeB.xPosition = x;
mergeB.yPosition = y;
clearB.xPosition = x0;
clearB.yPosition = y1;
x = butLeft;
y += 20;
clearB.xPosition = x;
clearB.yPosition = y;
showB.xPosition = x1;
showB.yPosition = y1;
x += 56;
showB.xPosition = x;
showB.yPosition = y;
clearB.enabled = filter.getSnapshot() != null;
showB.enabled = clearB.enabled;
@@ -177,26 +179,26 @@ public class ExistingItemFilterGui implements IItemFilterGui {
@Override
public void actionPerformed(GuiButton guiButton) {
if(guiButton.id == ID_META) {
if(guiButton.id == ID_META + buttonIdOffset) {
filter.setMatchMeta(useMetaB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_NBT) {
} else if(guiButton.id == ID_NBT + buttonIdOffset) {
filter.setMatchNBT(useNbtB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_STICKY) {
} else if(guiButton.id == ID_STICKY + buttonIdOffset) {
filter.setSticky(stickyB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_ORE_DICT) {
} else if(guiButton.id == ID_ORE_DICT + buttonIdOffset) {
filter.setUseOreDict(useOreDictB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_SNAPSHOT) {
} else if(guiButton.id == ID_SNAPSHOT + buttonIdOffset) {
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.SET);
} else if(guiButton.id == ID_CLEAR) {
} else if(guiButton.id == ID_CLEAR + buttonIdOffset) {
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.CLEAR);
} else if(guiButton.id == ID_MERGE) {
} else if(guiButton.id == ID_MERGE + buttonIdOffset) {
sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode.MERGE);
} else if(guiButton.id == ID_SHOW) {
showSnapshotOverlay();
} else if(guiButton.id == ID_SHOW + buttonIdOffset) {
showSnapshotOverlay();
} else if (guiButton == whiteListB) {
filter.setBlacklist(!filter.isBlacklist());
sendSnapshotPacket(filter.isBlacklist() ? PacketExistingItemFilterSnapshot.Opcode.SET_BLACK
@@ -205,7 +207,7 @@ public class ExistingItemFilterGui implements IItemFilterGui {
}
private void showSnapshotOverlay() {
snapshotOverlay.setVisible(true);
snapshotOverlay.setVisible(true);
}
private void sendSnapshotPacket(PacketExistingItemFilterSnapshot.Opcode opcode) {
@@ -214,14 +216,14 @@ public class ExistingItemFilterGui implements IItemFilterGui {
private void sendFilterChange() {
updateButtons();
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
}
@Override
public void deactivate() {
useNbtB.detach();
useMetaB.detach();
useOreDictB.detach();
useOreDictB.detach();
stickyB.detach();
whiteListB.detach();
gui.removeButton(snapshotB);
@@ -239,32 +241,32 @@ public class ExistingItemFilterGui implements IItemFilterGui {
// gui.drawTexturedModalRect(gui.getGuiLeft() + 32, gui.getGuiTop() + 86, 0, 238, 18 * 5, 18);
// }
}
class SnapshotOverlay implements IGuiOverlay {
boolean visible;
@Override
public void init(IGuiScreen screen) {
public void init(IGuiScreen screen) {
}
@Override
public Rectangle getBounds() {
public Rectangle getBounds() {
return new Rectangle(0,0,gui.width,gui.height);
}
@Override
public void draw(int mouseX, int mouseY, float partialTick) {
public void draw(int mouseX, int mouseY, float partialTick) {
RenderHelper.enableGUIStandardItemLighting();
GL11.glEnable(GL11.GL_BLEND);
RenderUtil.renderQuad2D(4, 4, 0, gui.getXSize() - 9, gui.getYSize() - 8, new Vector4f(0,0,0,1));
RenderUtil.renderQuad2D(6, 6, 0, gui.getXSize() - 13, gui.getYSize() - 12, new Vector4f(0.6,0.6,0.6,1));
Minecraft mc = Minecraft.getMinecraft();
RenderItem itemRenderer = new RenderItem();
GL11.glEnable(GL11.GL_DEPTH_TEST);
List<ItemStack> snapshot = filter.getSnapshot();
int x = 15;
int y = 10;
@@ -272,20 +274,20 @@ public class ExistingItemFilterGui implements IItemFilterGui {
for(ItemStack st : snapshot) {
if(st != null) {
itemRenderer.renderItemAndEffectIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y);
//itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y, s);
}
//itemRender.renderItemOverlayIntoGUI(mc.fontRenderer, mc.getTextureManager(), st, x, y, s);
}
x += 20;
count++;
if(count % 9 == 0) {
x = 15;
y += 20;
}
}
}
}
@Override
public void setVisible(boolean visible) {
this.visible = visible;
this.visible = visible;
}
@Override
@@ -299,9 +301,9 @@ public class ExistingItemFilterGui implements IItemFilterGui {
}
@Override
public boolean isMouseInBounds(int mouseX, int mouseY) {
public boolean isMouseInBounds(int mouseX, int mouseY) {
return getBounds().contains(mouseX, mouseY);
}
}
}
@@ -1,37 +1,20 @@
package crazypants.enderio.conduit.gui.item;
import java.awt.Color;
import java.awt.Rectangle;
import java.util.ArrayList;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.gui.button.ColorButton;
import com.enderio.core.client.gui.button.MultiIconButton;
import com.enderio.core.client.gui.button.ToggleButton;
import com.enderio.core.client.gui.widget.GuiToolTip;
import com.enderio.core.client.handlers.SpecialTooltipHandler;
import com.enderio.core.client.render.ColorUtil;
import com.enderio.core.client.render.EnderWidget;
import com.enderio.core.client.render.RenderUtil;
import com.enderio.core.common.util.DyeColor;
import crazypants.enderio.EnderIO;
import crazypants.enderio.conduit.ConnectionMode;
import crazypants.enderio.conduit.IConduit;
import crazypants.enderio.conduit.gui.BaseSettingsPanel;
import crazypants.enderio.conduit.gui.FilterChangeListener;
import crazypants.enderio.conduit.gui.FilterGuiUtil;
import crazypants.enderio.conduit.gui.GuiExternalConnection;
import crazypants.enderio.conduit.item.FunctionUpgrade;
import crazypants.enderio.conduit.item.IItemConduit;
import crazypants.enderio.conduit.item.filter.ExistingItemFilter;
import crazypants.enderio.conduit.item.filter.IItemFilter;
import crazypants.enderio.conduit.item.filter.ItemFilter;
import crazypants.enderio.conduit.item.filter.ModItemFilter;
import crazypants.enderio.conduit.item.filter.PowerItemFilter;
import crazypants.enderio.conduit.packet.PacketExtractMode;
import crazypants.enderio.conduit.packet.PacketItemConduitFilter;
import crazypants.enderio.gui.IconEIO;
@@ -39,27 +22,26 @@ import crazypants.enderio.gui.RedstoneModeButton;
import crazypants.enderio.machine.IRedstoneModeControlable;
import crazypants.enderio.machine.RedstoneControlMode;
import crazypants.enderio.network.PacketHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import org.lwjgl.opengl.GL11;
import javax.annotation.Nonnull;
import java.awt.*;
public class ItemSettings extends BaseSettingsPanel {
private static final int NEXT_FILTER_ID = 98932;
private static final int ID_REDSTONE_BUTTON = 12614;
private static final int ID_COLOR_BUTTON = 179816;
private static final int ID_LOOP = 22;
private static final int ID_ROUND_ROBIN = 24;
private static final int ID_PRIORITY_UP = 25;
private static final int ID_PRIORITY_DOWN = 26;
private static final int ID_CHANNEL = 23;
private static final int ID_INSERT_CHANNEL = 23;
private static final int ID_EXTRACT_CHANNEL = 27;
private IItemConduit itemConduit;
private String inputHeading;
private String outputHeading;
private final MultiIconButton nextFilterB;
private @Nonnull IItemConduit itemConduit;
private final ToggleButton loopB;
private final ToggleButton roundRobinB;
@@ -68,71 +50,56 @@ public class ItemSettings extends BaseSettingsPanel {
private final MultiIconButton priDownB;
private final RedstoneModeButton rsB;
private final ColorButton colorB;
private final @Nonnull ColorButton colorB;
private ColorButton channelB;
private ColorButton insertChannelB;
private ColorButton extractChannelB;
boolean inOutShowIn = false;
private IItemFilter activeFilter;
private int priLeft;
private int priLeft = 46;
private int priWidth = 32;
private final GuiToolTip priorityTooltip;
private final GuiToolTip speedUpgradeTooltip;
private final GuiToolTip functionUpgradeTooltip;
private final GuiToolTip filterUpgradeTooltip;
private IItemFilterGui insertFilterGui;
private IItemFilterGui extractFilterGui;
private IItemFilterGui filterGui;
public ItemSettings(final GuiExternalConnection gui, IConduit con) {
super(IconEIO.WRENCH_OVERLAY_ITEM, EnderIO.lang.localize("itemItemConduit.name"), gui, con);
public ItemSettings(@Nonnull final GuiExternalConnection gui, @Nonnull IConduit con) {
super(IconEIO.WRENCH_OVERLAY_ITEM, EnderIO.lang.localize("itemItemConduit.name"), gui, con, "filter_upgrade_settings");
itemConduit = (IItemConduit) con;
this.textureHeight += 48;
inputHeading = EnderIO.lang.localize("gui.conduit.item.extractionFilter");
outputHeading = EnderIO.lang.localize("gui.conduit.item.insertionFilter");
int x = 52;
int x = leftColumn;
int y = customTop;
nextFilterB = MultiIconButton.createRightArrowButton(gui, NEXT_FILTER_ID, x, y);
insertChannelB = new ColorButton(gui, ID_INSERT_CHANNEL, x, y);
insertChannelB.setColorIndex(0);
insertChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
x = 66;
channelB = new ColorButton(gui, ID_CHANNEL, x, y);
channelB.setColorIndex(0);
channelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
x = rightColumn;
extractChannelB = new ColorButton(gui, ID_EXTRACT_CHANNEL, x, y);
extractChannelB.setColorIndex(0);
extractChannelB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
filterUpgradeTooltip = new GuiToolTip(new Rectangle(x - 21 - 18 * 2, customTop + 3 + 16, 18, 18), EnderIO.lang.localize("gui.conduit.item.filterupgrade")) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasFilterUpgrades(isInputVisible()) && super.shouldDraw();
}
};
speedUpgradeTooltip = new GuiToolTip(new Rectangle(x - 21 - 18*2, customTop + 3 + 16 + 36, 18, 18), EnderIO.lang.localize("gui.conduit.item.speedupgrade"), EnderIO.lang.localize("gui.conduit.item.speedupgrade2")) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasSpeedUpgrades() && super.shouldDraw();
}
};
x += 4 + extractChannelB.getWidth();
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
roundRobinB.setPaintSelectedBorder(false);
ArrayList<String> list = new ArrayList<String>();
SpecialTooltipHandler.addTooltipFromResources(list, "enderio.gui.conduit.item.functionupgrade.line");
for(FunctionUpgrade upgrade : FunctionUpgrade.values()) {
list.add(EnderIO.lang.localizeExact(upgrade.unlocName.concat(".name")));
}
functionUpgradeTooltip = new GuiToolTip(new Rectangle(x - 21 - 18*2, customTop + 3 + 34, 18, 18), list) {
@Override
public boolean shouldDraw() {
return !gui.getContainer().hasFunctionUpgrades() && super.shouldDraw();
}
};
x += 4 + roundRobinB.getWidth();
loopB = new ToggleButton(gui, ID_LOOP, x, y, IconEIO.LOOP_OFF, IconEIO.LOOP);
loopB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedEnabled"));
loopB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedDisabled"));
loopB.setPaintSelectedBorder(false);
x += channelB.getWidth() + gap;
priLeft = x - 8;
y += insertChannelB.getHeight() + 6;
x = rightColumn;
int x0 = x + 20;
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x0, y);
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.channel"));
rsB = new RedstoneModeButton(gui, ID_REDSTONE_BUTTON, x, y, new IRedstoneModeControlable() {
@Override
public void setRedstoneControlMode(RedstoneControlMode mode) {
RedstoneControlMode curMode = getRedstoneControlMode();
@@ -149,286 +116,158 @@ public class ItemSettings extends BaseSettingsPanel {
}
});
x += rsB.getWidth() + gap;
colorB = new ColorButton(gui, ID_COLOR_BUTTON, x, y);
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
colorB.setToolTipHeading(EnderIO.lang.localize("gui.conduit.item.sigCol"));
x += gap + colorB.getWidth();
roundRobinB = new ToggleButton(gui, ID_ROUND_ROBIN, x, y, IconEIO.ROUND_ROBIN_OFF, IconEIO.ROUND_ROBIN);
roundRobinB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinEnabled"));
roundRobinB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.roundRobinDisabled"));
roundRobinB.setPaintSelectedBorder(false);
x += gap + roundRobinB.getWidth();
loopB = new ToggleButton(gui, ID_LOOP, x, y, IconEIO.LOOP_OFF, IconEIO.LOOP);
loopB.setSelectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedEnabled"));
loopB.setUnselectedToolTip(EnderIO.lang.localize("gui.conduit.item.selfFeedDisabled"));
loopB.setPaintSelectedBorder(false);
priorityTooltip = new GuiToolTip(new Rectangle(priLeft + 9, y, priWidth, 16), EnderIO.lang.localize("gui.conduit.item.priority"));
x = priLeft + priWidth + 9;
priUpB = MultiIconButton.createAddButton(gui, ID_PRIORITY_UP, x, y);
priDownB = MultiIconButton.createMinusButton(gui, ID_PRIORITY_DOWN, x, y+8);
priDownB = MultiIconButton.createMinusButton(gui, ID_PRIORITY_DOWN, x, y + 8);
gui.getContainer().addFilterListener(new FilterChangeListener() {
FilterChangeListener fcl = new FilterChangeListener() {
@Override
public void onFilterChanged() {
filtersChanged();
if (insertFilterGui != null) {
insertFilterGui.deactivate();
insertFilterGui = null;
}
if (extractFilterGui != null) {
extractFilterGui.deactivate();
extractFilterGui = null;
}
gui.clearGhostSlots();
IItemFilter filt = gui.getContainer().getFilter(false);
if (filt != null) {
insertFilterGui = filt.getGui(gui, gui.getContainer().getInv().itemConduit, false);
}
filt = gui.getContainer().getFilter(true);
if (filt != null) {
extractFilterGui = filt.getGui(gui, gui.getContainer().getInv().itemConduit, true);
}
if (insertFilterGui != null) {
insertFilterGui.updateButtons();
}
if (extractFilterGui != null) {
extractFilterGui.updateButtons();
}
}
});
}
private String getHeading() {
ConnectionMode mode = con.getConnectionMode(gui.getDir());
if(mode == ConnectionMode.DISABLED) {
return "";
}
if(mode == ConnectionMode.OUTPUT) {
return outputHeading;
}
if(mode == ConnectionMode.INPUT || inOutShowIn) {
return inputHeading;
}
return outputHeading;
};
fcl.onFilterChanged();
gui.getContainer().addFilterListener(fcl);
}
@Override
protected void initCustomOptions() {
gui.getContainer().setInoutSlotsVisible(true, true);
gui.getContainer().createGhostSlots(gui.getGhostSlots());
gui.getContainer().setInventorySlotsVisible(true);
updateGuiVisibility();
}
private void updateGuiVisibility() {
deactivate();
createFilterGUI();
updateButtons();
}
private void createFilterGUI() {
boolean showInput = false;
boolean showOutput = false;
ConnectionMode mode = con.getConnectionMode(gui.getDir());
if(mode == ConnectionMode.INPUT) {
showInput = true;
} else if(mode == ConnectionMode.OUTPUT) {
showOutput = true;
} else if(mode == ConnectionMode.IN_OUT) {
nextFilterB.onGuiInit();
showInput = inOutShowIn;
showOutput = !inOutShowIn;
}
if(!showInput && !showOutput) {
filterGui = null;
activeFilter = null;
} else if(showInput) {
activeFilter = itemConduit.getInputFilter(gui.getDir());
gui.getContainer().setInventorySlotsVisible(true);
gui.getContainer().setInoutSlotsVisible(true, false);
if(activeFilter != null) {
filterGui = activeFilter.getGui(gui,itemConduit,true);
}
} else if(showOutput) {
activeFilter = itemConduit.getOutputFilter(gui.getDir());
gui.getContainer().setInoutSlotsVisible(false, true);
gui.getContainer().setInventorySlotsVisible(true);
if(activeFilter != null) {
filterGui = activeFilter.getGui(gui,itemConduit,false);
}
}
}
private void filtersChanged() {
deactiveFilterGUI();
createFilterGUI();
if(filterGui != null) {
filterGui.updateButtons();
}
}
private void updateButtons() {
rsB.onGuiInit();
rsB.setMode(itemConduit.getExtractionRedstoneMode(gui.getDir()));
ConnectionMode mode = con.getConnectionMode(gui.getDir());
if(mode == ConnectionMode.DISABLED) {
return;
}
boolean outputActive = (mode == ConnectionMode.IN_OUT && !inOutShowIn) || (mode == ConnectionMode.OUTPUT);
loopB.onGuiInit();
loopB.setSelected(itemConduit.isSelfFeedEnabled(gui.getDir()));
roundRobinB.onGuiInit();
roundRobinB.setSelected(itemConduit.isRoundRobinEnabled(gui.getDir()));
if(!outputActive) {
priUpB.onGuiInit();
priDownB.onGuiInit();
rsB.onGuiInit();
rsB.setMode(itemConduit.getExtractionRedstoneMode(gui.getDir()));
insertChannelB.onGuiInit();
insertChannelB.setColorIndex(itemConduit.getOutputColor(gui.getDir()).ordinal());
extractChannelB.onGuiInit();
extractChannelB.setColorIndex(itemConduit.getInputColor(gui.getDir()).ordinal());
colorB.onGuiInit();
colorB.setColorIndex(itemConduit.getExtractionSignalColor(gui.getDir()).ordinal());
}
gui.addToolTip(filterUpgradeTooltip);
gui.addToolTip(functionUpgradeTooltip);
if(mode == ConnectionMode.IN_OUT && !outputActive) {
loopB.onGuiInit();
loopB.setSelected(itemConduit.isSelfFeedEnabled(gui.getDir()));
}
if((mode == ConnectionMode.IN_OUT && !outputActive) || mode == ConnectionMode.INPUT) {
roundRobinB.onGuiInit();
roundRobinB.setSelected(itemConduit.isRoundRobinEnabled(gui.getDir()));
gui.addToolTip(speedUpgradeTooltip);
}
if((mode == ConnectionMode.IN_OUT && outputActive) || mode == ConnectionMode.OUTPUT) {
priUpB.onGuiInit();
priDownB.onGuiInit();
gui.addToolTip(priorityTooltip);
}
int chanCol;
if(!outputActive) {
chanCol = itemConduit.getInputColor(gui.getDir()).ordinal();
} else {
chanCol = itemConduit.getOutputColor(gui.getDir()).ordinal();
}
channelB.onGuiInit();
channelB.setColorIndex(chanCol);
if(filterGui != null) {
filterGui.updateButtons();
}
if (insertFilterGui != null) insertFilterGui.updateButtons();
if (extractFilterGui != null) extractFilterGui.updateButtons();
}
@Override
public void actionPerformed(GuiButton guiButton) {
public void actionPerformed(@Nonnull GuiButton guiButton) {
super.actionPerformed(guiButton);
if(guiButton.id == NEXT_FILTER_ID) {
inOutShowIn = !inOutShowIn;
updateGuiVisibility();
} else if(guiButton.id == ID_COLOR_BUTTON) {
itemConduit.setExtractionSignalColor(gui.getDir(), DyeColor.values()[colorB.getColorIndex()]);
if(guiButton.id == ID_COLOR_BUTTON) {
itemConduit.setExtractionSignalColor(gui.getDir(), DyeColor.fromIndex(colorB.getColorIndex()));
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(itemConduit, gui.getDir()));
return;
} else if(guiButton.id == ID_LOOP) {
itemConduit.setSelfFeedEnabled(gui.getDir(), !itemConduit.isSelfFeedEnabled(gui.getDir()));
sendFilterChange();
} else if(guiButton.id == ID_ROUND_ROBIN) {
itemConduit.setRoundRobinEnabled(gui.getDir(), !itemConduit.isRoundRobinEnabled(gui.getDir()));
sendFilterChange();
} else if(guiButton.id == ID_PRIORITY_UP) {
itemConduit.setOutputPriority(gui.getDir(), itemConduit.getOutputPriority(gui.getDir()) + 1);
sendFilterChange();
} else if(guiButton.id == ID_PRIORITY_DOWN) {
itemConduit.setOutputPriority(gui.getDir(), itemConduit.getOutputPriority(gui.getDir()) - 1);
sendFilterChange();
} else if(guiButton.id == ID_CHANNEL) {
DyeColor col = DyeColor.values()[channelB.getColorIndex()];
if(isInputVisible()) {
itemConduit.setInputColor(gui.getDir(), col);
} else {
itemConduit.setOutputColor(gui.getDir(), col);
}
sendFilterChange();
}
if(filterGui != null) {
filterGui.actionPerformed(guiButton);
} else if(guiButton.id == ID_INSERT_CHANNEL) {
DyeColor col = DyeColor.fromIndex(insertChannelB.getColorIndex());
itemConduit.setOutputColor(gui.getDir(), col);
} else if(guiButton.id == ID_EXTRACT_CHANNEL) {
DyeColor col = DyeColor.fromIndex(extractChannelB.getColorIndex());
itemConduit.setInputColor(gui.getDir(), col);
}
if (insertFilterGui != null) insertFilterGui.actionPerformed(guiButton);
if (extractFilterGui != null) extractFilterGui.actionPerformed(guiButton);
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
}
private void sendFilterChange() {
PacketHandler.INSTANCE.sendToServer(new PacketItemConduitFilter(itemConduit, gui.getDir()));
@Override
protected void connectionModeChanged(@Nonnull ConnectionMode mode) {
super.connectionModeChanged(mode);
PacketHandler.INSTANCE.sendToServer(new PacketExtractMode(itemConduit, gui.getDir()));
updateGuiVisibility();
}
@Override
protected void renderCustomOptions(int top1, float par1, int par2, int par3) {
FontRenderer fr = gui.getFontRenderer();
GL11.glColor3f(1, 1, 1);
IconEIO.map.render(EnderWidget.BUTTON_DOWN, left + priLeft, top1 - 5, priWidth, 16, 0, true);
String str = itemConduit.getOutputPriority(gui.getDir()) + "";
int sw = fr.getStringWidth(str);
String priority = EnderIO.lang.localize("gui.conduit.item.priority");
fr.drawString(priority, left + 12, top1 + 25, ColorUtil.getRGB(Color.black));
fr.drawString(str, left + priLeft + priWidth - sw - gap, top1 + 25, ColorUtil.getRGB(Color.black));
if (insertFilterGui != null) insertFilterGui.renderCustomOptions(top1, par1, par2, par3);
if (extractFilterGui != null) extractFilterGui.renderCustomOptions(top1, par1, par2, par3);
}
@Override
public void mouseClicked(int x, int y, int par3) {
super.mouseClicked(x, y, par3);
if(filterGui != null) {
filterGui.mouseClicked(x, y, par3);
}
}
private boolean isInputVisible() {
ConnectionMode mode = con.getConnectionMode(gui.getDir());
return (mode == ConnectionMode.IN_OUT && inOutShowIn) || (mode == ConnectionMode.INPUT);
}
@Override
protected void connectionModeChanged(ConnectionMode conectionMode) {
super.connectionModeChanged(conectionMode);
updateGuiVisibility();
}
@Override
protected void renderCustomOptions(int top, float par1, int par2, int par3) {
ConnectionMode mode = con.getConnectionMode(gui.getDir());
if(mode == ConnectionMode.DISABLED) {
return;
}
gui.bindGuiTexture(1);
gui.drawTexturedModalRect(gui.getGuiLeft(), gui.getGuiTop() + 55, 0, 55, gui.getXSize(), 145);
FontRenderer fr = gui.getFontRenderer();
String heading = getHeading();
int x = 0;
int rgb = ColorUtil.getRGB(Color.darkGray);
fr.drawString(heading, left + x, top, rgb);
boolean outputActive = (mode == ConnectionMode.IN_OUT && !inOutShowIn) || (mode == ConnectionMode.OUTPUT);
if(outputActive) {
GL11.glColor3f(1, 1, 1);
IconEIO.map.render(EnderWidget.BUTTON_DOWN, left + priLeft, top - 5, priWidth, 16, 0, true);
String str = itemConduit.getOutputPriority(gui.getDir()) + "";
int sw = fr.getStringWidth(str);
fr.drawString(str, left + priLeft + priWidth - sw - gap, top, ColorUtil.getRGB(Color.black));
} else {
//draw speed upgrade slot
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture(1);
gui.drawTexturedModalRect(gui.getGuiLeft() + 9, gui.getGuiTop() + 46 +18 +18, 94, 238, 18, 18);
}
//filter upgrade slot
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture(1);
gui.drawTexturedModalRect(gui.getGuiLeft() + 9, gui.getGuiTop() + 46, 94, 220, 18, 18);
//function upgrade slot
gui.drawTexturedModalRect(gui.getGuiLeft() + 9, gui.getGuiTop() + 46 + 18, 112, 238, 18, 18);
if(filterGui != null) {
filterGui.renderCustomOptions(top, par1, par2, par3);
}
if (insertFilterGui != null) insertFilterGui.mouseClicked(x, y, par3);
if (extractFilterGui != null) extractFilterGui.mouseClicked(x, y, par3);
}
@Override
public void deactivate() {
gui.getContainer().setInventorySlotsVisible(false);
super.deactivate();
gui.getContainer().setInoutSlotsVisible(false, false);
rsB.detach();
colorB.detach();
roundRobinB.detach();
loopB.detach();
nextFilterB.detach();
priUpB.detach();
priDownB.detach();
gui.removeToolTip(priorityTooltip);
gui.removeToolTip(speedUpgradeTooltip);
gui.removeToolTip(functionUpgradeTooltip);
gui.removeToolTip(filterUpgradeTooltip);
channelB.detach();
deactiveFilterGUI();
insertChannelB.detach();
extractChannelB.detach();
gui.getContainer().setInventorySlotsVisible(false);
if (insertFilterGui != null) insertFilterGui.deactivate();
if (extractFilterGui != null) extractFilterGui.deactivate();
}
private void deactiveFilterGUI() {
if(filterGui != null) {
filterGui.deactivate();
filterGui = null;
}
gui.clearGhostSlots();
@Override
protected boolean hasFilters() {
return true;
}
@Override
protected boolean hasUpgrades() {
return true;
}
}
@@ -27,13 +27,13 @@ public class ModItemFilterGui implements IItemFilterGui {
private final IItemConduit itemConduit;
private final GuiExternalConnection gui;
boolean isInput;
private final ModItemFilter filter;
private final Rectangle[] inputBounds;
private final IconButton[] deleteButs;
private final IconButton whiteListB;
@@ -42,47 +42,45 @@ public class ModItemFilterGui implements IItemFilterGui {
private final int tfWidth;
private final int tfTextureX;
private final int tfTextureY;
public ModItemFilterGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
this.gui = gui;
this.itemConduit = itemConduit;
this.isInput = isInput;
int butLeft = isInput ? 5 : 106;
int x = butLeft;
int y = 96;
if(isInput) {
filter = (ModItemFilter) itemConduit.getInputFilter(gui.getDir());
inputOffsetX = 50;
tfWidth = 96;
tfTextureX = 120;
tfTextureY = 214;
} else {
filter = (ModItemFilter) itemConduit.getOutputFilter(gui.getDir());
inputOffsetX = 32;
tfWidth = 114;
tfTextureX = 120;
tfTextureY = 238;
}
inputOffsetX = x;
tfWidth = 52;
tfTextureX = 120;
tfTextureY = 214;
inputBounds = new Rectangle[] {
new Rectangle(inputOffsetX,47,16,16),
new Rectangle(inputOffsetX,68,16,16),
new Rectangle(inputOffsetX,89,16,16)
new Rectangle(inputOffsetX,y,16,16),
new Rectangle(inputOffsetX,y + 18,16,16),
new Rectangle(inputOffsetX,y + 36,16,16)
};
deleteButs = new IconButton[inputBounds.length];
deleteButs = new IconButton[inputBounds.length];
for(int i=0; i < deleteButs.length; i++) {
Rectangle r = inputBounds[i];
IconButton but = new IconButton(gui, GuiExternalConnection.nextButtonId(), r.x + 19, r.y, IconEIO.MINUS);
deleteButs[i] = but;
}
whiteListB = new IconButton(gui, -1, inputOffsetX - 19, 89, IconEIO.FILTER_WHITELIST);
whiteListB = new IconButton(gui, -1, x + 64, y - 25, IconEIO.FILTER_WHITELIST);
whiteListB.setToolTip(EnderIO.lang.localize("gui.conduit.item.whitelist"));
}
@Override
public void deactivate() {
public void deactivate() {
for(IconButton but : deleteButs) {
but.detach();
}
@@ -109,7 +107,7 @@ public class ModItemFilterGui implements IItemFilterGui {
public void actionPerformed(GuiButton guiButton) {
for(int i=0; i < deleteButs.length; i++) {
IconButton but = deleteButs[i];
if(but.id == guiButton.id) {
if(but == guiButton) {
setMod(i, null);
return;
}
@@ -120,7 +118,7 @@ public class ModItemFilterGui implements IItemFilterGui {
}
@Override
public void renderCustomOptions(int top, float par1, int par2, int par3) {
public void renderCustomOptions(int top, float par1, int par2, int par3) {
GL11.glColor3f(1, 1, 1);
gui.bindGuiTexture();
for(Rectangle r : inputBounds) {
@@ -128,8 +126,8 @@ public class ModItemFilterGui implements IItemFilterGui {
gui.drawTexturedModalRect(gui.getGuiLeft() + r.x - 1, gui.getGuiTop() + r.y - 1, 24, 214, 18, 18);
//text box
gui.drawTexturedModalRect(gui.getGuiLeft() + r.x + 38, gui.getGuiTop() + r.y - 1, tfTextureX, tfTextureY, tfWidth, 18);
}
}
FontRenderer fr = Minecraft.getMinecraft().fontRenderer;
for(int i=0;i<inputBounds.length;i++) {
String mod = filter.getModAt(i);
@@ -140,26 +138,26 @@ public class ModItemFilterGui implements IItemFilterGui {
}
}
}
@Override
public void mouseClicked(int x, int y, int par3) {
ItemStack st = Minecraft.getMinecraft().thePlayer.inventory.getItemStack();
if(st == null) {
return;
}
for(int i=0;i<inputBounds.length;i++) {
Rectangle bound = inputBounds[i];
if(bound.contains(x,y)) {
setMod(i, st);
}
}
}
}
private void setMod(int i, ItemStack st) {
String mod = filter.setMod(i, st);
String mod = filter.setMod(i, st);
PacketHandler.INSTANCE.sendToServer(new PacketModItemFilter(itemConduit, gui.getDir(),isInput,i, mod));
}
private void toggleBlacklist() {
@@ -1,5 +1,6 @@
package crazypants.enderio.conduit.gui.item;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import com.enderio.core.client.gui.button.ToggleButton;
@@ -42,11 +43,10 @@ public class PowerItemFilterGui implements IItemFilterGui {
filter = (PowerItemFilter) itemConduit.getOutputFilter(gui.getDir());
}
int butLeft = 37;
int butLeft = isInput ? 5 : 106;
int x = butLeft;
int y = 68;
int y = 96 + 24;
x += 20;
stickyB = new ToggleButton(gui, ID_STICKY, x, y, IconEIO.FILTER_STICKY_OFF, IconEIO.FILTER_STICKY);
String[] lines = EnderIO.lang.localizeList("gui.conduit.item.stickyEnabled");
stickyB.setSelectedToolTip(lines);
@@ -59,6 +59,20 @@ public class PowerItemFilterGui implements IItemFilterGui {
@Override
public void mouseClicked(int x, int y, int par3) {
x += gui.getGuiLeft();
y += gui.getGuiTop();
if(par3 == 1) {
Minecraft mc = Minecraft.getMinecraft();
if (modeB.mousePressed(mc, x, y)) {
modeB.func_146113_a(mc.getSoundHandler());
filter.setMode(filter.getMode().prev());
sendFilterChange();
} else if (levelB.mousePressed(mc, x, y)) {
levelB.func_146113_a(mc.getSoundHandler());
filter.setLevel((filter.getLevel() + PowerItemFilter.MAX_LEVEL) % (PowerItemFilter.MAX_LEVEL + 1));
sendFilterChange();
}
}
}
@Override
@@ -68,8 +82,8 @@ public class PowerItemFilterGui implements IItemFilterGui {
stickyB.setSelected(filter.isSticky());
}
int x0 = gui.getGuiLeft() + 80;
int y0 = gui.getGuiTop() + 65;
int x0 = gui.getGuiLeft() + (isInput ? 5 : 106);
int y0 = gui.getGuiTop() + 96;
int x1 = x0 + 45;
modeB.xPosition = x0;
@@ -95,13 +109,13 @@ public class PowerItemFilterGui implements IItemFilterGui {
@Override
public void actionPerformed(GuiButton guiButton) {
if(guiButton.id == ID_STICKY) {
if(guiButton == stickyB) {
filter.setSticky(stickyB.isSelected());
sendFilterChange();
} else if(guiButton.id == ID_MORE) {
} else if(guiButton == modeB) {
filter.setMode(filter.getMode().next());
sendFilterChange();
} else if(guiButton.id == ID_LEVEL) {
} else if(guiButton == levelB) {
filter.setLevel((filter.getLevel() + 1) % (PowerItemFilter.MAX_LEVEL + 1));
sendFilterChange();
}
@@ -108,7 +108,7 @@ public class ExistingItemFilter implements IItemFilter {
public int getSlotCount() {
return 0;
}
public void setSnapshot(NetworkedInventory ni) {
snapshot = new ArrayList<ItemStack>();
mergeSnapshot(ni);
@@ -201,7 +201,7 @@ public class ExistingItemFilter implements IItemFilter {
@Override
public void readFromNBT(NBTTagCompound nbtRoot) {
readSettingsFromNBT(nbtRoot);
if(nbtRoot.hasKey("snapshot")) {
snapshot = new ArrayList<ItemStack>();
NBTTagList itemList = (NBTTagList)nbtRoot.getTag("snapshot");
@@ -212,7 +212,7 @@ public class ExistingItemFilter implements IItemFilter {
snapshot.add(itemStack);
}
}
} else {
snapshot = null;
}
@@ -229,9 +229,9 @@ public class ExistingItemFilter implements IItemFilter {
@Override
public void writeToNBT(NBTTagCompound nbtRoot) {
writeSettingToNBT(nbtRoot);
if(snapshot != null) {
NBTTagList itemList = new NBTTagList();
for (ItemStack item : snapshot) {
if(item != null) {
@@ -241,7 +241,7 @@ public class ExistingItemFilter implements IItemFilter {
}
}
nbtRoot.setTag("snapshot", itemList);
}
}
@@ -289,4 +289,8 @@ public class ExistingItemFilter implements IItemFilter {
}
@Override
public String getUnlocalizedName() {
return "gui.existing_item_filter";
}
}
@@ -47,4 +47,8 @@ public interface IItemFilter {
int getSlotCount();
default String getUnlocalizedName() {
return "gui.basic_item_filter";
}
}
@@ -287,7 +287,7 @@ public class ItemFilter implements IInventory, IItemFilter {
@SideOnly(Side.CLIENT)
public IItemFilterGui getGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
ItemConduitFilterContainer cont = new ItemConduitFilterContainer(itemConduit, gui.getDir(), isInput);
BasicItemFilterGui basicItemFilterGui = new BasicItemFilterGui(gui, cont, !isInput);
BasicItemFilterGui basicItemFilterGui = new BasicItemFilterGui(gui, cont, !isInput, isInput);
basicItemFilterGui.createFilterSlots();
return basicItemFilterGui;
}
@@ -452,6 +452,11 @@ public class ItemFilter implements IInventory, IItemFilter {
return "ItemFilter [isAdvanced=" + isAdvanced + ", items=" + Arrays.toString(items) + "]";
}
@Override
public String getUnlocalizedName() {
return isAdvanced ? "enderio.gui.advanced_item_filter" : "gui.basic_item_filter";
}
class ItemFilterGhostSlot extends GhostSlot {
private final int slot;
private final Runnable cb;
@@ -32,7 +32,7 @@ public class ItemFilterBig extends ItemFilter {
@SideOnly(Side.CLIENT)
public IItemFilterGui getGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) {
ItemConduitFilterContainer cont = new ItemConduitFilterContainer(itemConduit, gui.getDir(), isInput);
BigItemFilterGui bigItemFilterGui = new BigItemFilterGui(gui, cont, !isInput);
BigItemFilterGui bigItemFilterGui = new BigItemFilterGui(gui, cont, !isInput, isInput);
bigItemFilterGui.createFilterSlots();
return bigItemFilterGui;
}
@@ -46,7 +46,7 @@ public class ItemFilterBig extends ItemFilter {
for (int row = 0; row < numRows; ++row) {
for (int col = 0; col < 8; ++col) {
int x = leftX + col * 18;
int y = topY + row * 20;
int y = topY + row * 18;
slots.add(new ItemFilterGhostSlot(index, x, y, cb));
index++;
}
@@ -66,4 +66,8 @@ public class ItemFilterBig extends ItemFilter {
return "Big"+super.toString();
}
@Override
public String getUnlocalizedName() {
return isAdvanced() ? "gui.big_advanced_item_filter" : "gui.big_item_filter";
}
}
@@ -163,4 +163,8 @@ public class ModItemFilter implements IItemFilter {
readFromNBT(tag);
}
@Override
public String getUnlocalizedName() {
return "gui.mod_item_filter";
}
}
@@ -36,6 +36,11 @@ public class PowerItemFilter implements IItemFilter {
CmpMode[] values = values();
return values[(ordinal() + 1) % values.length];
}
public CmpMode prev() {
CmpMode[] values = values();
return values[(ordinal() - 1 + values.length) % values.length];
}
}
public static final int MAX_LEVEL = 4;
@@ -150,4 +155,9 @@ public class PowerItemFilter implements IItemFilter {
NBTTagCompound settingsTag = NetworkUtil.readNBTTagCompound(buf);
readSettingsFromNBT(settingsTag);
}
@Override
public String getUnlocalizedName() {
return "gui.power_item_filter";
}
}
@@ -36,9 +36,9 @@ public class FilterTab implements ITabPanel {
FilterTab(GuiTransceiver parent) {
this.parent = parent;
container = parent.getContainer();
sendGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), true), false, container.getFilterOffset().x,
sendGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), true), false, true, container.getFilterOffset().x,
container.getFilterOffset().y, 0);
recGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), false), false, container.getFilterOffset().x,
recGui = new BasicItemFilterGui(parent, new FilterContainer(parent.getTransciever(), false), false, false, container.getFilterOffset().x,
container.getFilterOffset().y, 20);
sendRecB = MultiIconButton.createRightArrowButton(parent, 8888, container.getFilterOffset().x + 79, container.getFilterOffset().y - 20);
@@ -1171,6 +1171,83 @@ enderio.gui.spawnGurad.showRange=Show Range
enderio.gui.spawnGurad.hideRange=Hide Range
enderio.gui.spawnGurad.range=Range:
# Filters
enderio.gui.item_filter.damage.disabled=Ignore Damage
enderio.gui.item_filter.damage.damage_00_25=Up to 25% Damaged
enderio.gui.item_filter.damage.damage_25_00=More than 25% Damaged
enderio.gui.item_filter.damage.damage_00_50=Up to 50% Damaged
enderio.gui.item_filter.damage.damage_50_00=More than 50% Damaged
enderio.gui.item_filter.damage.damage_00_75=Up to 75% Damaged
enderio.gui.item_filter.damage.damage_75_00=More than 75% Damaged
enderio.gui.item_filter.damage.damage_00_00=Not Damaged
enderio.gui.item_filter.damage.damage_01_00=Damaged
enderio.gui.item_filter.damage.damage_yes=Can be Damaged
enderio.gui.item_filter.damage.damage_not=Cannot be Damaged
enderio.gui.edit_item_filter=Edit Filter Settings
enderio.gui.item_filter.close=Close Filter
enderio.gui.item_filter.close2=Go back to previous inventory
enderio.gui.item_filter.whitelist=Whitelist
enderio.gui.item_filter.blacklist=Blacklist
enderio.gui.item_filter.match_meta=Match Metadata
enderio.gui.item_filter.ignore_meta=Ignore Metadata
enderio.gui.item_filter.sticky_enabled=Sticky Mode Enabled
enderio.gui.item_filter.sticky_enabled2=Selected items will only be sent to this or other sticky outputs
enderio.gui.item_filter.sticky_disabled=Sticky Mode Disabled
enderio.gui.item_filter.ore_dic_enabled=Ore Dictionary Enabled
enderio.gui.item_filter.ore_dic_disabled=Ore Dictionary Disabled
enderio.gui.item_filter.match_nbt=Match NBT
enderio.gui.item_filter.ignore_nbt=Ignore NBT
enderio.gui.existing.item_filter.snapshot=Snapshot
enderio.gui.existing.item_filter.merge=Merge
enderio.gui.existing.item_filter.clear=Clear
enderio.gui.existing.item_filter.show=Show
enderio.gui.existing.item_filter.snapshot2=Optional: If no snapshot is set, the inventory content will be used as filter
enderio.gui.existing.item_filter.merge2=Merge the current snapshot with a new one
enderio.gui.existing.item_filter.clear2=Clear the snapshot
enderio.gui.existing.item_filter.show2=Show the current snapshot
enderio.item.item_existing_item_filter.filter_not_updated=Filter not updated
enderio.item.item_existing_item_filter.filter_updated=Filter updated
enderio.gui.basic_item_filter=Basic Item Filter
enderio.gui.advanced_item_filter=Advanced Item Filter
enderio.gui.limited_item_filter=Limited Item Filter
enderio.gui.big_item_filter=Big Item Filter
# Note big_advanced_item_filter doesn't have enough space for the full name
enderio.gui.big_advanced_item_filter=Filter
enderio.gui.existing_item_filter=Existing Item Filter
enderio.gui.mod_item_filter=Mod Item Filter
enderio.gui.power_item_filter=Power Item Filter
enderio.gui.species_item_filter=Species Item Filter
enderio.gui.soul_filter_normal=Soul Item Filter
enderio.gui.soul_filter_big=Big Soul Item Filter
enderio.gui.enchantment_filter_normal=Enchantment Item Filter
enderio.gui.enchantment_filter_big=Big Enchantment Item Filter
enderio.gui.fluid_filter=Basic Fluid Filter
enderio.gui.redstone_filter.and=Redstone AND Filter
enderio.gui.redstone_filter.or=Redstone OR Filter
enderio.gui.redstone_filter.nor=Redstone NOR Filter
enderio.gui.redstone_filter.nand=Redstone NAND Filter
enderio.gui.redstone_filter.xor=Redstone XOR Filter
enderio.gui.redstone_filter.xnor=Redstone XNOR Filter
enderio.gui.redstone_filter.counting=Redstone Counting Filter
enderio.gui.redstone_filter.timer=Redstone Timer Filter
enderio.gui.mod.item_filter.delete=Delete
enderio.gui.mod.item_filter.slot=Input Slot
enderio.gui.power.item_filter.compare=Comparison Mode
enderio.gui.power.item_filter.percent=Power Percentage
enderio.gui.redstone_filter.signal_color=Redstone Signal Color
enderio.gui.redstone_filter.input_signal=Input Signal
enderio.gui.redstone_filter.count=Count
enderio.gui.redstone_filter.time=Time
#conduits
enderio.gui.conduit.ioMode=Mode
enderio.gui.conduit.ioMode.inOut=In / Out
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB