/
com/planet_ink/coffee_mud/Abilities/Common/
com/planet_ink/coffee_mud/Abilities/Diseases/
com/planet_ink/coffee_mud/Abilities/Druid/
com/planet_ink/coffee_mud/Abilities/Fighter/
com/planet_ink/coffee_mud/Abilities/Languages/
com/planet_ink/coffee_mud/Abilities/Misc/
com/planet_ink/coffee_mud/Abilities/Prayers/
com/planet_ink/coffee_mud/Abilities/Properties/
com/planet_ink/coffee_mud/Abilities/Skills/
com/planet_ink/coffee_mud/Abilities/Songs/
com/planet_ink/coffee_mud/Abilities/Spells/
com/planet_ink/coffee_mud/Abilities/Thief/
com/planet_ink/coffee_mud/Abilities/Traps/
com/planet_ink/coffee_mud/Behaviors/
com/planet_ink/coffee_mud/CharClasses/interfaces/
com/planet_ink/coffee_mud/Commands/
com/planet_ink/coffee_mud/Commands/interfaces/
com/planet_ink/coffee_mud/Common/
com/planet_ink/coffee_mud/Common/interfaces/
com/planet_ink/coffee_mud/Exits/interfaces/
com/planet_ink/coffee_mud/Items/Armor/
com/planet_ink/coffee_mud/Items/Basic/
com/planet_ink/coffee_mud/Items/CompTech/
com/planet_ink/coffee_mud/Items/MiscMagic/
com/planet_ink/coffee_mud/Items/Weapons/
com/planet_ink/coffee_mud/Items/interfaces/
com/planet_ink/coffee_mud/Libraries/
com/planet_ink/coffee_mud/Libraries/interfaces/
com/planet_ink/coffee_mud/Locales/
com/planet_ink/coffee_mud/MOBS/
com/planet_ink/coffee_mud/Races/
com/planet_ink/coffee_mud/Races/interfaces/
com/planet_ink/coffee_mud/WebMacros/
com/planet_ink/coffee_mud/WebMacros/interfaces/
com/planet_ink/coffee_mud/core/
com/planet_ink/coffee_mud/core/collections/
com/planet_ink/coffee_mud/core/interfaces/
com/planet_ink/coffee_mud/core/intermud/
com/planet_ink/coffee_mud/core/intermud/i3/
com/planet_ink/coffee_web/server/
com/planet_ink/siplet/applet/
lib/
resources/factions/
resources/fakedb/
resources/progs/autoplayer/
resources/quests/holidays/
web/
web/admin.templates/
web/admin/grinder/
web/admin/images/
web/clan.templates/
web/pub.templates/
web/pub/images/mxp/
web/pub/sounds/
web/pub/textedit/
package com.planet_ink.coffee_mud.Items.Basic;

import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.core.collections.*;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Libraries.interfaces.XMLLibrary;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;

import java.util.*;

/*
 Copyright 2002-2016 Bo Zimmerman

 Licensed under the Apache License, Version 2.0 (the "License");
 you may not use this file except in compliance with the License.
 You may obtain a copy of the License at

 http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
 */
@SuppressWarnings("unchecked")
public class GenWallpaper implements Item
{
	@Override
	public String ID()
	{
		return "GenWallpaper";
	}

	protected String		name			= "some wallpaper";
	protected Object		description		= null;
	protected String		readableText	= "";
	protected PhyStats		phyStats		= (PhyStats) CMClass.getCommon("DefaultPhyStats");
	protected boolean		destroyed		= false;
	protected ItemPossessor	owner			= null;

	// protected String databaseID="";

	public GenWallpaper()
	{
		super();
		// CMClass.bumpCounter(this,CMClass.CMObjectType.ITEM);//removed for mem
		// & perf
	}

	@Override
	public String L(final String str, final String... xs)
	{
		return CMLib.lang().fullSessionTranslation(str, xs);
	}

	@Override
	public boolean isGeneric()
	{
		return true;
	}

	@Override
	public Rideable riding()
	{
		return null;
	}

	@Override
	public void setRiding(Rideable one)
	{
	}

	@Override
	public String image()
	{
		return "";
	}

	@Override
	public String rawImage()
	{
		return "";
	}

	@Override
	public void setImage(String newImage)
	{
	}

	@Override
	public void initializeClass()
	{
	}

	@Override
	public void setDatabaseID(String id)
	{
		// databaseID=id;
	}

	@Override
	public String databaseID()
	{
		return ""; // databaseID;
	}

	@Override
	public boolean canSaveDatabaseID()
	{
		return false;
	}

	@Override
	public String Name()
	{
		return name;
	}

	@Override
	public String name()
	{
		if (phyStats().newName() != null)
			return phyStats().newName();
		return Name();
	}

	@Override
	public void setName(String newName)
	{
		name = newName;
	}

	@Override
	public PhyStats phyStats()
	{
		return phyStats;
	}

	@Override
	public PhyStats basePhyStats()
	{
		return phyStats;
	}

	@Override
	public void recoverPhyStats()
	{
		phyStats().setSensesMask(phyStats().sensesMask() | PhyStats.SENSE_ITEMNOTGET);
	}

	@Override
	public void setBasePhyStats(PhyStats newStats)
	{
	}

	public boolean isAContainer()
	{
		return false;
	}

	@Override
	public int numberOfItems()
	{
		return 1;
	}

	// protected void
	// finalize(){CMClass.unbumpCounter(this,CMClass.CMObjectType.ITEM);}//removed
	// for mem & perf
	@Override
	public CMObject newInstance()
	{
		try
		{
			return this.getClass().newInstance();
		}
		catch (final Exception e)
		{
			Log.errOut(ID(), e);
		}
		return new GenWallpaper();
	}

	@Override
	public boolean subjectToWearAndTear()
	{
		return false;
	}

	@Override
	public CMObject copyOf()
	{
		try
		{
			final GenWallpaper E = (GenWallpaper) this.clone();
			// CMClass.bumpCounter(E,CMClass.CMObjectType.ITEM);//removed for
			// mem & perf
			E.destroyed = false;
			return E;
		}
		catch (final CloneNotSupportedException e)
		{
			return this.newInstance();
		}
	}

	@Override
	public int recursiveWeight()
	{
		return phyStats().weight();
	}

	@Override
	public ItemPossessor owner()
	{
		return owner;
	}

	@Override
	public void setOwner(ItemPossessor E)
	{
		owner = E;
	}

	@Override
	public long expirationDate()
	{
		return 0;
	}

	@Override
	public void setExpirationDate(long time)
	{
	}

	@Override
	public boolean amDestroyed()
	{
		return destroyed;
	}

	@Override
	public boolean amWearingAt(long wornCode)
	{
		if (wornCode == Wearable.IN_INVENTORY)
			return true;
		return false;
	}

	@Override
	public boolean fitsOn(long wornCode)
	{
		return false;
	}

	@Override
	public boolean wearIfPossible(MOB mob)
	{
		return false;
	}

	@Override
	public boolean wearIfPossible(MOB mob, long wearCode)
	{
		return false;
	}

	@Override
	public void wearAt(long wornCode)
	{
	}

	@Override
	public long rawProperLocationBitmap()
	{
		return 0;
	}

	@Override
	public boolean rawLogicalAnd()
	{
		return false;
	}

	@Override
	public void setRawProperLocationBitmap(long newValue)
	{
	}

	@Override
	public void setRawLogicalAnd(boolean newAnd)
	{
	}

	@Override
	public boolean compareProperLocations(Item toThis)
	{
		return true;
	}

	@Override
	public long whereCantWear(MOB mob)
	{
		return 0;
	}

	@Override
	public boolean canWear(MOB mob, long wornCode)
	{
		return false;
	}

	@Override
	public long rawWornCode()
	{
		return 0;
	}

	@Override
	public void setRawWornCode(long newValue)
	{
	}

	@Override
	public void unWear()
	{
	}

	public int capacity()
	{
		return 0;
	}

	public void setCapacity(int newValue)
	{
	}

	@Override
	public int material()
	{
		return RawMaterial.RESOURCE_PAPER;
	}

	@Override
	public void setMaterial(int newValue)
	{
	}

	@Override
	public int baseGoldValue()
	{
		return 0;
	}

	@Override
	public int value()
	{
		return 0;
	}

	@Override
	public void setBaseValue(int newValue)
	{
	}

	@Override
	public String readableText()
	{
		return readableText;
	}

	@Override
	public void setReadableText(String text)
	{
		readableText = text;
	}

	@Override
	public boolean isReadable()
	{
		return CMLib.flags().isReadable(this);
	}

	@Override
	public void setReadable(boolean truefalse)
	{
		CMLib.flags().setReadable(this, truefalse);
	}

	@Override
	public void affectPhyStats(Physical affected, PhyStats affectableStats)
	{
	}

	@Override
	public void affectCharStats(MOB affectedMob, CharStats affectableStats)
	{
	}

	@Override
	public void affectCharState(MOB affectedMob, CharState affectableMaxState)
	{
	}

	@Override
	public int compareTo(CMObject o)
	{
		return CMClass.classID(this).compareToIgnoreCase(CMClass.classID(o));
	}

	@Override
	public void setMiscText(String newText)
	{
		final List<XMLLibrary.XMLTag> V = CMLib.xml().parseAllXML(newText);
		if (V != null)
		{
			setName(CMLib.xml().getValFromPieces(V, "NAME"));
			setDescription(CMLib.xml().getValFromPieces(V, "DESC"));
			CMLib.coffeeMaker().setEnvFlags(this, CMath.s_int(CMLib.xml().getValFromPieces(V, "FLAG")));
			setReadableText(CMLib.xml().getValFromPieces(V, "READ"));
		}
	}

	@Override
	public String text()
	{
		final StringBuffer text = new StringBuffer("");
		text.append(CMLib.xml().convertXMLtoTag("NAME", Name()));
		text.append(CMLib.xml().convertXMLtoTag("DESC", description()));
		text.append(CMLib.xml().convertXMLtoTag("FLAG", CMLib.coffeeMaker().envFlags(this)));
		text.append(CMLib.xml().convertXMLtoTag("READ", readableText()));
		return text.toString();
	}

	@Override
	public String miscTextFormat()
	{
		return CMParms.FORMAT_UNDEFINED;
	}

	@Override
	public int getTickStatus()
	{
		return Tickable.STATUS_NOT;
	}

	@Override
	public boolean tick(Tickable ticking, int tickID)
	{
		if (destroyed)
			return false;
		return true;
	}

	@Override
	public Container container()
	{
		return null;
	}

	@Override
	public Item ultimateContainer(Physical stopAtC)
	{
		return this;
	}

	@Override
	public void wearEvenIfImpossible(MOB mob)
	{
	}

	@Override
	public String rawSecretIdentity()
	{
		return "";
	}

	@Override
	public String secretIdentity()
	{
		return "";
	}

	@Override
	public void setSecretIdentity(String newIdentity)
	{
	}

	@Override
	public String displayText()
	{
		return "";
	}

	@Override
	public String displayText(MOB viewerMob)
	{
		return displayText();
	}

	@Override
	public String name(MOB viewerMob)
	{
		return name();
	}

	@Override
	public void setDisplayText(String newDisplayText)
	{
	}

	@Override
	public String description(MOB viewerMob)
	{
		return description();
	}

	@Override
	public String description()
	{
		if (description == null)
			return "You see nothing special about " + name() + ".";
		else 
		if (description instanceof byte[])
		{
			final byte[] descriptionBytes = (byte[]) description;
			if (descriptionBytes.length == 0)
				return "You see nothing special about " + name() + ".";
			if (CMProps.getBoolVar(CMProps.Bool.ITEMDCOMPRESS))
				return CMLib.encoder().decompressString(descriptionBytes);
			else
				return CMStrings.bytesToStr(descriptionBytes);
		}
		else
			return (String) description;
	}

	@Override
	public void setDescription(String newDescription)
	{
		if (newDescription.length() == 0)
			description = null;
		else 
		if (CMProps.getBoolVar(CMProps.Bool.ITEMDCOMPRESS))
			description = CMLib.encoder().compressString(newDescription);
		else
			description = newDescription;
	}

	@Override
	public void setContainer(Container newContainer)
	{
	}

	@Override
	public int usesRemaining()
	{
		return Integer.MAX_VALUE;
	}

	@Override
	public void setUsesRemaining(int newUses)
	{
	}

	@Override
	public boolean isSavable()
	{
		return CMLib.flags().isSavable(this);
	}

	@Override
	public void setSavable(boolean truefalse)
	{
		CMLib.flags().setSavable(this, truefalse);
	}

	@Override
	public boolean okMessage(final Environmental myHost, final CMMsg msg)
	{
		final MOB mob = msg.source();
		if (!msg.amITarget(this))
			return true;
		else 
		if (msg.targetMinor() == CMMsg.NO_EFFECT)
			return true;
		else 
		if (CMath.bset(msg.targetMajor(), CMMsg.MASK_MAGIC))
		{
			mob.tell(L("Please don't do that."));
			return false;
		}
		else
		{
			switch (msg.targetMinor())
			{
			case CMMsg.TYP_LOOK:
			case CMMsg.TYP_EXAMINE:
			case CMMsg.TYP_READ:
			case CMMsg.TYP_SPEAK:
			case CMMsg.TYP_OK_ACTION:
			case CMMsg.TYP_OK_VISUAL:
			case CMMsg.TYP_NOISE:
				return true;
			case CMMsg.TYP_GET:
				if ((msg.tool() == null) || (msg.tool() instanceof MOB))
				{
					mob.tell(L("You can't get @x1.", name()));
					return false;
				}
				break;
			case CMMsg.TYP_DROP:
				return true;
			default:
				break;
			}
		}
		mob.tell(mob, this, null, L("You can't do that to <T-NAMESELF>."));
		return false;
	}

	@Override
	public void executeMsg(final Environmental myHost, final CMMsg msg)
	{
		if (msg.amITarget(this))
		{
			switch (msg.targetMinor())
			{
			case CMMsg.TYP_LOOK:
			case CMMsg.TYP_EXAMINE:
				CMLib.commands().handleBeingLookedAt(msg);
				break;
			case CMMsg.TYP_READ:
				CMLib.commands().handleBeingRead(msg);
				break;
			default:
				break;
			}
		}
	}

	@Override
	public void stopTicking()
	{
		destroyed = true; // WHY?!?!?
		CMLib.threads().deleteTick(this, -1);
	}

	@Override
	public void destroy()
	{
		if (owner == null)
			return;
		CMLib.map().registerWorldObjectDestroyed(null, null, this);
		destroyed = true;
		removeFromOwnerContainer();
		owner = null;
	}

	@Override
	public void removeFromOwnerContainer()
	{
		if (owner == null)
			return;
		if (owner instanceof Room)
		{
			final Room thisRoom = (Room) owner;
			thisRoom.delItem(this);
		}
		else 
		if (owner instanceof MOB)
		{
			final MOB mob = (MOB) owner;
			mob.delItem(this);
		}
	}

	@Override
	public void addNonUninvokableEffect(Ability to)
	{
	}

	@Override
	public void addEffect(Ability to)
	{
	}

	@Override
	public void delEffect(Ability to)
	{
	}

	@Override
	public void delAllEffects(boolean unInvoke)
	{
	}

	@Override
	public int numEffects()
	{
		return 0;
	}

	@Override
	public void eachEffect(final EachApplicable<Ability> applier)
	{
	}

	@Override
	public Enumeration<Ability> effects()
	{
		return EmptyEnumeration.INSTANCE;
	}

	@Override
	public Ability fetchEffect(int index)
	{
		return null;
	}

	@Override
	public Ability fetchEffect(String ID)
	{
		return null;
	}

	@Override
	public int maxRange()
	{
		return 0;
	}

	@Override
	public int minRange()
	{
		return 0;
	}

	@Override
	public void addBehavior(Behavior to)
	{
	}

	@Override
	public void delBehavior(Behavior to)
	{
	}

	@Override
	public void delAllBehaviors()
	{
	}

	@Override
	public int numBehaviors()
	{
		return 0;
	}

	@Override
	public Enumeration<Behavior> behaviors()
	{
		return EmptyEnumeration.INSTANCE;
	}

	@Override
	public Behavior fetchBehavior(int index)
	{
		return null;
	}

	@Override
	public Behavior fetchBehavior(String ID)
	{
		return null;
	}

	@Override
	public void eachBehavior(final EachApplicable<Behavior> applier)
	{
	}

	@Override
	public void addScript(ScriptingEngine S)
	{
	}

	@Override
	public void delScript(ScriptingEngine S)
	{
	}

	@Override
	public void delAllScripts()
	{
	}

	@Override
	public int numScripts()
	{
		return 0;
	}

	@Override
	public Enumeration<ScriptingEngine> scripts()
	{
		return EmptyEnumeration.INSTANCE;
	}

	@Override
	public ScriptingEngine fetchScript(int x)
	{
		return null;
	}

	@Override
	public void eachScript(final EachApplicable<ScriptingEngine> applier)
	{
	}

	@Override
	public int getSaveStatIndex()
	{
		return getStatCodes().length;
	}

	private static final String[]	CODES	= { "CLASS", "NAME", "DESCRIPTION", "ISREADABLE", "READABLETEXT" };

	@Override
	public String[] getStatCodes()
	{
		return CODES;
	}

	@Override
	public boolean isStat(String code)
	{
		return CMParms.indexOf(getStatCodes(), code.toUpperCase().trim()) >= 0;
	}

	protected int getCodeNum(String code)
	{
		for (int i = 0; i < CODES.length; i++)
		{
			if (code.equalsIgnoreCase(CODES[i]))
				return i;
		}
		return -1;
	}

	@Override
	public String getStat(String code)
	{
		switch (getCodeNum(code))
		{
		case 0:
			return ID();
		case 1:
			return name();
		case 2:
			return description();
		case 3:
			return "" + isReadable();
		case 4:
			return readableText();
		}
		return "";
	}

	@Override
	public void setStat(String code, String val)
	{
		switch (getCodeNum(code))
		{
		case 0:
			return;
		case 1:
			setName(val);
			break;
		case 2:
			setDescription(val);
			break;
		case 3:
			CMLib.flags().setReadable(this, CMath.s_bool(val));
			break;
		case 4:
			setReadableText(val);
			break;
		}
	}

	@Override
	public boolean sameAs(Environmental E)
	{
		if (!(E instanceof GenWallpaper))
			return false;
		for (int i = 0; i < CODES.length; i++)
		{
			if (!E.getStat(CODES[i]).equals(getStat(CODES[i])))
				return false;
		}
		return true;
	}
}