Skip to content

Commit e4ee8b7

Browse files
committed
extracted EntityTypes to NMS Interface class, refactorized entity class
conversion methods
1 parent 619549a commit e4ee8b7

File tree

5 files changed

+40
-22
lines changed

5 files changed

+40
-22
lines changed

src/java/de/ntcomputer/minecraft/controllablemobs/api/ai/behaviors/AILookAtEntity.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ public AILookAtEntity(final EntityType entityType, final float maxDistance) thro
108108
* @throws IllegalArgumentException when the entityType is null or not pointing at a valid entity class
109109
*/
110110
public AILookAtEntity(final int priority, final EntityType entityType, final float maxDistance) throws IllegalArgumentException {
111-
this(priority, ControllableMobHelper.getNotchEntityClass(entityType), maxDistance);
111+
this(priority, ControllableMobHelper.getNmsEntityClass(entityType), maxDistance);
112112
}
113113

114114
private AILookAtEntity(final int priority, final Class<? extends Entity> entityClass, final float maxDistance) {

src/java/de/ntcomputer/minecraft/controllablemobs/api/ai/behaviors/AITargetBehaviorEx.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ protected AITargetBehaviorEx(int priority, int maximumNoEyeContactTicks, boolean
3030
this.maximumDistance = maximumDistance;
3131
this.targetClasses = new Class[targetClasses.length];
3232
for(int i=0; i<targetClasses.length; i++) {
33-
this.targetClasses[i] = (Class<? extends EntityLiving>) ControllableMobHelper.getNotchEntityClass(targetClasses[i]);
33+
this.targetClasses[i] = (Class<? extends EntityLiving>) ControllableMobHelper.getNmsEntityClass(targetClasses[i]);
3434
}
3535
}
3636

src/java/de/ntcomputer/minecraft/controllablemobs/implementation/ControllableMobHelper.java

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,47 @@
11
package de.ntcomputer.minecraft.controllablemobs.implementation;
22

3-
import java.lang.reflect.Field;
4-
import java.util.Map;
5-
6-
import net.minecraft.server.v1_6_R3.EntityTypes;
7-
83
import org.bukkit.entity.Animals;
94
import org.bukkit.entity.Creature;
10-
import org.bukkit.entity.Entity;
115
import org.bukkit.entity.EntityType;
126
import org.bukkit.entity.HumanEntity;
137
import org.bukkit.entity.LivingEntity;
148
import org.bukkit.entity.Monster;
159
import org.bukkit.entity.Player;
1610

11+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.NativeInterfaces;
12+
1713
public class ControllableMobHelper {
1814

19-
public static Class<? extends net.minecraft.server.v1_6_R3.Entity> getNotchEntityClass(final Class<? extends Entity> entityClass) throws IllegalArgumentException {
15+
@SuppressWarnings("deprecation")
16+
public static Class<? extends net.minecraft.server.v1_6_R3.Entity> getNmsEntityClass(final Class<? extends LivingEntity> entityClass) throws IllegalArgumentException {
2017
if(entityClass==null) throw new IllegalArgumentException("entityClass must not be null");
2118
if(entityClass==HumanEntity.class || entityClass==Player.class) return net.minecraft.server.v1_6_R3.EntityHuman.class;
2219
if(entityClass==Monster.class) return net.minecraft.server.v1_6_R3.EntityMonster.class;
2320
if(entityClass==Creature.class) return net.minecraft.server.v1_6_R3.EntityCreature.class;
2421
if(entityClass==Animals.class) return net.minecraft.server.v1_6_R3.EntityAnimal.class;
2522
if(entityClass==LivingEntity.class) return net.minecraft.server.v1_6_R3.EntityLiving.class;
2623

27-
2824
for(EntityType entityType: EntityType.values()) {
2925
if(entityType.getEntityClass()==null || entityType.getTypeId()==-1) continue;
3026
if(entityClass.equals(entityType.getEntityClass())) {
31-
return getNotchEntityClass(entityType);
27+
return getNmsEntityClass(entityType);
3228
}
3329
}
3430

3531
throw new IllegalArgumentException("Class "+entityClass.getSimpleName()+" is not resolvable to an EntityType");
3632
}
3733

38-
@SuppressWarnings({ "unchecked", "rawtypes" })
39-
public static Class<? extends net.minecraft.server.v1_6_R3.Entity> getNotchEntityClass(final EntityType entityType) throws IllegalArgumentException {
34+
@SuppressWarnings("deprecation")
35+
public static Class<? extends net.minecraft.server.v1_6_R3.Entity> getNmsEntityClass(final EntityType entityType) throws IllegalArgumentException {
4036
if(entityType==null) throw new IllegalArgumentException("EntityType must not be null");
4137
if(entityType==EntityType.PLAYER) return net.minecraft.server.v1_6_R3.EntityHuman.class;
4238

4339
try {
44-
Field mapField = EntityTypes.class.getDeclaredField("d");
45-
mapField.setAccessible(true);
46-
final Class<? extends net.minecraft.server.v1_6_R3.Entity> entityClass = (Class<? extends net.minecraft.server.v1_6_R3.Entity>) ((Map) mapField.get(null)).get(Integer.valueOf(entityType.getTypeId()));
47-
if(entityClass==null) throw new IllegalArgumentException("EntityType "+entityType.name()+" is not resolvable to a net.minecraft Class");
40+
final Class<? extends net.minecraft.server.v1_6_R3.Entity> entityClass = NativeInterfaces.ENTITYTYPES.METHOD_GETCLASSBYID.invoke(entityType.getTypeId());
41+
if(entityClass==null) throw new IllegalArgumentException("EntityType "+entityType+" is not resolvable to a net.minecraft Class");
4842
return entityClass;
4943
} catch(Exception e) {
50-
throw new IllegalArgumentException("EntityType "+entityType.name()+" is not resolvable to a net.minecraft Class", e);
44+
throw new IllegalArgumentException("EntityType "+entityType+" is not resolvable to a net.minecraft Class", e);
5145
}
5246
}
5347

src/java/de/ntcomputer/minecraft/controllablemobs/implementation/nativeinterfaces/NativeInterfaces.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsAttributeModifiable;
66
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsAttributeModifier;
77
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsAttributeRanged;
8-
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsEntityInsentient;
9-
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsGenericAttributes;
10-
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsIAttribute;
118
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsControllerJump;
129
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsControllerLook;
1310
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsEntity;
14-
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsNavigation;
11+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsEntityInsentient;
12+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsEntityTypes;
13+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsGenericAttributes;
14+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsIAttribute;
1515
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsInterfacePathfinderGoal;
16+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsNavigation;
1617
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsPathfinderGoalSelector;
1718
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsPathfinderGoalSelectorItem;
1819
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server.NmsWorld;
@@ -34,6 +35,7 @@ public final class NativeInterfaces {
3435
public static final NmsAttributeModifier ATTRIBUTEMODIFIER = new NmsAttributeModifier();
3536
public static final NmsGenericAttributes GENERICATTRIBUTES = new NmsGenericAttributes();
3637
public static final NmsEntityInsentient ENTITYINSENTIENT = new NmsEntityInsentient();
38+
public static final NmsEntityTypes ENTITYTYPES = new NmsEntityTypes();
3739

3840
private NativeInterfaces() {
3941
throw new AssertionError();
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.server;
2+
3+
import net.minecraft.server.v1_6_R3.Entity;
4+
import net.minecraft.server.v1_6_R3.EntityTypes;
5+
import de.ntcomputer.minecraft.controllablemobs.implementation.nativeinterfaces.system.NativeMethodPublic;
6+
7+
public final class NmsEntityTypes {
8+
public final GetEntityClassById METHOD_GETCLASSBYID = new GetEntityClassById();
9+
10+
public final class GetEntityClassById extends NativeMethodPublic {
11+
@SuppressWarnings("unchecked")
12+
public Class<? extends Entity> invoke(int entityTypeId) {
13+
try {
14+
return EntityTypes.a(entityTypeId);
15+
} catch(Throwable e) {
16+
this.handleException(e);
17+
return null;
18+
}
19+
}
20+
}
21+
22+
}

0 commit comments

Comments
 (0)