package crazypants.enderio.conduit.item.filter; import crazypants.enderio.conduit.gui.GuiExternalConnection; import crazypants.enderio.conduit.gui.item.IItemFilterGui; import crazypants.enderio.conduit.gui.item.ModItemFilterGui; import crazypants.enderio.conduit.item.IItemConduit; import io.netty.buffer.ByteBuf; import java.util.List; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import com.enderio.core.client.gui.widget.GhostSlot; import com.enderio.core.common.network.NetworkUtil; import cpw.mods.fml.common.registry.GameRegistry; import cpw.mods.fml.common.registry.GameRegistry.UniqueIdentifier; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import crazypants.enderio.conduit.item.NetworkedInventory; public class ModItemFilter implements IItemFilter { private final String[] mods = new String[3]; private boolean blacklist = false; public String setMod(int index, ItemStack itemStack) { if(index < 0 || index >= mods.length) { return null; } if(itemStack == null || itemStack.getItem() == null) { setMod(index, (String) null); return null; } UniqueIdentifier ui = GameRegistry.findUniqueIdentifierFor(itemStack.getItem()); if(ui == null) { setMod(index, (String) null); return null; } String targetMod = ui.modId; if(targetMod == null) { setMod(index, (String) null); return null; } setMod(index, targetMod); return targetMod; } public void setMod(int index, String mod) { if(index < 0 || index >= mods.length) { return; } mods[index] = mod; } public String getModAt(int index) { if(index < 0 || index >= mods.length) { return null; } return mods[index]; } public void setBlacklist(boolean value) { blacklist = value; } public boolean isBlacklist() { return blacklist; } @Override public boolean doesItemPassFilter(NetworkedInventory inv, ItemStack item) { if(item == null || item.getItem() == null) { return false; } UniqueIdentifier ui = GameRegistry.findUniqueIdentifierFor(item.getItem()); if(ui == null) { return false; } String targetMod = ui.modId; if (targetMod != null) { for (String mod : mods) { if (targetMod.equals(mod)) { return !blacklist; } } } return blacklist; } @Override public boolean doesFilterCaptureStack(NetworkedInventory inv, ItemStack item) { return false; } @Override public boolean isSticky() { return false; } @Override public boolean isValid() { return true; } @Override public void createGhostSlots(List<GhostSlot> slots, int xOffset, int yOffset, Runnable cb) { } @Override public int getSlotCount() { return 0; } @Override @SideOnly(Side.CLIENT) public IItemFilterGui getGui(GuiExternalConnection gui, IItemConduit itemConduit, boolean isInput) { return new ModItemFilterGui(gui, itemConduit, isInput); } @Override public void readFromNBT(NBTTagCompound nbtRoot) { for (int i = 0; i < mods.length; i++) { String mod = nbtRoot.getString("mod" + i); if(mod == null || mod.isEmpty() || "-".equals(mod)) { mods[i] = null; } else { mods[i] = mod; } if (nbtRoot.hasKey("blacklist")) { blacklist = nbtRoot.getBoolean("blacklist"); } else { blacklist = false; } } } @Override public void writeToNBT(NBTTagCompound nbtRoot) { for (int i = 0; i < mods.length; i++) { String mod = mods[i]; if(mod == null || mod.trim().isEmpty()) { nbtRoot.setString("mod" + i, "-"); } else { nbtRoot.setString("mod" + i, mod); } } nbtRoot.setBoolean("blacklist", blacklist); } @Override public void writeToByteBuf(ByteBuf buf) { NBTTagCompound root = new NBTTagCompound(); writeToNBT(root); NetworkUtil.writeNBTTagCompound(root, buf); } @Override public void readFromByteBuf(ByteBuf buf) { NBTTagCompound tag = NetworkUtil.readNBTTagCompound(buf); readFromNBT(tag); } }