package pneumaticCraft.common.inventory; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.world.ChunkPosition; import pneumaticCraft.common.item.Itemss; import pneumaticCraft.common.network.NetworkHandler; import pneumaticCraft.common.network.PacketSetGlobalVariable; import pneumaticCraft.common.remote.GlobalVariableManager; import pneumaticCraft.common.remote.TextVariableParser; public class ContainerRemote extends ContainerPneumaticBase{ private final List<String> syncedVars; private final ChunkPosition[] lastValues; public String[] variables = new String[0]; public ContainerRemote(ItemStack remote){ super(null); syncedVars = new ArrayList<String>(getRelevantVariableNames(remote)); lastValues = new ChunkPosition[syncedVars.size()]; } private static Set<String> getRelevantVariableNames(ItemStack remote){ Set<String> variables = new HashSet<String>(); NBTTagCompound tag = remote.getTagCompound(); if(tag != null) { NBTTagList tagList = tag.getTagList("actionWidgets", 10); for(int i = 0; i < tagList.tagCount(); i++) { NBTTagCompound widgetTag = tagList.getCompoundTagAt(i); variables.add(widgetTag.getString("variableName")); variables.add(widgetTag.getString("enableVariable")); TextVariableParser parser = new TextVariableParser(widgetTag.getString("text")); parser.parse(); variables.addAll(parser.getRelevantVariables()); } } return variables; } @Override public void detectAndSendChanges(){ super.detectAndSendChanges(); for(int i = 0; i < lastValues.length; i++) { ChunkPosition newValue = GlobalVariableManager.getInstance().getPos(syncedVars.get(i)); if(!newValue.equals(lastValues[i])) { lastValues[i] = newValue; for(Object o : crafters) { if(o instanceof EntityPlayerMP) NetworkHandler.sendTo(new PacketSetGlobalVariable(syncedVars.get(i), newValue), (EntityPlayerMP)o); } } } } @Override public boolean canInteractWith(EntityPlayer player){ return player.getCurrentEquippedItem() != null && player.getCurrentEquippedItem().getItem() == Itemss.remote; } }