Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions src/main/java/teamroots/embers/api/item/IFilterItem.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,14 @@
package teamroots.embers.api.item;

import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import teamroots.embers.api.filter.IFilter;

public interface IFilterItem {
IFilter getFilter(ItemStack stack);

default void setFilter(ItemStack stack, IFilter filter) {
NBTTagCompound compound = stack.getOrCreateSubCompound("filter");
filter.writeToNBT(compound);
}
}
34 changes: 21 additions & 13 deletions src/main/java/teamroots/embers/gui/ContainerEye.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,11 @@
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import teamroots.embers.api.filter.EnumFilterSetting;
import teamroots.embers.api.filter.FilterSieve;
import teamroots.embers.api.filter.IFilter;
import teamroots.embers.util.FilterUtil;
import teamroots.embers.api.filter.IFilterComparator;
import teamroots.embers.api.item.IFilterItem;
import teamroots.embers.util.Vec2i;

import java.util.List;
Expand Down Expand Up @@ -48,11 +51,14 @@ public enum EnumButton {
public ContainerEye(EntityPlayer player) {
stack = player.getHeldItemMainhand();
hand = EnumHand.MAIN_HAND;
if (stack.isEmpty())
if (stack.isEmpty() || !(stack.getItem() instanceof IFilterItem))
{
stack = player.getHeldItemOffhand();
hand = EnumHand.OFF_HAND;
}
if(!(stack.getItem() instanceof IFilterItem)) {
throw new IllegalStateException();
}

readFromStack(stack);

Expand Down Expand Up @@ -80,8 +86,14 @@ public void onSlotChanged() {

private void readFromStack(ItemStack stack)
{
NBTTagCompound compound = stack.getTagCompound();
if(compound != null) {
if(!(stack.getItem() instanceof IFilterItem))
return;
IFilter filter = ((IFilterItem)stack.getItem()).getFilter(stack);
if(filter != null && filter.getType().equals(FilterSieve.RESOURCE_LOCATION)) {
FilterSieve sieve = (FilterSieve)filter;
//just how it's set up, don't want to invalidate any addons or modify the filter instance or anything
NBTTagCompound compound = sieve.writeToNBT(new NBTTagCompound());

String comparatorName = compound.getString("comparator");
stack1 = new ItemStack(compound.getCompoundTag("stack1"));
stack2 = new ItemStack(compound.getCompoundTag("stack2"));
Expand Down Expand Up @@ -114,16 +126,12 @@ public void triggerButton(EnumButton button) {
}

public void writeToStack() {
NBTTagCompound compound = stack.getTagCompound();
if(compound == null)
compound = new NBTTagCompound();
compound.setString("comparator", comparator.getName());
compound.setInteger("offset", filterOffset);
compound.setBoolean("inverted", inverted);
compound.setInteger("setting", flag.ordinal());
compound.setTag("stack1", stack1.serializeNBT());
compound.setTag("stack2", stack2.serializeNBT());
stack.setTagCompound(compound);
if(!(stack.getItem() instanceof IFilterItem))
return;

FilterSieve filter = new FilterSieve(stack1, stack2, filterOffset, flag, inverted);

((IFilterItem)stack.getItem()).setFilter(stack, filter);
}

public void toggleInvert() {
Expand Down