mirror of
https://github.com/GTNewHorizons/AE2FluidCraft-Rework.git
synced 2026-11-15 17:44:46 +00:00
Fix filters
Add oredictionary filter Fix inconsistent with WCT Gui improvements Filter caching GuiFCImgButton 3/4 size support
This commit is contained in:
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
|
||||
|
||||
+111
-43
@@ -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) {
|
||||
|
||||
Reference in new issue
Block a user