    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    }