001    package net.minecraft.src;
002    
003    import java.util.Collection;
004    import java.util.Iterator;
005    import java.util.TreeMap;
006    
007    public class GameRules
008    {
009        private TreeMap theGameRules = new TreeMap();
010    
011        public GameRules()
012        {
013            this.addGameRule("doFireTick", "true");
014            this.addGameRule("mobGriefing", "true");
015            this.addGameRule("keepInventory", "false");
016            this.addGameRule("doMobSpawning", "true");
017            this.addGameRule("doMobLoot", "true");
018            this.addGameRule("doTileDrops", "true");
019            this.addGameRule("commandBlockOutput", "true");
020        }
021    
022        /**
023         * Define a game rule and its default value.
024         */
025        public void addGameRule(String par1Str, String par2Str)
026        {
027            this.theGameRules.put(par1Str, new GameRuleValue(par2Str));
028        }
029    
030        public void func_82764_b(String par1Str, String par2Str)
031        {
032            GameRuleValue var3 = (GameRuleValue)this.theGameRules.get(par1Str);
033    
034            if (var3 != null)
035            {
036                var3.setValue(par2Str);
037            }
038            else
039            {
040                this.addGameRule(par1Str, par2Str);
041            }
042        }
043    
044        /**
045         * Gets the string Game Rule value.
046         */
047        public String getGameRuleStringValue(String par1Str)
048        {
049            GameRuleValue var2 = (GameRuleValue)this.theGameRules.get(par1Str);
050            return var2 != null ? var2.getGameRuleStringValue() : "";
051        }
052    
053        /**
054         * Gets the boolean Game Rule value.
055         */
056        public boolean getGameRuleBooleanValue(String par1Str)
057        {
058            GameRuleValue var2 = (GameRuleValue)this.theGameRules.get(par1Str);
059            return var2 != null ? var2.getGameRuleBooleanValue() : false;
060        }
061    
062        /**
063         * Return the defined game rules as NBT.
064         */
065        public NBTTagCompound writeGameRulesToNBT()
066        {
067            NBTTagCompound var1 = new NBTTagCompound("GameRules");
068            Iterator var2 = this.theGameRules.keySet().iterator();
069    
070            while (var2.hasNext())
071            {
072                String var3 = (String)var2.next();
073                GameRuleValue var4 = (GameRuleValue)this.theGameRules.get(var3);
074                var1.setString(var3, var4.getGameRuleStringValue());
075            }
076    
077            return var1;
078        }
079    
080        /**
081         * Set defined game rules from NBT.
082         */
083        public void readGameRulesFromNBT(NBTTagCompound par1NBTTagCompound)
084        {
085            Collection var2 = par1NBTTagCompound.getTags();
086            Iterator var3 = var2.iterator();
087    
088            while (var3.hasNext())
089            {
090                NBTBase var4 = (NBTBase)var3.next();
091                String var5 = var4.getName();
092                String var6 = par1NBTTagCompound.getString(var4.getName());
093                this.func_82764_b(var5, var6);
094            }
095        }
096    
097        /**
098         * Return the defined game rules.
099         */
100        public String[] getRules()
101        {
102            return (String[])this.theGameRules.keySet().toArray(new String[0]);
103        }
104    
105        /**
106         * Return whether the specified game rule is defined.
107         */
108        public boolean hasRule(String par1Str)
109        {
110            return this.theGameRules.containsKey(par1Str);
111        }
112    }