package net.minecraft.world;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import net.minecraft.nbt.NBTTagCompound;
public class GameRules
{
private TreeMap theGameRules = new TreeMap();
private static final String __OBFID = "CL_00000136";
public GameRules()
{
this.addGameRule("doFireTick", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("mobGriefing", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("keepInventory", "false", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("doMobSpawning", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("doMobLoot", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("doTileDrops", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("commandBlockOutput", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("naturalRegeneration", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("doDaylightCycle", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("logAdminCommands", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("showDeathMessages", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("randomTickSpeed", "3", GameRules.ValueType.NUMERICAL_VALUE);
this.addGameRule("sendCommandFeedback", "true", GameRules.ValueType.BOOLEAN_VALUE);
this.addGameRule("reducedDebugInfo", "false", GameRules.ValueType.BOOLEAN_VALUE);
}
public void addGameRule(String key, String value, GameRules.ValueType type)
{
this.theGameRules.put(key, new GameRules.Value(value, type));
}
public void setOrCreateGameRule(String key, String ruleValue)
{
GameRules.Value var3 = (GameRules.Value)this.theGameRules.get(key);
if (var3 != null)
{
var3.setValue(ruleValue);
}
else
{
this.addGameRule(key, ruleValue, GameRules.ValueType.ANY_VALUE);
}
}
/**
* Gets the string Game Rule value.
*/
public String getGameRuleStringValue(String name)
{
GameRules.Value var2 = (GameRules.Value)this.theGameRules.get(name);
return var2 != null ? var2.getGameRuleStringValue() : "";
}
/**
* Gets the boolean Game Rule value.
*/
public boolean getGameRuleBooleanValue(String name)
{
GameRules.Value var2 = (GameRules.Value)this.theGameRules.get(name);
return var2 != null ? var2.getGameRuleBooleanValue() : false;
}
public int getInt(String name)
{
GameRules.Value var2 = (GameRules.Value)this.theGameRules.get(name);
return var2 != null ? var2.getInt() : 0;
}
/**
* Return the defined game rules as NBT.
*/
public NBTTagCompound writeGameRulesToNBT()
{
NBTTagCompound var1 = new NBTTagCompound();
Iterator var2 = this.theGameRules.keySet().iterator();
while (var2.hasNext())
{
String var3 = (String)var2.next();
GameRules.Value var4 = (GameRules.Value)this.theGameRules.get(var3);
var1.setString(var3, var4.getGameRuleStringValue());
}
return var1;
}
/**
* Set defined game rules from NBT.
*/
public void readGameRulesFromNBT(NBTTagCompound nbt)
{
Set var2 = nbt.getKeySet();
Iterator var3 = var2.iterator();
while (var3.hasNext())
{
String var4 = (String)var3.next();
String var6 = nbt.getString(var4);
this.setOrCreateGameRule(var4, var6);
}
}
/**
* Return the defined game rules.
*/
public String[] getRules()
{
return (String[])this.theGameRules.keySet().toArray(new String[0]);
}
/**
* Return whether the specified game rule is defined.
*/
public boolean hasRule(String name)
{
return this.theGameRules.containsKey(name);
}
public boolean areSameType(String key, GameRules.ValueType otherValue)
{
GameRules.Value var3 = (GameRules.Value)this.theGameRules.get(key);
return var3 != null && (var3.getType() == otherValue || otherValue == GameRules.ValueType.ANY_VALUE);
}
static class Value
{
private String valueString;
private boolean valueBoolean;
private int valueInteger;
private double valueDouble;
private final GameRules.ValueType type;
private static final String __OBFID = "CL_00000137";
public Value(String value, GameRules.ValueType type)
{
this.type = type;
this.setValue(value);
}
public void setValue(String value)
{
this.valueString = value;
this.valueBoolean = Boolean.parseBoolean(value);
this.valueInteger = this.valueBoolean ? 1 : 0;
try
{
this.valueInteger = Integer.parseInt(value);
}
catch (NumberFormatException var4)
{
;
}
try
{
this.valueDouble = Double.parseDouble(value);
}
catch (NumberFormatException var3)
{
;
}
}
public String getGameRuleStringValue()
{
return this.valueString;
}
public boolean getGameRuleBooleanValue()
{
return this.valueBoolean;
}
public int getInt()
{
return this.valueInteger;
}
public GameRules.ValueType getType()
{
return this.type;
}
}
public static enum ValueType
{
ANY_VALUE("ANY_VALUE", 0),
BOOLEAN_VALUE("BOOLEAN_VALUE", 1),
NUMERICAL_VALUE("NUMERICAL_VALUE", 2);
private static final GameRules.ValueType[] $VALUES = new GameRules.ValueType[]{ANY_VALUE, BOOLEAN_VALUE, NUMERICAL_VALUE};
private static final String __OBFID = "CL_00002151";
private ValueType(String p_i45750_1_, int p_i45750_2_) {}
}
}