Skip to content

Commit

Permalink
Reversed registration technique for v1.7
Browse files Browse the repository at this point in the history
  • Loading branch information
ase34 committed Apr 12, 2014
1 parent 0ad9a33 commit ef23f8f
Showing 1 changed file with 46 additions and 13 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -12,31 +12,64 @@
* <http://www.gnu.org/licenses/>.
*/
/*
* This code is pulled from Jacek (http://forums.bukkit.org/threads/tutorial-how-to-customize-the-behaviour-of-a-mob-or-entity.54547/)
* This code is pulled from Jogy34 (https://forums.bukkit.org/threads/tutorial-1-7-creating-a-custom-entity.212849/)
*/
package de.ase34.flyingblocksapi.natives.v1_7_R1.util;

import java.lang.reflect.Method;
import java.lang.reflect.Field;
import java.util.Map;

public class EntityRegistrator {

private static Method registerMethod;


protected static Field mapStringToClassField, mapClassToStringField, mapClassToIdField,
mapStringToIdField;

static {
try {
registerMethod = net.minecraft.server.v1_7_R1.EntityTypes.class.getDeclaredMethod("a", new Class<?>[]{Class.class, String.class, int.class});
registerMethod.setAccessible(true);
mapStringToClassField = net.minecraft.server.v1_7_R1.EntityTypes.class
.getDeclaredField("c");
mapClassToStringField = net.minecraft.server.v1_7_R1.EntityTypes.class
.getDeclaredField("d");
// mapIdtoClassField = net.minecraft.server.v1_7_R1.EntityTypes.class.getDeclaredField("e");
mapClassToIdField = net.minecraft.server.v1_7_R1.EntityTypes.class
.getDeclaredField("f");
mapStringToIdField = net.minecraft.server.v1_7_R1.EntityTypes.class
.getDeclaredField("g");

mapStringToClassField.setAccessible(true);
mapClassToStringField.setAccessible(true);
// mapIdToClassField.setAccessible(true);
mapClassToIdField.setAccessible(true);
mapStringToIdField.setAccessible(true);
} catch (Exception e) {
throw new RuntimeException(e);
}
}

@SuppressWarnings("rawtypes")
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void registerCustomEntity(Class entityClass, String name, int id) {
try {
registerMethod.invoke(null, entityClass, name, id);
} catch (Exception e) {
throw new RuntimeException(e);
if (mapStringToClassField == null || mapStringToIdField == null
|| mapClassToStringField == null || mapClassToIdField == null) {
return;
} else {
try {
Map mapStringToClass = (Map) mapStringToClassField.get(null);
Map mapStringToId = (Map) mapStringToIdField.get(null);
Map mapClasstoString = (Map) mapClassToStringField.get(null);
Map mapClassToId = (Map) mapClassToIdField.get(null);

mapStringToClass.put(name, entityClass);
mapStringToId.put(name, Integer.valueOf(id));
mapClasstoString.put(entityClass, name);
mapClassToId.put(entityClass, Integer.valueOf(id));

mapStringToClassField.set(null, mapStringToClass);
mapStringToIdField.set(null, mapStringToId);
mapClassToStringField.set(null, mapClasstoString);
mapClassToIdField.set(null, mapClassToId);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
}
}

0 comments on commit ef23f8f

Please sign in to comment.