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 }