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