Fix filters

Add oredictionary filter
Fix inconsistent with WCT
Gui improvements
Filter caching
GuiFCImgButton 3/4 size support
This commit is contained in:
lordIcocain committed 2025-04-11 02:00:31 +03:00
1 parent 083c135874
commit bb912ec8a1
14 files changed
+310 -232

No files matched your search

@@ -22,6 +22,7 @@ public class GuiFCImgButton extends GuiButton implements ITooltip {
private static Map<EnumPair, ButtonAppearance> appearances;
private final String buttonSetting;
private boolean halfSize = false;
private boolean threeFourths = false;
private String fillVar;
private String currentValue;
private final boolean background;
@@ -145,6 +146,14 @@ public class GuiFCImgButton extends GuiButton implements ITooltip {
this.halfSize = halfSize;
}
public boolean isThreeFourths() {
return threeFourths;
}
public void setThreeFourths(boolean threeFourths) {
this.threeFourths = threeFourths;
}
public String getFillVar() {
return this.fillVar;
}
@@ -165,12 +174,12 @@ public class GuiFCImgButton extends GuiButton implements ITooltip {
@Override
public int getWidth() {
return this.halfSize ? 8 : 16;
return this.halfSize ? 8 : threeFourths ? 12 : 16;
}
@Override
public int getHeight() {
return this.halfSize ? 8 : 16;
return this.halfSize ? 8 : threeFourths ? 12 : 16;
}
@Override
@@ -227,79 +236,44 @@ public class GuiFCImgButton extends GuiButton implements ITooltip {
if (this.visible) {
final int iconIndex = this.getIconIndex();
final int iconPage = this.getIconPage();
this.width = getWidth();
this.height = getHeight();
float scaleFactor = halfSize ? 3 : threeFourths ? 4.5f : 6;
if (this.halfSize) {
this.width = 8;
this.height = 8;
GL11.glPushMatrix();
GL11.glTranslatef(this.xPosition, this.yPosition, 0.0F);
GL11.glScalef(0.5f / 16 * 3, 0.5f / 16 * 3, 0.5f / 16 * 3);
if (this.enabled) {
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
} else {
GL11.glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
}
par1Minecraft.renderEngine.bindTexture(FluidCraft.resource("textures/gui/states" + iconPage + ".png"));
this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition
&& par2 < this.xPosition + this.width
&& par3 < this.yPosition + this.height;
final int uv_y = (int) Math.floor(iconIndex / 3.0);
final int uv_x = iconIndex - uv_y * 3;
if (this.background) {
this.drawTexturedModalRect(
0,
0,
Math.round(32F * 16F / 3F),
Math.round(32F * 16F / 3F),
Math.round(16F * 16F / 3F),
Math.round(16F * 16F / 3F));
}
this.drawTexturedModalRect(
0,
0,
Math.round(uv_x * 16F * 16F / 3F),
Math.round(uv_y * 16F * 16F / 3F),
Math.round(16F * 16F / 3F),
Math.round(16F * 16F / 3F));
GL11.glPushMatrix();
GL11.glTranslatef(this.xPosition, this.yPosition, 0.0F);
GL11.glScalef(0.5f / 16 * scaleFactor, 0.5f / 16 * scaleFactor, 0.5f / 16 * scaleFactor);
if (this.enabled) {
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
} else {
GL11.glPushMatrix();
GL11.glTranslatef(this.xPosition, this.yPosition, 0.0F);
GL11.glScalef(0.5f / 16 * 6, 0.5f / 16 * 6, 0.5f / 16 * 6);
if (this.enabled) {
GL11.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
} else {
GL11.glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
}
GL11.glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
}
par1Minecraft.renderEngine.bindTexture(FluidCraft.resource("textures/gui/states" + iconPage + ".png"));
this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition
&& par2 < this.xPosition + this.width
&& par3 < this.yPosition + this.height;
par1Minecraft.renderEngine.bindTexture(FluidCraft.resource("textures/gui/states" + iconPage + ".png"));
this.field_146123_n = par2 >= this.xPosition && par3 >= this.yPosition
&& par2 < this.xPosition + this.width
&& par3 < this.yPosition + this.height;
final int uv_y = (int) Math.floor(iconIndex / 3.0);
final int uv_x = iconIndex - uv_y * 3;
if (this.background) {
this.drawTexturedModalRect(
0,
0,
Math.round(32F * 16F / 3F),
Math.round(32F * 16F / 3F),
Math.round(16F * 16F / 3F),
Math.round(16F * 16F / 3F));
}
final int uv_y = (int) Math.floor(iconIndex / 3.0);
final int uv_x = iconIndex - uv_y * 3;
if (this.background) {
this.drawTexturedModalRect(
0,
0,
Math.round(uv_x * 16F * 16F / 3F),
Math.round(uv_y * 16F * 16F / 3F),
Math.round(32F * 16F / 3F),
Math.round(32F * 16F / 3F),
Math.round(16F * 16F / 3F),
Math.round(16F * 16F / 3F));
}
this.drawTexturedModalRect(
0,
0,
Math.round(uv_x * 16F * 16F / 3F),
Math.round(uv_y * 16F * 16F / 3F),
Math.round(16F * 16F / 3F),
Math.round(16F * 16F / 3F));
this.mouseDragged(par1Minecraft, par2, par3);
GL11.glPopMatrix();
}
@@ -5,6 +5,8 @@ import net.minecraft.client.gui.GuiButton;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.input.Keyboard;
import com.glodblock.github.FluidCraft;
import com.glodblock.github.client.gui.container.ContainerMagnetFilter;
import com.glodblock.github.client.gui.widget.FCGuiBaseButton;
@@ -20,6 +22,7 @@ import appeng.api.storage.ITerminalHost;
import appeng.client.gui.AEBaseMEGui;
import appeng.client.gui.widgets.GuiImgButton;
import appeng.client.gui.widgets.GuiTabButton;
import appeng.client.gui.widgets.MEGuiTextField;
public class GuiMagnetFilter extends AEBaseMEGui {
@@ -27,7 +30,8 @@ public class GuiMagnetFilter extends AEBaseMEGui {
protected ContainerMagnetFilter cont;
private static final ResourceLocation TEX_BG = FluidCraft.resource("textures/gui/magnet_filter.png");
protected Component components[] = new Component[3];
protected Component[] components = new Component[4];
protected MEGuiTextField oreDict;
protected GuiTabButton originalGuiBtn;
protected GuiImgButton clearBtn;
@@ -36,13 +40,14 @@ public class GuiMagnetFilter extends AEBaseMEGui {
this.xSize = 195;
this.ySize = 214;
this.cont = (ContainerMagnetFilter) this.inventorySlots;
oreDict = new MEGuiTextField(149, 12, NameConst.i18n(NameConst.TT_MAGNET_CARD_OREDICT));
}
private class Component {
private GuiFCImgButton enable;
private GuiFCImgButton disable;
private String action;
private final GuiFCImgButton enable;
private final GuiFCImgButton disable;
private final String action;
private boolean var;
public Component(int x, int y, boolean var, String action) {
@@ -50,6 +55,8 @@ public class GuiMagnetFilter extends AEBaseMEGui {
this.disable = new GuiFCImgButton(x, y, "DISABLE_12x", "DISABLE", false);
this.var = var;
this.action = action;
enable.setThreeFourths(true);
disable.setThreeFourths(true);
buttonList.add(this.enable);
buttonList.add(this.disable);
}
@@ -98,20 +105,29 @@ public class GuiMagnetFilter extends AEBaseMEGui {
? NameConst.GUI_MAGNET_CARD_WhiteList
: NameConst.GUI_MAGNET_CARD_BlackList)));
this.components[0] = new Component(
this.guiLeft + 156,
this.guiLeft + 157,
this.guiTop + 18,
this.cont.nbt,
"WirelessTerminal.magnet.NBT");
this.components[1] = new Component(
this.guiLeft + 156,
this.guiLeft + 157,
this.guiTop + 31,
this.cont.meta,
"WirelessTerminal.magnet.Meta");
this.components[2] = new Component(
this.guiLeft + 156,
this.guiLeft + 157,
this.guiTop + 44,
this.cont.ore,
"WirelessTerminal.magnet.Ore");
this.components[3] = new Component(
this.guiLeft + 157,
this.guiTop + 112,
this.cont.oreDict,
"WirelessTerminal.magnet.OreDictState");
oreDict.x = this.guiLeft + 7;
oreDict.y = this.guiTop + 112;
oreDict.setText(this.cont.oreDictFilter);
this.buttonList.add(
this.originalGuiBtn = new GuiTabButton(
@@ -122,23 +138,27 @@ public class GuiMagnetFilter extends AEBaseMEGui {
itemRender));
this.originalGuiBtn.setHideEdge(13); // GuiTabButton implementation //
this.clearBtn = new GuiImgButton(this.guiLeft + 8, this.guiTop + 48, Settings.ACTIONS, ActionItems.CLOSE);
this.clearBtn = new GuiImgButton(this.guiLeft + 7, this.guiTop + 48, Settings.ACTIONS, ActionItems.CLOSE);
this.clearBtn.setHalfSize(true);
this.buttonList.add(this.clearBtn);
}
@Override
public void drawScreen(int mouseX, int mouseY, float btn) {
handleTooltip(mouseX, mouseY, oreDict);
super.drawScreen(mouseX, mouseY, btn);
}
@Override
public void drawFG(int offsetX, int offsetY, int mouseX, int mouseY) {
this.fontRendererObj.drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD)), 8, 6, 0x404040);
this.fontRendererObj
.drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD_NBT)), 61, 22, 0x404040);
this.fontRendererObj
.drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD_META)), 61, 34, 0x404040);
this.fontRendererObj
.drawString(getGuiDisplayName(NameConst.i18n(NameConst.GUI_MAGNET_CARD_ORE)), 61, 46, 0x404040);
this.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD), 8, 6, 0x404040);
this.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD_NBT), 61, 22, 0x404040);
this.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD_META), 61, 34, 0x404040);
this.fontRendererObj.drawString(NameConst.i18n(NameConst.GUI_MAGNET_CARD_ORE), 61, 46, 0x404040);
this.components[0].setVar(this.cont.nbt);
this.components[1].setVar(this.cont.meta);
this.components[2].setVar(this.cont.ore);
this.components[3].setVar(this.cont.oreDict);
for (Component c : components) {
c.draw();
}
@@ -149,8 +169,25 @@ public class GuiMagnetFilter extends AEBaseMEGui {
@Override
public void drawBG(int offsetX, int offsetY, int mouseX, int mouseY) {
mc.getTextureManager().bindTexture(TEX_BG);
drawTexturedModalRect(offsetX, offsetY, 0, 0, 176, ySize);
bindTexture(TEX_BG);
drawTexturedModalRect(offsetX, offsetY, 0, 0, xSize, ySize);
oreDict.drawTextBox();
}
@Override
protected void keyTyped(char typedChar, int keyCode) {
if (oreDict.isFocused() && (Keyboard.KEY_NUMPADENTER == keyCode || Keyboard.KEY_RETURN == keyCode)) {
FluidCraft.proxy.netHandler.sendToServer(
new CPacketFluidPatternTermBtns("WirelessTerminal.magnet.OreDictFilter", oreDict.getText()));
}
if (!oreDict.textboxKeyTyped(typedChar, keyCode)) super.keyTyped(typedChar, keyCode);
}
@Override
protected void mouseClicked(int xCoord, int yCoord, int btn) {
oreDict.mouseClicked(xCoord, yCoord, btn);
super.mouseClicked(xCoord, yCoord, btn);
}
@Override
@@ -15,6 +15,7 @@ import appeng.api.storage.ITerminalHost;
import appeng.container.guisync.GuiSync;
import appeng.container.slot.AppEngSlot;
import appeng.container.slot.IOptionalSlotHost;
import appeng.container.slot.OptionalSlotFake;
import appeng.container.slot.SlotFake;
import appeng.container.slot.SlotPatternOutputs;
import appeng.util.Platform;
@@ -32,13 +33,21 @@ public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalS
@GuiSync(104)
public boolean ore;
protected SlotFake[] filterSlots;
@GuiSync(105)
public boolean oreDict;
@GuiSync(106)
public String oreDictFilter;
protected OptionalSlotFake[] filterSlots;
protected final IInventory filter;
public ContainerMagnetFilter(InventoryPlayer ip, ITerminalHost monitorable) {
super(ip, monitorable);
this.filter = ((IItemTerminal) monitorable).getInventoryByName("config");
this.filterSlots = new SlotFake[27];
this.filterSlots = new OptionalSlotFake[27];
oreDictFilter = ((IWirelessMagnetFilter) getHost()).getOreDictFilter();
for (int y = 0; y < 3; y++) {
for (int x = 0; x < 9; x++) {
this.addSlotToContainer(
@@ -51,6 +60,7 @@ public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalS
0,
0,
1));
this.filterSlots[x + y * 9].setRenderDisabled(false);
}
}
bindPlayerInventory(ip, 0, 126);
@@ -84,6 +94,8 @@ public class ContainerMagnetFilter extends FCBaseContainer implements IOptionalS
this.meta = host.getMetaMode();
this.nbt = host.getNBTMode();
this.ore = host.getOreMode();
this.oreDict = host.getOreDictMode();
this.oreDictFilter = host.getOreDictFilter();
}
super.detectAndSendChanges();
}
@@ -26,6 +26,7 @@ import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IAEStack;
import appeng.api.util.AECableType;
import appeng.items.tools.powered.ToolWirelessTerminal;
import appeng.me.storage.NullInventory;
import appeng.util.Platform;
public abstract class BaseWirelessInventory extends MEMonitorHandler implements IWirelessTerminal, IWirelessExtendCard {
@@ -55,6 +56,19 @@ public abstract class BaseWirelessInventory extends MEMonitorHandler implements
this.readFromNBT();
}
@SuppressWarnings("unchecked")
public BaseWirelessInventory(final ItemStack is, final int slot, IGridNode gridNode, EntityPlayer player,
StorageChannel channel, boolean nullInventory) {
super(new NullInventory<>());
this.ips = (ToolWirelessTerminal) is.getItem();
this.grid = gridNode;
this.target = is;
this.inventorySlot = slot;
this.channel = channel;
this.source = new PlayerSource(player, this);
this.readFromNBT();
}
private void readFromNBT() {
NBTTagCompound data = Platform.openNbtData(this.target);
this.setMagnetCardMode(WirelessMagnet.Mode.values()[data.getInteger(modeKey)]);
@@ -100,9 +114,7 @@ public abstract class BaseWirelessInventory extends MEMonitorHandler implements
}
@Override
public void saveChanges() {
}
public void saveChanges() {}
@Override
public IGridNode getActionableNode() {
@@ -10,6 +10,10 @@ public interface IWirelessMagnetFilter extends IWirelessTerminal, IItemTerminal
boolean getOreMode();
boolean getOreDictMode();
String getOreDictFilter();
void setListMode(WirelessMagnet.ListMode mode);
void setNBTMode(boolean ignoreNBT);
@@ -18,6 +22,10 @@ public interface IWirelessMagnetFilter extends IWirelessTerminal, IItemTerminal
void setOreMode(boolean useOre);
void setOreDictMode(boolean useOreDict);
void setOreDictFilter(String str);
default void clearConfig() {};
}
@@ -3,8 +3,6 @@ package com.glodblock.github.inventory.item;
import static com.glodblock.github.common.Config.magnetRange;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -17,11 +15,7 @@ import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
import com.glodblock.github.common.item.ItemWirelessUltraTerminal;
import com.glodblock.github.inventory.ItemBiggerAppEngInventory;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.util.Platform;
public class WirelessMagnet {
@@ -54,32 +48,13 @@ public class WirelessMagnet {
}
@SuppressWarnings("unchecked")
public static List<ItemStack> getFilteredItems(ItemStack wirelessTerm) {
if (wirelessTerm == null) {
return null;
}
if (wirelessTerm.getItem() instanceof ItemWirelessUltraTerminal) {
if (wirelessTerm.hasTagCompound()) {
NBTTagCompound data = Platform.openNbtData(wirelessTerm);
if (!data.hasKey(filterKey)) {
return Collections.emptyList();
}
AppEngInternalInventory filterList = new ItemBiggerAppEngInventory(wirelessTerm, filterKey, 27);
ArrayList<ItemStack> list = new ArrayList<>();
filterList.iterator().forEachRemaining(list::add);
return list;
}
}
return Collections.emptyList();
}
public static boolean isConfigured(ItemStack wirelessTerm) {
NBTTagCompound data = Platform.openNbtData(wirelessTerm);
return data.hasKey(modeKey);
}
public static void doMagnet(ItemStack wirelessTerm, World world, EntityPlayer player,
WirelessMagnetCardFilterInventory inv) {
public static void doMagnet(ItemStack wirelessTerm, World world, EntityPlayer player) {
if (Platform.isClient() || wirelessTerm == null
|| getMode(wirelessTerm) == Mode.Off
|| player == null
@@ -94,7 +69,6 @@ public class WirelessMagnet {
(int) player.posY,
(int) player.posZ,
magnetRange).iterator();
IItemList<IAEItemStack> filteredList = inv.getAEFilteredItems();
while (iterator.hasNext()) {
EntityItem itemToGet = (EntityItem) iterator.next();
if (itemToGet.func_145800_j() != null && itemToGet.func_145800_j()
@@ -107,19 +81,16 @@ public class WirelessMagnet {
if (closestPlayer != null && closestPlayer != player) {
continue;
}
ItemStack stack = itemToGet.getEntityItem();
if ((inv.getListMode() == ListMode.WhiteList && !filteredList.isEmpty()
&& inv.isItemFiltered(stack, filteredList))
|| (inv.getListMode() == ListMode.BlackList && !inv.isItemFiltered(stack, filteredList))) {
if (itemToGet.delayBeforeCanPickup > 0) {
itemToGet.delayBeforeCanPickup = 0;
}
itemToGet.motionX = itemToGet.motionY = itemToGet.motionZ = 0;
itemToGet.setPosition(
player.posX - 0.2 + (world.rand.nextDouble() * 0.4),
player.posY - 0.6,
player.posZ - 0.2 + (world.rand.nextDouble() * 0.4));
if (itemToGet.delayBeforeCanPickup > 0) {
itemToGet.delayBeforeCanPickup = 0;
}
itemToGet.motionX = itemToGet.motionY = itemToGet.motionZ = 0;
itemToGet.setPosition(
player.posX - 0.2 + (world.rand.nextDouble() * 0.4),
player.posY - 0.6,
player.posZ - 0.2 + (world.rand.nextDouble() * 0.4));
}
// xp
@@ -4,7 +4,8 @@ package com.glodblock.github.inventory.item;
import static com.glodblock.github.inventory.item.WirelessMagnet.filterConfigKey;
import static com.glodblock.github.inventory.item.WirelessMagnet.filterKey;
import java.util.List;
import java.util.HashMap;
import java.util.function.Predicate;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
@@ -15,7 +16,6 @@ import net.minecraft.world.World;
import com.glodblock.github.inventory.ItemBiggerAppEngInventory;
import appeng.api.AEApi;
import appeng.api.config.Actionable;
import appeng.api.config.PowerMultiplier;
import appeng.api.networking.IGridNode;
@@ -23,24 +23,33 @@ import appeng.api.storage.IMEMonitor;
import appeng.api.storage.StorageChannel;
import appeng.api.storage.data.IAEFluidStack;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.api.util.IConfigManager;
import appeng.tile.inventory.AppEngInternalInventory;
import appeng.tile.inventory.InvOperation;
import appeng.util.Platform;
import appeng.util.item.AEItemStack;
import appeng.util.item.OreHelper;
import appeng.util.prioitylist.OreFilteredList;
public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory implements IWirelessMagnetFilter {
private boolean ignoreNbt;
private boolean ignoreMeta;
private boolean useOre;
private boolean useOreDict;
private String oreDictFilter;
protected Predicate<IAEItemStack> filterPredicate = null;
private WirelessMagnet.ListMode listMode = WirelessMagnet.ListMode.WhiteList;
protected AppEngInternalInventory filterList;
private final AppEngInternalInventory filterInventory;
private final NBTTagCompound settingCache;
private final NBTTagCompound filterCache;
@SuppressWarnings("unchecked")
public WirelessMagnetCardFilterInventory(ItemStack is, int slot, IGridNode gridNode, EntityPlayer player) {
super(is, slot, gridNode, player, StorageChannel.ITEMS);
this.filterList = new ItemBiggerAppEngInventory(is, filterKey, 27);
super(is, slot, gridNode, player, StorageChannel.ITEMS, true);
filterInventory = new ItemBiggerAppEngInventory(is, filterKey, 27);
settingCache = getSettingTag(is);
filterCache = getFilterTag(is);
readFromNBT();
}
@@ -50,7 +59,9 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
NBTTagCompound tag = (NBTTagCompound) data.getTag(filterConfigKey);
ignoreNbt = tag.getBoolean("nbt");
ignoreMeta = tag.getBoolean("meta");
useOreDict = tag.getBoolean("ore");
useOre = tag.getBoolean("ore");
useOreDict = tag.getBoolean("oreDict");
oreDictFilter = tag.getString("oreDictFilter");
this.listMode = WirelessMagnet.ListMode.values()[tag.getInteger("list")];
}
@@ -59,11 +70,21 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
NBTTagCompound tmp = new NBTTagCompound();
tmp.setBoolean("nbt", ignoreNbt);
tmp.setBoolean("meta", ignoreMeta);
tmp.setBoolean("ore", useOreDict);
tmp.setBoolean("ore", useOre);
tmp.setBoolean("oreDict", useOreDict);
tmp.setString("oreDictFilter", oreDictFilter);
tmp.setInteger("list", this.listMode.ordinal());
data.setTag(filterConfigKey, tmp);
}
private NBTTagCompound getSettingTag(ItemStack is) {
return (NBTTagCompound) is.getTagCompound().getCompoundTag(filterConfigKey).copy();
}
private NBTTagCompound getFilterTag(ItemStack is) {
return (NBTTagCompound) is.getTagCompound().getCompoundTag(filterKey).copy();
}
@Override
public WirelessMagnet.ListMode getListMode() {
return this.listMode;
@@ -81,9 +102,19 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
@Override
public boolean getOreMode() {
return useOre;
}
@Override
public boolean getOreDictMode() {
return useOreDict;
}
@Override
public String getOreDictFilter() {
return oreDictFilter;
}
@Override
public void setListMode(WirelessMagnet.ListMode mode) {
this.listMode = mode;
@@ -101,7 +132,18 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
@Override
public void setOreMode(boolean useOre) {
useOreDict = useOre;
this.useOre = useOre;
}
@Override
public void setOreDictMode(boolean useOreDict) {
this.useOreDict = useOreDict;
}
@Override
public void setOreDictFilter(String str) {
oreDictFilter = str;
filterPredicate = null;
}
@Override
@@ -129,7 +171,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
@Override
public IMEMonitor<IAEItemStack> getItemInventory() {
return this;
return null;
}
@Override
@@ -144,9 +186,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
@Override
public void onChangeInventory(IInventory inv, int slot, InvOperation mc, ItemStack removedStack,
ItemStack newStack) {
}
ItemStack newStack) {}
@Override
public void saveSettings() {
@@ -157,7 +197,7 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
@Override
public IInventory getInventoryByName(String name) {
if (name.equals("config")) {
return this.filterList;
return filterInventory;
}
return null;
}
@@ -177,39 +217,67 @@ public class WirelessMagnetCardFilterInventory extends BaseWirelessInventory imp
return true;
}
public List<ItemStack> getFilteredItems() {
return WirelessMagnet.getFilteredItems(this.target);
}
public IItemList<IAEItemStack> getAEFilteredItems() {
IItemList<IAEItemStack> list = AEApi.instance().storage().createItemList();
for (ItemStack is : this.getFilteredItems()) {
list.add(AEApi.instance().storage().createItemStack(is));
public boolean isItemFiltered(ItemStack inputItemStack) {
if (useOreDict && !oreDictFilter.isEmpty()) {
if (filterPredicate == null) filterPredicate = OreFilteredList.makeFilter(oreDictFilter);
if (filterPredicate.test(AEItemStack.create(inputItemStack))) return true;
}
return list;
}
public boolean isItemFiltered(ItemStack is, IItemList<IAEItemStack> list) {
if (is == null && list.isEmpty()) return false;
IAEItemStack ais = AEApi.instance().storage().createItemStack(is);
for (IAEItemStack i : list) {
if (useOreDict) {
// use oredict
return i.sameOre(ais);
} else if (ignoreMeta && ignoreNbt) {
// ignore meta & nbt
return ais.getItem() == i.getItem();
} else if (ignoreMeta) {
// ignore meta only
return ais.getItemStack().getTagCompound().equals(i.getItemStack().getTagCompound());
} else if (ignoreNbt) {
// ignore nbt only
return i.getItemDamage() == ais.getItemDamage();
} else {
// ignore nothing/don't use oredict--must be exact match
return ais.equals(i);
for (int i = 0; i < filterInventory.getSizeInventory(); i++) {
ItemStack is = filterInventory.getStackInSlot(i);
if (is != null) {
if (useOre) {
// use oredict
if (OreHelper.INSTANCE
.sameOre(OreHelper.INSTANCE.isOre(is), OreHelper.INSTANCE.isOre(inputItemStack)))
return true;
}
if (ignoreMeta && ignoreNbt) {
// ignore meta & nbt
return is.getItem().equals(inputItemStack.getItem());
} else if (ignoreMeta) {
// ignore meta only
return ItemStack.areItemStackTagsEqual(is, inputItemStack)
&& is.getItem() == inputItemStack.getItem();
} else if (ignoreNbt) {
// ignore nbt only
return is.getItem() == inputItemStack.getItem()
&& is.getItemDamage() == inputItemStack.getItemDamage();
} else {
// ignore nothing/don't use oredict--must be exact match
return is.isItemEqual(inputItemStack) && ItemStack.areItemStackTagsEqual(is, inputItemStack);
}
}
}
return false;
}
public boolean isPassFilter(ItemStack is) {
return is != null && (listMode == WirelessMagnet.ListMode.WhiteList) == isItemFiltered(is);
}
public boolean checkCache(ItemStack is) {
return settingCache.equals(getSettingTag(is)) && filterCache.equals(getFilterTag(is));
}
public static class FilterCache {
private static final HashMap<EntityPlayer, WirelessMagnetCardFilterInventory> cache = new HashMap<>();
public static WirelessMagnetCardFilterInventory getFilter(ItemStack is, int slot, IGridNode gridNode,
EntityPlayer player) {
WirelessMagnetCardFilterInventory cachedInv = cache.get(player);
if (cachedInv != null && cachedInv.checkCache(is)) {
return cachedInv;
} else {
WirelessMagnetCardFilterInventory newInv = new WirelessMagnetCardFilterInventory(
is,
slot,
gridNode,
player);
cache.put(player, newInv);
return newInv;
}
}
}
}
@@ -111,6 +111,12 @@ public class CPacketFluidPatternTermBtns implements IMessage {
case "WirelessTerminal.magnet.Ore":
((IWirelessMagnetFilter) itemTerminal).setOreMode(Value.equals("1"));
break;
case "WirelessTerminal.magnet.OreDictState":
((IWirelessMagnetFilter) itemTerminal).setOreDictMode(Value.equals("1"));
break;
case "WirelessTerminal.magnet.OreDictFilter":
((IWirelessMagnetFilter) itemTerminal).setOreDictFilter(Value);
break;
case "WirelessTerminal.magnet.FilterMode":
((IWirelessMagnetFilter) itemTerminal).setListMode(
Value.equals("1") ? WirelessMagnet.ListMode.WhiteList
@@ -21,6 +21,7 @@ import com.glodblock.github.crossmod.thaumcraft.ThaumicEnergisticsCrafting;
import com.glodblock.github.inventory.external.AEFluidInterfaceHandler;
import com.glodblock.github.inventory.item.WirelessMagnet;
import com.glodblock.github.inventory.item.WirelessMagnetCardFilterInventory;
import com.glodblock.github.inventory.item.WirelessMagnetCardFilterInventory.FilterCache;
import com.glodblock.github.loader.ItemAndBlockHolder;
import com.glodblock.github.network.SPacketMEUpdateBuffer;
import com.glodblock.github.network.wrapper.FCNetworkWrapper;
@@ -31,8 +32,6 @@ import appeng.api.AEApi;
import appeng.api.IAppEngApi;
import appeng.api.config.Upgrades;
import appeng.api.networking.IGridNode;
import appeng.api.storage.data.IAEItemStack;
import appeng.api.storage.data.IItemList;
import appeng.util.Platform;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.event.FMLInitializationEvent;
@@ -54,48 +53,38 @@ public class CommonProxy {
@SuppressWarnings("unchecked")
@SubscribeEvent
public void pickupEvent(EntityItemPickupEvent e) {
try {
if (Platform.isClient() || e.entityPlayer == null) return;
EntityPlayer player = e.entityPlayer;
EntityItem itemEntity = e.item;
ItemStack stack = itemEntity.getEntityItem();
World world = player.getEntityWorld();
if (Platform.isServer() && e.entityPlayer != null) {
try {
EntityPlayer player = e.entityPlayer;
EntityItem itemEntity = e.item;
ItemStack stack = itemEntity.getEntityItem();
World world = player.getEntityWorld();
ImmutablePair<Integer, ItemStack> result = Util.getUltraWirelessTerm(player);
if (result == null) return;
final ItemStack wirelessTerm = result.getRight();
WirelessMagnet.Mode mode = WirelessMagnet.getMode(wirelessTerm);
if (mode != WirelessMagnet.Mode.ME) return;
IGridNode gridNode = Util.getWirelessGrid(wirelessTerm);
if (gridNode == null || !Util.rangeCheck(wirelessTerm, player, gridNode)) return;
WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory(
wirelessTerm,
result.getLeft(),
gridNode,
player);
ImmutablePair<Integer, ItemStack> result = Util.getUltraWirelessTerm(player);
if (result != null) {
final ItemStack wirelessTerm = result.getRight();
WirelessMagnet.Mode mode = WirelessMagnet.getMode(wirelessTerm);
if (mode == WirelessMagnet.Mode.ME) {
IGridNode gridNode = Util.getWirelessGrid(wirelessTerm);
if (gridNode != null && Util.rangeCheck(wirelessTerm, player, gridNode)) {
WirelessMagnetCardFilterInventory inv = FilterCache
.getFilter(wirelessTerm, result.getLeft(), gridNode, player);
IItemList<IAEItemStack> filteredList = inv.getAEFilteredItems();
IAEItemStack ais = AEApi.instance().storage().createItemStack(stack);
if (inv.getListMode() == WirelessMagnet.ListMode.WhiteList) { // whitelisting
if (!filteredList.isEmpty() && inv.isItemFiltered(stack, filteredList)) {
if (inv.doInject(ais, itemEntity, world)) {
stack = null;
itemEntity.setDead();
e.setCanceled(true);
}
}
} else if (inv.getListMode() == WirelessMagnet.ListMode.BlackList) {
if (!inv.isItemFiltered(stack, filteredList)) {
if (inv.doInject(ais, itemEntity, world)) {
stack = null;
itemEntity.setDead();
e.setCanceled(true);
if (inv.isPassFilter(stack)) {
if (inv.doInject(
AEApi.instance().storage().createItemStack(stack),
itemEntity,
world)) {
itemEntity.setDead();
e.setCanceled(true);
}
}
}
}
}
} catch (NullPointerException ex) {
ex.printStackTrace();
}
} catch (NullPointerException ex) {
ex.printStackTrace();
}
}
@@ -103,18 +92,12 @@ public class CommonProxy {
public void tickEvent(TickEvent.PlayerTickEvent e) {
EntityPlayer player = e.player;
ImmutablePair<Integer, ItemStack> result = Util.getUltraWirelessTerm(player);
if (result == null) return;
final ItemStack wirelessTerm = result.getRight();
if (WirelessMagnet.getMode(wirelessTerm) == WirelessMagnet.Mode.Off) return;
IGridNode gridNode = Util.getWirelessGrid(wirelessTerm);
if (gridNode == null || !Util.rangeCheck(wirelessTerm, player, gridNode)) return;
WirelessMagnetCardFilterInventory inv = new WirelessMagnetCardFilterInventory(
wirelessTerm,
result.getLeft(),
gridNode,
player);
WirelessMagnet.doMagnet(wirelessTerm, e.player.worldObj, e.player, inv);
if (result != null) {
final ItemStack wirelessTerm = result.getRight();
if (WirelessMagnet.getMode(wirelessTerm) != WirelessMagnet.Mode.Off) {
WirelessMagnet.doMagnet(wirelessTerm, e.player.worldObj, e.player);
}
}
}
public void preInit(FMLPreInitializationEvent event) {
@@ -112,6 +112,8 @@ public class NameConst {
public static final String TT_ULTRA_TERMINAL_RESTOCK_ON = TT_ULTRA_TERMINAL_RESTOCK + ".on";
public static final String TT_ULTRA_TERMINAL_RESTOCK_OFF = TT_ULTRA_TERMINAL_RESTOCK + ".off";
public static final String TT_MAGNET_CARD_OREDICT = TT_KEY + "magnet_card.oreDictFilter";
public static final String WAILA_KEY = FluidCraft.MODID + ".waila.";
public static final String WAILA_ENABLE = WAILA_KEY + "enable";
public static final String WAILA_DISABLE = WAILA_KEY + "disable";
@@ -162,22 +162,26 @@ public final class Util {
}
public static IMEInventoryHandler<?> getWirelessInv(ItemStack is, EntityPlayer player, StorageChannel channel) {
if (Platform.isClient()) return new NullInventory<>();
IGridNode gridNode = getWirelessGrid(is);
if (gridNode == null) return null;
IGrid grid = gridNode.getGrid();
if (grid == null) return null;
if (rangeCheck(is, player, grid)) {
IStorageGrid gridCache = grid.getCache(IStorageGrid.class);
if (gridCache != null) {
if (channel == StorageChannel.FLUIDS) {
return gridCache.getFluidInventory();
} else {
return gridCache.getItemInventory();
if (Platform.isServer()) {
IGridNode gridNode = getWirelessGrid(is);
if (gridNode != null) {
IGrid grid = gridNode.getGrid();
if (grid != null) {
if (rangeCheck(is, player, grid)) {
IStorageGrid gridCache = grid.getCache(IStorageGrid.class);
if (gridCache != null) {
if (channel == StorageChannel.FLUIDS) {
return gridCache.getFluidInventory();
} else {
return gridCache.getItemInventory();
}
}
}
}
}
return null;
}
return null;
return new NullInventory<>();
}
public static ItemStack getWirelessTerminal(EntityPlayer player, int x) {
@@ -170,6 +170,7 @@ ae2fc.tooltip.magnet_card.inv.hint=Pickup to Inventory
ae2fc.tooltip.magnet_card.me=Magnet Card
ae2fc.tooltip.magnet_card.me.hint=Pickup to ME
ae2fc.tooltip.magnet_card.filter=Magnet Filter
ae2fc.tooltip.magnet_card.oreDictFilter=Oredictionary filter
ae2fc.tooltip.restock.on=Toggle Restock
ae2fc.tooltip.restock.on.hint=Enable
ae2fc.tooltip.restock.off=Toggle Restock
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB