Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@ public final class CacheRegistry {

.withCategory(CacheCategory.ENTITY)
.withAdditionalData("monster.warden")
.withClassName("EntityWarden"))).load();
.withClassName("Warden"))).load();

public static final Class<?> ENTITY_BEE_CLASS = (new TypeCache.BaseCache.ClazzLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))

Expand Down Expand Up @@ -591,6 +591,85 @@ public final class CacheRegistry {
.withCategory(CacheCategory.ENTITY)
.withClassName(ENTITY_HUMAN_CLASS)
.withExpectResult(GameProfile.class));

public static final String PLAYER_MODEL_PARTS_BIN_NAME;
static {
switch (Utils.getBukkitPackage()){
case "v1_15R1":
case "v1_15_R1":
case "v1_15R2":
case "v1_15_R2":
case "v1_16R1":
case "v1_16_R1":
PLAYER_MODEL_PARTS_BIN_NAME = "bq";
break;
case "v1_16R2":
case "v1_16_R2":
case "v1_16R3":
case "v1_16_R3":
case "v1_16R4":
case "v1_16_R4":
case "v1_16R5":
case "v1_16_R5":
PLAYER_MODEL_PARTS_BIN_NAME = "bi";
break;
case "v1_17R1":
case "v1_17_R1":
PLAYER_MODEL_PARTS_BIN_NAME = "bP";
break;
case "v1_18R1":
case "v1_18_R1":
PLAYER_MODEL_PARTS_BIN_NAME = "bQ";
break;
case "v1_18R2":
case "v1_18_R2":
//noinspection DuplicateBranchesInSwitch
PLAYER_MODEL_PARTS_BIN_NAME = "bP";
break;
case "v1_19R1":
case "v1_19_R1":
case "v1_19R2":
case "v1_19_R2":
case "v1_19R3":
case "v1_19_R3":
PLAYER_MODEL_PARTS_BIN_NAME = "bO";
break;
case "v1_19R4":
case "v1_19_R4":
PLAYER_MODEL_PARTS_BIN_NAME = "bJ";
break;
case "v1_20R1":
case "v1_20_R1":
PLAYER_MODEL_PARTS_BIN_NAME = "bL";
break;
case "v1_20R2":
case "v1_20_R2":
case "v1_20R3":
case "v1_20_R3":
PLAYER_MODEL_PARTS_BIN_NAME = "bM";
break;
default:
PLAYER_MODEL_PARTS_BIN_NAME = "PLAYER_MODEL_PARTS";
break;
}
if (PLAYER_MODEL_PARTS_BIN_NAME != null){
GET_PLAYER_MODEL_PARTS = new TypeCache.BaseCache.FieldLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))

.withCategory(CacheCategory.ENTITY)
.withFieldName(PLAYER_MODEL_PARTS_BIN_NAME)
.withClassName(ENTITY_HUMAN_CLASS));
} else {
GET_PLAYER_MODEL_PARTS = null;
}
}
public static final TypeCache.BaseCache<Field> GET_PLAYER_MODEL_PARTS;
public static final TypeCache.BaseCache<Method> GET_TRACKED_DATA_ID = new TypeCache.BaseCache.MethodLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))

.withCategory(CacheCategory.SYNCHER)
.withClassName(DATA_WATCHER_OBJECT)
.withMethodName("getId")
.withMethodName("a")
.withExpectResult(int.class));

public static final TypeCache.BaseCache<Method> GET_ENTITY_ID = new TypeCache.BaseCache.MethodLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))

Expand Down Expand Up @@ -753,14 +832,14 @@ public final class CacheRegistry {
public static final TypeCache.BaseCache<Method> GET_DATAWATCHER_B_LIST =
new TypeCache.BaseCache.MethodLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))
.withCategory(CacheCategory.PACKET)
.withMethodName("c")
.withMethodName("c")
.withClassName(DATA_WATCHER_CLASS));

public static final TypeCache.BaseCache<Field> PLAYER_CONNECTION_FIELD = new TypeCache.BaseCache.FieldLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))

.withCategory(CacheCategory.SERVER_LEVEL)
.withClassName(ENTITY_PLAYER_CLASS)
.withFieldName((Utils.BUKKIT_VERSION > 16) ? "b" : "playerConnection"));
.withFieldName((Utils.BUKKIT_VERSION > 16) ? ((Utils.BUKKIT_VERSION >= 20) ? "c" : "b") : "playerConnection"));

public static final TypeCache.BaseCache<Field> NETWORK_MANAGER_FIELD = new TypeCache.BaseCache.FieldLoader((new TypeCache.CacheBuilder(CachePackage.MINECRAFT_SERVER))

Expand Down
21 changes: 18 additions & 3 deletions bukkit/src/main/java/io/github/gonalez/znpcs/npc/NPCSkin.java
Original file line number Diff line number Diff line change
@@ -1,14 +1,16 @@
package io.github.gonalez.znpcs.npc;

import io.github.gonalez.znpcs.cache.CacheRegistry;
import io.github.gonalez.znpcs.skin.SkinFetcherBuilder;
import io.github.gonalez.znpcs.skin.SkinFetcherResult;
import io.github.gonalez.znpcs.utility.Utils;

import java.util.Objects;
import java.util.logging.Level;

public class NPCSkin {
private static final String[] EMPTY_ARRAY = new String[] { "", "" };

private static final int LAYER_INDEX = SkinLayerValues.findLayerByVersion();

private final String texture;

private final String signature;
Expand All @@ -29,7 +31,7 @@ public String getSignature() {
}

public int getLayerIndex() {
return LAYER_INDEX;
return SkinLayerValues.findLayerByVersion();
}

public static NPCSkin forValues(String... values) {
Expand Down Expand Up @@ -58,6 +60,19 @@ enum SkinLayerValues {
}

static int findLayerByVersion() {
try{
if (CacheRegistry.GET_PLAYER_MODEL_PARTS != null){
//for static field's null is okay
Object playerModelParts = CacheRegistry.GET_PLAYER_MODEL_PARTS.load().get(null);
return (int) CacheRegistry.GET_TRACKED_DATA_ID.load().invoke(Objects.requireNonNull(playerModelParts));
}else{
((java.util.logging.Logger)org.bukkit.Bukkit.getServer().getLogger()).log(Level.INFO, "CacheRegistry.GET_PLAYER_MODEL_PARTS was null. " + Utils.getBukkitPackage()+ ", " +Utils.BUKKIT_VERSION);
}
}catch (Throwable throwable){
org.bukkit.Bukkit.getServer().getLogger().log(Level.INFO, "Could not get Dynamic Layer Id of PlayerModel entitydata", new RuntimeException(throwable));
} //Some error occurred. maybe the field did not exist?
org.bukkit.Bukkit.getServer().getLogger().log(Level.INFO, "Falling back to hardcoded values.");

int value = V8.layerValue;
for (SkinLayerValues skinLayerValue : values()) {
if (Utils.BUKKIT_VERSION >= skinLayerValue.minVersion)
Expand Down
Empty file modified gradlew
100644 → 100755
Empty file.