Skip to content

Commit c54a999

Browse files
committed
Try fixing some of the unit tests
1 parent 90a38cc commit c54a999

File tree

7 files changed

+94
-72
lines changed

7 files changed

+94
-72
lines changed

src/main/java/com/comphenix/protocol/reflect/instances/DefaultInstances.java

Lines changed: 4 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -18,91 +18,29 @@
1818
package com.comphenix.protocol.reflect.instances;
1919

2020
import com.comphenix.protocol.ProtocolLogger;
21-
import com.comphenix.protocol.reflect.accessors.MethodAccessor;
2221
import com.comphenix.protocol.utility.MinecraftReflection;
23-
import com.comphenix.protocol.wrappers.BukkitConverters;
22+
import com.google.common.base.Objects;
23+
import com.google.common.collect.ImmutableList;
2424

25+
import javax.annotation.Nullable;
2526
import java.lang.reflect.Constructor;
2627
import java.util.Collection;
2728
import java.util.List;
28-
import java.util.Map;
29-
import java.util.UUID;
30-
import java.util.concurrent.ConcurrentHashMap;
3129
import java.util.logging.Level;
3230

33-
import javax.annotation.Nullable;
34-
35-
import com.google.common.base.Objects;
36-
import com.google.common.collect.ImmutableList;
37-
38-
import org.bukkit.Material;
39-
import org.bukkit.entity.EntityType;
40-
import org.bukkit.inventory.ItemStack;
41-
4231
/**
4332
* Used to construct default instances of any type.
4433
* @author Kristian
4534
*/
4635
public class DefaultInstances implements InstanceProvider {
47-
// system unique id representation
48-
private static final UUID SYS_UUID = new UUID(0L, 0L);
49-
// minecraft default types
50-
private static final Object AIR_ITEM_STACK = BukkitConverters.getItemStackConverter().getGeneric(
51-
new ItemStack(Material.AIR));
52-
private static Object DEFAULT_ENTITY_TYPES; // modern servers only (older servers will use an entity type id)
53-
// minecraft method accessors
54-
private static final MethodAccessor NON_NULL_LIST_CREATE = MinecraftReflection.getNonNullListCreateAccessor();
55-
// fast util mappings for paper relocation
56-
private static final Map<Class<?>, Constructor<?>> FAST_MAP_CONSTRUCTORS = new ConcurrentHashMap<>();
57-
58-
public static final InstanceProvider MINECRAFT_GENERATOR = type -> {
59-
if (type != null) {
60-
if (type == UUID.class) {
61-
return SYS_UUID;
62-
} else if (type.isEnum()) {
63-
return type.getEnumConstants()[0];
64-
} else if (type == MinecraftReflection.getItemStackClass()) {
65-
return AIR_ITEM_STACK;
66-
} else if (type == MinecraftReflection.getEntityTypes()) {
67-
if (DEFAULT_ENTITY_TYPES == null) {
68-
// try to initialize now
69-
try {
70-
DEFAULT_ENTITY_TYPES = BukkitConverters.getEntityTypeConverter().getGeneric(EntityType.AREA_EFFECT_CLOUD);
71-
} catch (Exception ignored) {
72-
// not available in this version of minecraft
73-
}
74-
}
75-
return DEFAULT_ENTITY_TYPES;
76-
} else if (type.isAssignableFrom(Map.class)) {
77-
Constructor<?> ctor = FAST_MAP_CONSTRUCTORS.computeIfAbsent(type, __ -> {
78-
try {
79-
String name = type.getCanonicalName();
80-
if (name != null && name.contains("it.unimi.fastutils")) {
81-
return Class.forName(name.substring(name.length() - 3) + "OpenHashMap").getConstructor();
82-
}
83-
} catch (Exception ignored) {}
84-
return null;
85-
});
86-
if (ctor != null) {
87-
try {
88-
return ctor.newInstance();
89-
} catch (ReflectiveOperationException ignored) {}
90-
}
91-
} else if (NON_NULL_LIST_CREATE != null && type == MinecraftReflection.getNonNullListClass()) {
92-
return NON_NULL_LIST_CREATE.invoke(null);
93-
}
94-
}
95-
96-
return null;
97-
};
9836

9937
/**
10038
* Standard default instance provider.
10139
*/
10240
public static final DefaultInstances DEFAULT = DefaultInstances.fromArray(
10341
PrimitiveGenerator.INSTANCE,
10442
CollectionGenerator.INSTANCE,
105-
MINECRAFT_GENERATOR
43+
MinecraftGenerator.INSTANCE
10644
);
10745

10846
/**
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package com.comphenix.protocol.reflect.instances;
2+
3+
import com.comphenix.protocol.reflect.accessors.MethodAccessor;
4+
import com.comphenix.protocol.utility.MinecraftReflection;
5+
import com.comphenix.protocol.wrappers.BukkitConverters;
6+
import org.bukkit.Material;
7+
import org.bukkit.entity.EntityType;
8+
import org.bukkit.inventory.ItemStack;
9+
10+
import java.lang.reflect.Constructor;
11+
import java.util.Map;
12+
import java.util.UUID;
13+
import java.util.concurrent.ConcurrentHashMap;
14+
15+
public class MinecraftGenerator {
16+
// system unique id representation
17+
private static final UUID SYS_UUID;
18+
// minecraft default types
19+
private static final Object AIR_ITEM_STACK;
20+
private static Object DEFAULT_ENTITY_TYPES; // modern servers only (older servers will use an entity type id)
21+
// minecraft method accessors
22+
private static final MethodAccessor NON_NULL_LIST_CREATE;
23+
// fast util mappings for paper relocation
24+
private static final Map<Class<?>, Constructor<?>> FAST_MAP_CONSTRUCTORS;
25+
26+
static {
27+
try {
28+
SYS_UUID = new UUID(0L, 0L);
29+
AIR_ITEM_STACK = BukkitConverters.getItemStackConverter().getGeneric(new ItemStack(Material.AIR));
30+
FAST_MAP_CONSTRUCTORS = new ConcurrentHashMap<>();
31+
NON_NULL_LIST_CREATE = MinecraftReflection.getNonNullListCreateAccessor();
32+
} catch (Throwable ex) {
33+
throw new RuntimeException("Failed to create static fields in MinecraftGenerator", ex);
34+
}
35+
}
36+
37+
public static final InstanceProvider INSTANCE = type -> {
38+
if (type != null) {
39+
if (type == UUID.class) {
40+
return SYS_UUID;
41+
} else if (type.isEnum()) {
42+
return type.getEnumConstants()[0];
43+
} else if (type == MinecraftReflection.getItemStackClass()) {
44+
return AIR_ITEM_STACK;
45+
} else if (type == MinecraftReflection.getEntityTypes()) {
46+
if (DEFAULT_ENTITY_TYPES == null) {
47+
// try to initialize now
48+
try {
49+
DEFAULT_ENTITY_TYPES = BukkitConverters.getEntityTypeConverter().getGeneric(EntityType.AREA_EFFECT_CLOUD);
50+
} catch (Exception ignored) {
51+
// not available in this version of minecraft
52+
}
53+
}
54+
return DEFAULT_ENTITY_TYPES;
55+
} else if (type.isAssignableFrom(Map.class)) {
56+
Constructor<?> ctor = FAST_MAP_CONSTRUCTORS.computeIfAbsent(type, __ -> {
57+
try {
58+
String name = type.getCanonicalName();
59+
if (name != null && name.contains("it.unimi.fastutils")) {
60+
return Class.forName(name.substring(name.length() - 3) + "OpenHashMap").getConstructor();
61+
}
62+
} catch (Exception ignored) {}
63+
return null;
64+
});
65+
if (ctor != null) {
66+
try {
67+
return ctor.newInstance();
68+
} catch (ReflectiveOperationException ignored) {}
69+
}
70+
} else if (NON_NULL_LIST_CREATE != null && type == MinecraftReflection.getNonNullListClass()) {
71+
return NON_NULL_LIST_CREATE.invoke(null);
72+
}
73+
}
74+
75+
return null;
76+
};
77+
}

src/test/java/com/comphenix/protocol/BukkitInitialization.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.mojang.bridge.game.GameVersion;
99

1010
import net.minecraft.SharedConstants;
11+
import net.minecraft.core.IRegistry;
1112
import net.minecraft.server.DispenserRegistry;
1213
import net.minecraft.server.level.WorldServer;
1314

@@ -55,18 +56,24 @@ private void initialize() {
5556
// Denote that we're done
5657
initialized = true;
5758

58-
initializePackage();
59-
6059
try {
6160
LogManager.getLogger();
6261
} catch (Throwable ex) {
6362
// Happens only on my Jenkins, but if it errors here it works when it matters
6463
ex.printStackTrace();
6564
}
6665

66+
initializePackage();
67+
6768
SharedConstants.a();
6869
DispenserRegistry.init();
6970

71+
try {
72+
IRegistry.class.getName();
73+
} catch (Throwable ex) {
74+
ex.printStackTrace();
75+
}
76+
7077
// Mock the server object
7178
Server mockedServer = mock(Server.class);
7279

src/test/java/com/comphenix/protocol/wrappers/CloningTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ public class CloningTest {
1212

1313
@BeforeClass
1414
public static void initializeBukkit() {
15-
BukkitInitialization.initializePackage();
15+
BukkitInitialization.initializeItemMeta();
1616
}
1717

1818
@Test

src/test/java/com/comphenix/protocol/wrappers/PlayerInfoDataTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public class PlayerInfoDataTest {
3434

3535
@BeforeClass
3636
public static void initializeBukkit() {
37-
BukkitInitialization.initializePackage();
37+
BukkitInitialization.initializeItemMeta();
3838
}
3939

4040
@Test

src/test/java/com/comphenix/protocol/wrappers/nbt/NbtCompoundTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class NbtCompoundTest {
2828

2929
@BeforeClass
3030
public static void initializeBukkit() {
31-
BukkitInitialization.initializePackage();
31+
BukkitInitialization.initializeItemMeta();
3232
}
3333

3434
@Test

src/test/java/com/comphenix/protocol/wrappers/nbt/io/NbtConfigurationSerializerTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class NbtConfigurationSerializerTest {
1414

1515
@BeforeClass
1616
public static void initializeBukkit() {
17-
BukkitInitialization.initializePackage();
17+
BukkitInitialization.initializeItemMeta();
1818
}
1919

2020
@Test

0 commit comments

Comments
 (0)