Commit 1dd64987f1b054d2d9e8e3b75bd657c4a7cc8c82

Authored by Mumfrey
1 parent 171e491f

moving PrivateFields to common and adding PrivateFieldsClient for client side

debug/obfuscation.properties
... ... @@ -18,6 +18,7 @@ field_71477_af=serverPort
18 18 field_147712_ad=shaderResourceLocations
19 19 field_147713_ae=shaderIndex
20 20 field_175083_ad=useShader
  21 +field_149528_b=view
21 22 func_148833_a=processPacket
22 23 func_71411_J=runGameLoop
23 24 func_71407_l=runTick
... ... @@ -52,4 +53,11 @@ func_71370_a=resize
52 53 func_175069_a=loadShader
53 54 func_78481_a=getFOVModifier
54 55 func_78479_a=setupCameraTransform
55   -func_147693_a=loadSoundResource
56 56 \ No newline at end of file
  57 +func_147693_a=loadSoundResource
  58 +func_180784_a=onBlockClicked
  59 +func_180236_a=activateBlockOrUseItem
  60 +func_147346_a=processPlayerBlockPlacement
  61 +func_175087_a=handleAnimation
  62 +func_147345_a=processPlayerDigging
  63 +func_71190_q=updateTimeLightAndEntities
  64 +func_180031_a=checkThreadAndEnqueue
57 65 \ No newline at end of file
... ...
java/client/com/mumfrey/liteloader/client/ClientPluginChannelsClient.java
... ... @@ -12,7 +12,7 @@ import net.minecraft.network.play.client.C17PacketCustomPayload;
12 12 import net.minecraft.network.play.server.S01PacketJoinGame;
13 13 import net.minecraft.network.play.server.S3FPacketCustomPayload;
14 14  
15   -import com.mumfrey.liteloader.client.util.PrivateFields;
  15 +import com.mumfrey.liteloader.client.util.PrivateFieldsClient;
16 16 import com.mumfrey.liteloader.core.ClientPluginChannels;
17 17 import com.mumfrey.liteloader.core.exceptions.UnregisteredChannelException;
18 18  
... ... @@ -67,7 +67,7 @@ public class ClientPluginChannelsClient extends ClientPluginChannels
67 67 {
68 68 if (netHandler instanceof INetHandlerLoginClient)
69 69 {
70   - NetworkManager networkManager = PrivateFields.netManager.get(((NetHandlerLoginClient)netHandler));
  70 + NetworkManager networkManager = PrivateFieldsClient.netManager.get(((NetHandlerLoginClient)netHandler));
71 71 networkManager.sendPacket(new C17PacketCustomPayload(CHANNEL_REGISTER, registrationData));
72 72 }
73 73 else if (netHandler instanceof INetHandlerPlayClient)
... ...
java/client/com/mumfrey/liteloader/client/SoundHandlerReloadInhibitor.java
... ... @@ -6,7 +6,7 @@ import net.minecraft.client.audio.SoundHandler;
6 6 import net.minecraft.client.resources.IResourceManagerReloadListener;
7 7 import net.minecraft.client.resources.SimpleReloadableResourceManager;
8 8  
9   -import com.mumfrey.liteloader.client.util.PrivateFields;
  9 +import com.mumfrey.liteloader.client.util.PrivateFieldsClient;
10 10 import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
11 11  
12 12 /**
... ... @@ -53,7 +53,7 @@ public class SoundHandlerReloadInhibitor
53 53 {
54 54 if (!this.inhibited)
55 55 {
56   - List<IResourceManagerReloadListener> reloadListeners = PrivateFields.reloadListeners.get(this.resourceManager);
  56 + List<IResourceManagerReloadListener> reloadListeners = PrivateFieldsClient.reloadListeners.get(this.resourceManager);
57 57 if (reloadListeners != null)
58 58 {
59 59 this.storedIndex = reloadListeners.indexOf(this.soundHandler);
... ... @@ -87,7 +87,7 @@ public class SoundHandlerReloadInhibitor
87 87 {
88 88 if (this.inhibited)
89 89 {
90   - List<IResourceManagerReloadListener> reloadListeners = PrivateFields.reloadListeners.get(this.resourceManager);
  90 + List<IResourceManagerReloadListener> reloadListeners = PrivateFieldsClient.reloadListeners.get(this.resourceManager);
91 91 if (reloadListeners != null)
92 92 {
93 93 if (this.storedIndex > -1)
... ...
java/client/com/mumfrey/liteloader/client/util/PrivateFieldsClient.java 0 → 100644
  1 +package com.mumfrey.liteloader.client.util;
  2 +
  3 +import java.util.IdentityHashMap;
  4 +import java.util.List;
  5 +import java.util.Map;
  6 +
  7 +import net.minecraft.client.network.NetHandlerLoginClient;
  8 +import net.minecraft.client.renderer.entity.RenderManager;
  9 +import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
  10 +import net.minecraft.client.resources.IResourceManagerReloadListener;
  11 +import net.minecraft.client.resources.SimpleReloadableResourceManager;
  12 +import net.minecraft.network.NetworkManager;
  13 +import net.minecraft.tileentity.TileEntity;
  14 +import net.minecraft.util.ObjectIntIdentityMap;
  15 +import net.minecraft.util.RegistryNamespaced;
  16 +import net.minecraft.util.RegistrySimple;
  17 +
  18 +import com.mumfrey.liteloader.core.runtime.Obf;
  19 +import com.mumfrey.liteloader.util.PrivateFields;
  20 +
  21 +@SuppressWarnings("rawtypes")
  22 +public class PrivateFieldsClient<P, T> extends PrivateFields<P, T>
  23 +{
  24 + private PrivateFieldsClient(Class<P> owner, Obf obf)
  25 + {
  26 + super(owner, obf);
  27 + }
  28 +
  29 + public static final PrivateFieldsClient<RenderManager, Map> entityRenderMap = new PrivateFieldsClient<RenderManager, Map> (RenderManager.class, Obf.entityRenderMap);
  30 + public static final PrivateFieldsClient<NetHandlerLoginClient, NetworkManager> netManager = new PrivateFieldsClient<NetHandlerLoginClient, NetworkManager> (NetHandlerLoginClient.class, Obf.networkManager);
  31 + public static final PrivateFieldsClient<RegistrySimple, Map> registryObjects = new PrivateFieldsClient<RegistrySimple, Map> (RegistrySimple.class, Obf.registryObjects);
  32 + public static final PrivateFieldsClient<RegistryNamespaced, ObjectIntIdentityMap> underlyingIntegerMap = new PrivateFieldsClient<RegistryNamespaced, ObjectIntIdentityMap>(RegistryNamespaced.class, Obf.underlyingIntegerMap);
  33 + public static final PrivateFieldsClient<ObjectIntIdentityMap, IdentityHashMap> identityMap = new PrivateFieldsClient<ObjectIntIdentityMap, IdentityHashMap> (ObjectIntIdentityMap.class, Obf.identityMap);
  34 + public static final PrivateFieldsClient<ObjectIntIdentityMap, List> objectList = new PrivateFieldsClient<ObjectIntIdentityMap, List> (ObjectIntIdentityMap.class, Obf.objectList);
  35 + public static final PrivateFieldsClient<TileEntityRendererDispatcher, Map> specialRendererMap = new PrivateFieldsClient<TileEntityRendererDispatcher, Map> (TileEntityRendererDispatcher.class, Obf.mapSpecialRenderers);
  36 + public static final PrivateFieldsClient<TileEntity, Map> tileEntityNameToClassMap = new PrivateFieldsClient<TileEntity, Map> (TileEntity.class, Obf.tileEntityNameToClassMap);
  37 + public static final PrivateFieldsClient<TileEntity, Map> tileEntityClassToNameMap = new PrivateFieldsClient<TileEntity, Map> (TileEntity.class, Obf.tileEntityClassToNameMap);
  38 +
  39 + public static final PrivateFieldsClient<SimpleReloadableResourceManager, List<IResourceManagerReloadListener>> reloadListeners =
  40 + new PrivateFieldsClient<SimpleReloadableResourceManager, List<IResourceManagerReloadListener>>(SimpleReloadableResourceManager.class, Obf.reloadListeners);
  41 +}
0 42 \ No newline at end of file
... ...
java/client/com/mumfrey/liteloader/util/ModUtilities.java
... ... @@ -6,13 +6,8 @@ import java.util.IdentityHashMap;
6 6 import java.util.List;
7 7 import java.util.Map;
8 8  
9   -import org.lwjgl.LWJGLException;
10   -import org.lwjgl.opengl.Display;
11   -import org.lwjgl.opengl.DisplayMode;
12   -
13 9 import net.minecraft.block.Block;
14 10 import net.minecraft.client.Minecraft;
15   -import net.minecraft.client.renderer.Tessellator;
16 11 import net.minecraft.client.renderer.entity.Render;
17 12 import net.minecraft.client.renderer.entity.RenderManager;
18 13 import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
... ... @@ -21,16 +16,18 @@ import net.minecraft.entity.Entity;
21 16 import net.minecraft.init.Blocks;
22 17 import net.minecraft.init.Items;
23 18 import net.minecraft.item.Item;
24   -import net.minecraft.launchwrapper.IClassTransformer;
25   -import net.minecraft.launchwrapper.Launch;
26 19 import net.minecraft.tileentity.TileEntity;
27 20 import net.minecraft.util.ObjectIntIdentityMap;
28 21 import net.minecraft.util.RegistryNamespaced;
29 22 import net.minecraft.util.RegistrySimple;
30 23 import net.minecraft.util.ResourceLocation;
31 24  
  25 +import org.lwjgl.LWJGLException;
  26 +import org.lwjgl.opengl.Display;
  27 +import org.lwjgl.opengl.DisplayMode;
  28 +
32 29 import com.mumfrey.liteloader.client.overlays.IMinecraft;
33   -import com.mumfrey.liteloader.client.util.PrivateFields;
  30 +import com.mumfrey.liteloader.client.util.PrivateFieldsClient;
34 31 import com.mumfrey.liteloader.core.runtime.Obf;
35 32 import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
36 33  
... ... @@ -42,41 +39,11 @@ import com.mumfrey.liteloader.util.log.LiteLoaderLogger;
42 39 public abstract class ModUtilities
43 40 {
44 41 /**
45   - * True if FML is being used, in which case we use searge names instead of raw field/method names
46   - */
47   - private static boolean fmlDetected = false;
48   -
49   - private static boolean seargeNames = false;
50   -
51   - static
52   - {
53   - // Check for FML
54   - ModUtilities.fmlDetected = ModUtilities.fmlIsPresent();
55   -
56   - try
57   - {
58   - Minecraft.class.getDeclaredField("running");
59   - }
60   - catch (SecurityException ex)
61   - {
62   - }
63   - catch (NoSuchFieldException ex)
64   - {
65   - ModUtilities.seargeNames = true;
66   - }
67   - }
68   -
69   - /**
70 42 * @return true if FML is present in the current environment
71 43 */
72 44 public static boolean fmlIsPresent()
73 45 {
74   -// if (ClientBrandRetriever.getClientModName().contains("fml")) return true;
75   -
76   - for (IClassTransformer transformer : Launch.classLoader.getTransformers())
77   - if (transformer.getClass().getName().contains("fml")) return true;
78   -
79   - return false;
  46 + return Obf.fmlIsPresent();
80 47 }
81 48  
82 49 public static void setWindowSize(int width, int height)
... ... @@ -105,7 +72,7 @@ public abstract class ModUtilities
105 72 {
106 73 RenderManager renderManager = Minecraft.getMinecraft().getRenderManager();
107 74  
108   - Map<Class<? extends Entity>, Render> entityRenderMap = PrivateFields.entityRenderMap.get(renderManager);
  75 + Map<Class<? extends Entity>, Render> entityRenderMap = PrivateFieldsClient.entityRenderMap.get(renderManager);
109 76 if (entityRenderMap != null)
110 77 {
111 78 entityRenderMap.put(entityClass, renderer);
... ... @@ -123,7 +90,7 @@ public abstract class ModUtilities
123 90  
124 91 try
125 92 {
126   - Map<Class<? extends TileEntity>, TileEntitySpecialRenderer> specialRendererMap = PrivateFields.specialRendererMap.get(tileEntityRenderer);
  93 + Map<Class<? extends TileEntity>, TileEntitySpecialRenderer> specialRendererMap = PrivateFieldsClient.specialRendererMap.get(tileEntityRenderer);
127 94 specialRendererMap.put(tileEntityClass, renderer);
128 95 renderer.setRendererDispatcher(tileEntityRenderer);
129 96 }
... ... @@ -228,8 +195,8 @@ public abstract class ModUtilities
228 195 {
229 196 try
230 197 {
231   - Map<String, Class<? extends TileEntity>> nameToClassMap = PrivateFields.tileEntityNameToClassMap.get(null);
232   - Map<Class<? extends TileEntity>, String> classToNameMap = PrivateFields.tileEntityClassToNameMap.get(null);
  198 + Map<String, Class<? extends TileEntity>> nameToClassMap = PrivateFieldsClient.tileEntityNameToClassMap.get(null);
  199 + Map<Class<? extends TileEntity>, String> classToNameMap = PrivateFieldsClient.tileEntityClassToNameMap.get(null);
233 200  
234 201 nameToClassMap.put(entityName, tileEntityClass);
235 202 classToNameMap.put(tileEntityClass, entityName);
... ... @@ -248,8 +215,7 @@ public abstract class ModUtilities
248 215 */
249 216 public static String getObfuscatedFieldName(String fieldName, String obfuscatedFieldName, String seargeFieldName)
250 217 {
251   - boolean deobfuscated = Tessellator.class.getSimpleName().equals("Tessellator");
252   - return deobfuscated ? (ModUtilities.seargeNames ? seargeFieldName : fieldName) : (ModUtilities.fmlDetected ? seargeFieldName : obfuscatedFieldName);
  218 + return Obf.getObfuscatedFieldName(fieldName, obfuscatedFieldName, seargeFieldName);
253 219 }
254 220  
255 221 /**
... ... @@ -260,8 +226,7 @@ public abstract class ModUtilities
260 226 */
261 227 public static String getObfuscatedFieldName(Obf obf)
262 228 {
263   - boolean deobfuscated = Tessellator.class.getSimpleName().equals("Tessellator");
264   - return deobfuscated ? (ModUtilities.seargeNames ? obf.srg : obf.name) : (ModUtilities.fmlDetected ? obf.srg : obf.obf);
  229 + return Obf.getObfuscatedFieldName(obf);
265 230 }
266 231  
267 232 @SuppressWarnings("unchecked")
... ... @@ -274,10 +239,10 @@ public abstract class ModUtilities
274 239 if (registry instanceof RegistryNamespaced)
275 240 {
276 241 RegistryNamespaced rns = (RegistryNamespaced)registry;
277   - underlyingIntegerMap = PrivateFields.underlyingIntegerMap.get(rns);
  242 + underlyingIntegerMap = PrivateFieldsClient.underlyingIntegerMap.get(rns);
278 243 }
279 244  
280   - Map<K, V> registryObjects = PrivateFields.registryObjects.get(registry);
  245 + Map<K, V> registryObjects = PrivateFieldsClient.registryObjects.get(registry);
281 246 if (registryObjects != null)
282 247 {
283 248 V existingValue = registryObjects.get(key);
... ... @@ -287,8 +252,8 @@ public abstract class ModUtilities
287 252  
288 253 if (underlyingIntegerMap != null)
289 254 {
290   - IdentityHashMap<V, Integer> identityMap = PrivateFields.identityMap.get(underlyingIntegerMap);
291   - List<V> objectList = PrivateFields.objectList.get(underlyingIntegerMap);
  255 + IdentityHashMap<V, Integer> identityMap = PrivateFieldsClient.identityMap.get(underlyingIntegerMap);
  256 + List<V> objectList = PrivateFieldsClient.objectList.get(underlyingIntegerMap);
292 257 if (identityMap != null) identityMap.remove(existingValue);
293 258 if (objectList != null) objectList.remove(existingValue);
294 259 }
... ...
java/common/com/mumfrey/liteloader/core/runtime/Obf.java
... ... @@ -7,6 +7,10 @@ import java.util.HashMap;
7 7 import java.util.Map;
8 8 import java.util.Properties;
9 9  
  10 +import net.minecraft.launchwrapper.IClassTransformer;
  11 +import net.minecraft.launchwrapper.Launch;
  12 +import net.minecraft.server.MinecraftServer;
  13 +
10 14 /**
11 15 * Centralised obfuscation table for LiteLoader
12 16 *
... ... @@ -70,6 +74,14 @@ public class Obf
70 74 public static final Obf Render = new Obf("net.minecraft.client.renderer.entity.Render", "cpu" );
71 75 public static final Obf GuiTextField = new Obf("net.minecraft.client.gui.GuiTextField", "bul" );
72 76 public static final Obf SoundHandler = new Obf("net.minecraft.client.audio.SoundHandler", "czh" );
  77 + public static final Obf BlockPos = new Obf("net.minecraft.util.BlockPos", "dt" );
  78 + public static final Obf EnumFacing = new Obf("net.minecraft.util.EnumFacing", "ej" );
  79 + public static final Obf ItemInWorldManager = new Obf("net.minecraft.server.management.ItemInWorldManager", "qx" );
  80 + public static final Obf NetHandlerPlayServer = new Obf("net.minecraft.network.NetHandlerPlayServer", "rj" );
  81 + public static final Obf EntityPlayer = new Obf("net.minecraft.entity.player.EntityPlayer", "ahd" );
  82 + public static final Obf World = new Obf("net.minecraft.world.World", "aqu" );
  83 + public static final Obf ItemStack = new Obf("net.minecraft.item.ItemStack", "amj" );
  84 + public static final Obf PacketThreadUtil = new Obf("net.minecraft.network.PacketThreadUtil", "ig" );
73 85  
74 86 // Fields
75 87 // -----------------------------------------------------------------------------------------
... ... @@ -93,6 +105,7 @@ public class Obf
93 105 public static final Obf shaderResourceLocations = new Obf("field_147712_ad", "ab" );
94 106 public static final Obf shaderIndex = new Obf("field_147713_ae", "ac" );
95 107 public static final Obf useShader = new Obf("field_175083_ad", "ad" );
  108 + public static final Obf viewDistance = new Obf("field_149528_b", "b" );
96 109  
97 110 // Methods
98 111 // -----------------------------------------------------------------------------------------
... ... @@ -132,6 +145,13 @@ public class Obf
132 145 public static final Obf getFOVModifier = new Obf("func_78481_a", "a" );
133 146 public static final Obf setupCameraTransform = new Obf("func_78479_a", "a" );
134 147 public static final Obf loadSoundResource = new Obf("func_147693_a", "a" );
  148 + public static final Obf onBlockClicked = new Obf("func_180784_a", "a" );
  149 + public static final Obf activateBlockOrUseItem = new Obf("func_180236_a", "a" );
  150 + public static final Obf processPlayerBlockPlacement = new Obf("func_147346_a", "a" );
  151 + public static final Obf handleAnimation = new Obf("func_175087_a", "a" );
  152 + public static final Obf processPlayerDigging = new Obf("func_147345_a", "a" );
  153 + public static final Obf updateTimeLightAndEntities = new Obf("func_71190_q", "z" );
  154 + public static final Obf checkThreadAndEnqueue = new Obf("func_180031_a", "a" );
135 155  
136 156 public static final int MCP = 0;
137 157 public static final int SRG = 1;
... ... @@ -383,4 +403,61 @@ public class Obf
383 403 return this.ordinal;
384 404 }
385 405 }
  406 +
  407 + /**
  408 + * True if FML is being used, in which case we use searge names instead of raw field/method names
  409 + */
  410 + private static boolean fmlDetected = false;
  411 +
  412 + private static boolean seargeNames = false;
  413 +
  414 + static
  415 + {
  416 + // Check for FML
  417 + Obf.fmlDetected = Obf.fmlIsPresent();
  418 +
  419 + try
  420 + {
  421 + MinecraftServer.class.getDeclaredField("serverRunning");
  422 + }
  423 + catch (SecurityException ex)
  424 + {
  425 + }
  426 + catch (NoSuchFieldException ex)
  427 + {
  428 + Obf.seargeNames = true;
  429 + }
  430 + }
  431 +
  432 + public static boolean fmlIsPresent()
  433 + {
  434 + for (IClassTransformer transformer : Launch.classLoader.getTransformers())
  435 + if (transformer.getClass().getName().contains("fml")) return true;
  436 +
  437 + return false;
  438 + }
  439 +
  440 + /**
  441 + * Abstraction helper function
  442 + *
  443 + * @param fieldName Name of field to get, returned unmodified if in debug mode
  444 + * @return Obfuscated field name if present
  445 + */
  446 + public static String getObfuscatedFieldName(String fieldName, String obfuscatedFieldName, String seargeFieldName)
  447 + {
  448 + boolean deobfuscated = MinecraftServer.class.getSimpleName().equals("MinecraftServer");
  449 + return deobfuscated ? (Obf.seargeNames ? seargeFieldName : fieldName) : (Obf.fmlDetected ? seargeFieldName : obfuscatedFieldName);
  450 + }
  451 +
  452 + /**
  453 + * Abstraction helper function
  454 + *
  455 + * @param obf Field to get, returned unmodified if in debug mode
  456 + * @return Obfuscated field name if present
  457 + */
  458 + public static String getObfuscatedFieldName(Obf obf)
  459 + {
  460 + boolean deobfuscated = MinecraftServer.class.getSimpleName().equals("MinecraftServer");
  461 + return deobfuscated ? (Obf.seargeNames ? obf.srg : obf.name) : (Obf.fmlDetected ? obf.srg : obf.obf);
  462 + }
386 463 }
... ...
java/client/com/mumfrey/liteloader/client/util/PrivateFields.java renamed to java/common/com/mumfrey/liteloader/util/PrivateFields.java
1   -package com.mumfrey.liteloader.client.util;
  1 +package com.mumfrey.liteloader.util;
2 2  
3 3 import java.lang.reflect.Field;
4 4 import java.lang.reflect.Modifier;
5   -import java.util.IdentityHashMap;
6   -import java.util.List;
7   -import java.util.Map;
8 5  
9   -import net.minecraft.client.network.NetHandlerLoginClient;
10   -import net.minecraft.client.renderer.entity.RenderManager;
11   -import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
12   -import net.minecraft.client.resources.IResourceManagerReloadListener;
13   -import net.minecraft.client.resources.SimpleReloadableResourceManager;
14   -import net.minecraft.network.NetworkManager;
15   -import net.minecraft.tileentity.TileEntity;
16   -import net.minecraft.util.ObjectIntIdentityMap;
17   -import net.minecraft.util.RegistryNamespaced;
18   -import net.minecraft.util.RegistrySimple;
  6 +import net.minecraft.network.play.client.C15PacketClientSettings;
19 7  
20 8 import com.mumfrey.liteloader.core.runtime.Obf;
21   -import com.mumfrey.liteloader.util.ModUtilities;
22 9  
23 10 /**
24 11 * Wrapper for obf/mcp reflection-accessed private fields, mainly added to centralise the locations I have to update the obfuscated field names
... ... @@ -28,7 +15,6 @@ import com.mumfrey.liteloader.util.ModUtilities;
28 15 * @param <P> Parent class type, the type of the class that owns the field
29 16 * @param <T> Field type, the type of the field value
30 17 */
31   -@SuppressWarnings("rawtypes")
32 18 public class PrivateFields<P, T>
33 19 {
34 20 /**
... ... @@ -51,7 +37,7 @@ public class PrivateFields&lt;P, T&gt;
51 37 protected PrivateFields(Class<P> owner, Obf obf)
52 38 {
53 39 this.parentClass = owner;
54   - this.fieldName = ModUtilities.getObfuscatedFieldName(obf);
  40 + this.fieldName = Obf.getObfuscatedFieldName(obf);
55 41 }
56 42  
57 43 /**
... ... @@ -137,17 +123,7 @@ public class PrivateFields&lt;P, T&gt;
137 123  
138 124 return value;
139 125 }
140   -
141   - public static final PrivateFields<RenderManager, Map> entityRenderMap = new PrivateFields<RenderManager, Map> (RenderManager.class, Obf.entityRenderMap);
142   - public static final PrivateFields<NetHandlerLoginClient, NetworkManager> netManager = new PrivateFields<NetHandlerLoginClient, NetworkManager> (NetHandlerLoginClient.class, Obf.networkManager);
143   - public static final PrivateFields<RegistrySimple, Map> registryObjects = new PrivateFields<RegistrySimple, Map> (RegistrySimple.class, Obf.registryObjects);
144   - public static final PrivateFields<RegistryNamespaced, ObjectIntIdentityMap> underlyingIntegerMap = new PrivateFields<RegistryNamespaced, ObjectIntIdentityMap>(RegistryNamespaced.class, Obf.underlyingIntegerMap);
145   - public static final PrivateFields<ObjectIntIdentityMap, IdentityHashMap> identityMap = new PrivateFields<ObjectIntIdentityMap, IdentityHashMap> (ObjectIntIdentityMap.class, Obf.identityMap);
146   - public static final PrivateFields<ObjectIntIdentityMap, List> objectList = new PrivateFields<ObjectIntIdentityMap, List> (ObjectIntIdentityMap.class, Obf.objectList);
147   - public static final PrivateFields<TileEntityRendererDispatcher, Map> specialRendererMap = new PrivateFields<TileEntityRendererDispatcher, Map> (TileEntityRendererDispatcher.class, Obf.mapSpecialRenderers);
148   - public static final PrivateFields<TileEntity, Map> tileEntityNameToClassMap = new PrivateFields<TileEntity, Map> (TileEntity.class, Obf.tileEntityNameToClassMap);
149   - public static final PrivateFields<TileEntity, Map> tileEntityClassToNameMap = new PrivateFields<TileEntity, Map> (TileEntity.class, Obf.tileEntityClassToNameMap);
150 126  
151   - public static final PrivateFields<SimpleReloadableResourceManager, List<IResourceManagerReloadListener>> reloadListeners =
152   - new PrivateFields<SimpleReloadableResourceManager, List<IResourceManagerReloadListener>>(SimpleReloadableResourceManager.class, Obf.reloadListeners);
  127 + public static final PrivateFields<C15PacketClientSettings, Integer> viewDistance = new PrivateFields<C15PacketClientSettings, Integer>(C15PacketClientSettings.class, Obf.viewDistance);
  128 +
153 129 }
154 130 \ No newline at end of file
... ...