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 }