Package crazypants.enderio.conduit.item

Source Code of crazypants.enderio.conduit.item.FilterRegister

package crazypants.enderio.conduit.item;

import io.netty.buffer.ByteBuf;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import cpw.mods.fml.common.network.ByteBufUtils;
import crazypants.enderio.Log;
import crazypants.enderio.conduit.item.filter.IItemFilter;
import crazypants.enderio.conduit.item.filter.IItemFilterUpgrade;
import crazypants.enderio.conduit.item.filter.ItemFilter;
import crazypants.enderio.network.NetworkUtil;

public class FilterRegister {

  public static IItemFilter getFilterForUpgrade(ItemStack stack) {
    if(stack == null) {
      return null;
    }
    if(!(stack.getItem() instanceof IItemFilterUpgrade)) {
      return null;
    }
    IItemFilterUpgrade upgrade = (IItemFilterUpgrade)stack.getItem();
    IItemFilter res = upgrade.createFilterFromStack(stack);    
    return res;
  }

  public static boolean isFilterSet(ItemStack stack) {
    return stack != null && stack.stackTagCompound != null && stack.stackTagCompound.hasKey("filter");
  }

  public static void writeFilterToStack(IItemFilter filter, ItemStack stack) {
    if(stack == null || filter == null) {
      return;
    }
    NBTTagCompound filterRoot = new NBTTagCompound();
    writeFilterToNbt(filter, filterRoot);
    if(stack.stackTagCompound == null) {
      stack.stackTagCompound = new NBTTagCompound();
    }
    stack.stackTagCompound.setTag("filter", filterRoot);
  }
 
  public static void writeFilterToNbt(IItemFilter filter, NBTTagCompound filterTag) {
    filterTag.setString("filterClass", filter.getClass().getName());
    filter.writeToNBT(filterTag);
  }

  public static IItemFilter loadFilterFromNbt(NBTTagCompound filterTag) {
    if(filterTag == null) {
      return null;
    }
    IItemFilter filter;   
    //legacy support for release where class names where not stored
    if(!filterTag.hasKey("filterClass")) {
      filter = null;
      Log.warn("Could not load old version of item filter.");
    } else {
      String className = filterTag.getString("filterClass");
      filter = loadFilterFromNbt(className, filterTag);
    }
    return filter;
  }
   

  private static IItemFilter loadFilterFromNbt(String className, NBTTagCompound tag) {
    try {
      Class<?> clz = Class.forName(className);
      IItemFilter filter = (IItemFilter) clz.newInstance();
      filter.readFromNBT(tag);
      return filter;
    } catch (Exception e) {
      Log.error("Could not read item filter with class name: " + className + " from NBT: " + tag + " Error: " + e);
      return null;
    }
  }

  public static void updateLegacyFilterNbt(NBTTagCompound filterTag, int conduitMeta) {
    if(filterTag == null) {
      return;
    }
    if(!filterTag.hasKey("filterClass")) {
      filterTag.setString("filterClass", ItemFilter.class.getName());
    }
    if(!filterTag.hasKey("isAdvanced")) {
      filterTag.setBoolean("isAdvanced", conduitMeta == 1);
    }
  }
 
  public static void writeFilter(ByteBuf buf, IItemFilter filter) {
    if(filter == null) {
      ByteBufUtils.writeUTF8String(buf, "nullFilter");
      return;
    }
    String name = filter.getClass().getName();
    ByteBufUtils.writeUTF8String(buf, name);

    NBTTagCompound root = new NBTTagCompound();
    filter.writeToNBT(root);
    NetworkUtil.writeNBTTagCompound(root, buf);
  }

  public static IItemFilter readFilter(ByteBuf buf) {
    String className = ByteBufUtils.readUTF8String(buf);
    if(className.equals("nullFilter")) {
      return null;
    }
    NBTTagCompound tag = NetworkUtil.readNBTTagCompound(buf);
    return loadFilterFromNbt(className, tag);
  }
 
}
TOP

Related Classes of crazypants.enderio.conduit.item.FilterRegister

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.