// Path: src/main/java/com/techjar/vivecraftforge/util/BlockListMode.java
// public enum BlockListMode {
// 	DISABLED,
// 	WHITELIST,
// 	BLACKLIST;
// }
// 
// Path: src/main/java/com/techjar/vivecraftforge/util/VivecraftForgeLog.java
// public class VivecraftForgeLog {
// 	public static void info(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.INFO, message, data);
// 	}
// 
// 	public static void warning(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.WARN, message, data);
// 	}
// 
// 	public static void severe(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.ERROR, message, data);
// 	}
// 
// 	public static void debug(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.DEBUG, message, data);
// 	}
// }


import com.google.common.collect.Lists;
import com.google.common.primitives.Ints;
import com.techjar.vivecraftforge.util.BlockListMode;
import com.techjar.vivecraftforge.util.VivecraftForgeLog;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
		// VR Changes
		creeperSwellDistance = config.get("vrchanges", "creeperswelldistance", 1.75, "Distance at which creepers swell and explode for VR players. Default: 1.75, Vanilla: 3").getDouble();
		movedTooQuicklyThreshold = (float)config.get("vrchanges", "movedtooquicklythreshold", 64.0, "Increase this if you experience rubber banding when teleporting.").getDouble();
		movedWronglyThreshold = config.get("vrchanges", "movedwronglythreshold", 15.0, "Increase this if you experience rubber banding when teleporting.").getDouble();
		// PvP
		vrVsVR = config.get("pvp", "vrvsvr", true, "Allows standing VR players to attack standing VR players.").getBoolean();
		vrVsSeatedVR = config.get("pvp", "vrvsseatedvr", true, "Allows standing VR players to attack seated VR players.").getBoolean();
		vrVsNonVR = config.get("pvp", "vrvsnonvr", true, "Allows standing VR players to attack non-VR players.").getBoolean();
		seatedVrVsSeatedVR = config.get("pvp", "seatedvrvsseatedvr", true, "Allows seated VR players to attack seated VR players.").getBoolean();
		seatedVrVsNonVR = config.get("pvp", "seatedvrvsnonvr", true, "Allows seated VR players to attack non-VR players.").getBoolean();
		// Bow
		bowStandingMul = (float)config.get("bow", "standingmultiplier", 2.0, "Archery damage multiplier for standing VR players. Default: 2.0").getDouble();
		bowSeatedMul = (float)config.get("bow", "seatedmultiplier", 1.0, "Archery damage multiplier for seated VR players. Default: 1.0").getDouble();
		bowStandingHeadshotMul = (float)config.get("bow", "standingheadshotmultiplier", 3.0, "Archery headshot damage multiplier for standing VR players. Default: 3.0").getDouble();
		bowSeatedHeadshotMul = (float)config.get("bow", "seatedheadshotmultiplier", 2.0, "Archery headshot damage multiplier for seated VR players. Default: 2.0").getDouble();
		// Climbey
		climbeyEnabled = config.get("climbey", "enabled", true, "Whether or not climbey is allowed on this server.").getBoolean();
		{
			Property prop = config.get("climbey", "blocklist", new String[]{"minecraft:wool:0", "minecraft:dirt", "grass"}, "List of blocks to whitelist or blacklist, in format blockname, blockname:meta, blockid or blockid:meta.");
			blockList = Lists.newArrayList(prop.getStringList());
			boolean changed = false;
			for (Iterator<String> it = blockList.iterator(); it.hasNext();) {
				String str = it.next();
				String fullStr = str;
				int colon = str.lastIndexOf(':');
				if (colon != -1) {
					String meta = str.substring(colon + 1);
					str = str.substring(0, colon);
					if (Ints.tryParse(meta) == null) {
						if (str.indexOf(':') != -1) { // Extra colons, must be meta
// Path: src/main/java/com/techjar/vivecraftforge/util/BlockListMode.java
// public enum BlockListMode {
// 	DISABLED,
// 	WHITELIST,
// 	BLACKLIST;
// }
// 
// Path: src/main/java/com/techjar/vivecraftforge/util/VivecraftForgeLog.java
// public class VivecraftForgeLog {
// 	public static void info(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.INFO, message, data);
// 	}
// 
// 	public static void warning(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.WARN, message, data);
// 	}
// 
// 	public static void severe(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.ERROR, message, data);
// 	}
// 
// 	public static void debug(String message, Object... data) {
// 		FMLRelaunchLog.log("Vivecraft Forge Extensions", Level.DEBUG, message, data);
// 	}
// }


// Path: src/main/java/com/techjar/vivecraftforge/Config.java
import com.google.common.collect.Lists;
import com.google.common.primitives.Ints;
import com.techjar.vivecraftforge.util.BlockListMode;
import com.techjar.vivecraftforge.util.VivecraftForgeLog;
import net.minecraft.block.Block;
import net.minecraft.init.Blocks;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.common.config.Property;
import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;

		// VR Changes
		creeperSwellDistance = config.get("vrchanges", "creeperswelldistance", 1.75, "Distance at which creepers swell and explode for VR players. Default: 1.75, Vanilla: 3").getDouble();
		movedTooQuicklyThreshold = (float)config.get("vrchanges", "movedtooquicklythreshold", 64.0, "Increase this if you experience rubber banding when teleporting.").getDouble();
		movedWronglyThreshold = config.get("vrchanges", "movedwronglythreshold", 15.0, "Increase this if you experience rubber banding when teleporting.").getDouble();
		// PvP
		vrVsVR = config.get("pvp", "vrvsvr", true, "Allows standing VR players to attack standing VR players.").getBoolean();
		vrVsSeatedVR = config.get("pvp", "vrvsseatedvr", true, "Allows standing VR players to attack seated VR players.").getBoolean();
		vrVsNonVR = config.get("pvp", "vrvsnonvr", true, "Allows standing VR players to attack non-VR players.").getBoolean();
		seatedVrVsSeatedVR = config.get("pvp", "seatedvrvsseatedvr", true, "Allows seated VR players to attack seated VR players.").getBoolean();
		seatedVrVsNonVR = config.get("pvp", "seatedvrvsnonvr", true, "Allows seated VR players to attack non-VR players.").getBoolean();
		// Bow
		bowStandingMul = (float)config.get("bow", "standingmultiplier", 2.0, "Archery damage multiplier for standing VR players. Default: 2.0").getDouble();
		bowSeatedMul = (float)config.get("bow", "seatedmultiplier", 1.0, "Archery damage multiplier for seated VR players. Default: 1.0").getDouble();
		bowStandingHeadshotMul = (float)config.get("bow", "standingheadshotmultiplier", 3.0, "Archery headshot damage multiplier for standing VR players. Default: 3.0").getDouble();
		bowSeatedHeadshotMul = (float)config.get("bow", "seatedheadshotmultiplier", 2.0, "Archery headshot damage multiplier for seated VR players. Default: 2.0").getDouble();
		// Climbey
		climbeyEnabled = config.get("climbey", "enabled", true, "Whether or not climbey is allowed on this server.").getBoolean();
		{
			Property prop = config.get("climbey", "blocklist", new String[]{"minecraft:wool:0", "minecraft:dirt", "grass"}, "List of blocks to whitelist or blacklist, in format blockname, blockname:meta, blockid or blockid:meta.");
			blockList = Lists.newArrayList(prop.getStringList());
			boolean changed = false;
			for (Iterator<String> it = blockList.iterator(); it.hasNext();) {
				String str = it.next();
				String fullStr = str;
				int colon = str.lastIndexOf(':');
				if (colon != -1) {
					String meta = str.substring(colon + 1);
					str = str.substring(0, colon);
					if (Ints.tryParse(meta) == null) {
						if (str.indexOf(':') != -1) { // Extra colons, must be meta
							VivecraftForgeLog.warning("Invalid meta for blocklist item: %s", fullStr);