Clear old advancement data

This commit is contained in:
fullwall 2018-05-27 19:59:56 +08:00
parent fd413fadb8
commit 3f035ad38f
2 changed files with 17 additions and 19 deletions

View File

@ -4,7 +4,6 @@ import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.net.Socket;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@ -48,7 +47,6 @@ import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_12_R1.AttributeInstance;
import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.ChatComponentText;
import net.minecraft.server.v1_12_R1.Criterion;
import net.minecraft.server.v1_12_R1.DamageSource;
import net.minecraft.server.v1_12_R1.Entity;
import net.minecraft.server.v1_12_R1.EntityHuman;
@ -322,6 +320,8 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
navigation = new PlayerNavigation(this, world);
NMS.setStepHeight(getBukkitEntity(), 1); // the default (0) breaks step climbing
setSkinFlags((byte) 0xFF);
EmptyAdvancementDataPlayer.clear(this.getAdvancementData());
try {
ADVANCEMENT_DATA_PLAYER.set(this,
new EmptyAdvancementDataPlayer(minecraftServer, CitizensAPI.getDataFolder().getParentFile(), this));
@ -539,8 +539,6 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
}
private static Field ADVANCEMENT_DATA_PLAYER = NMS.getField(EntityPlayer.class, "bY");
private static final String[][] EMPTY_PROGRESS = new String[0][0];
private static final Map<String, Criterion> EMPTY_PROGRESS_MAP = Collections.emptyMap();
private static final float EPSILON = 0.005F;
private static final Location LOADED_LOCATION = new Location(null, 0, 0, 0);
static {

View File

@ -17,10 +17,6 @@ public class EmptyAdvancementDataPlayer extends AdvancementDataPlayer {
this.b();
}
@Override
public void a() {
}
@Override
public void a(Advancement advancement) {
}
@ -31,17 +27,7 @@ public class EmptyAdvancementDataPlayer extends AdvancementDataPlayer {
@Override
public void b() {
this.a();
this.data.clear();
try {
((Set) G.get(this)).clear();
((Set) H.get(this)).clear();
((Set) I.get(this)).clear();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
clear(this);
}
@Override
@ -67,6 +53,20 @@ public class EmptyAdvancementDataPlayer extends AdvancementDataPlayer {
return false;
}
public static void clear(AdvancementDataPlayer data) {
data.a();
data.data.clear();
try {
((Set<?>) G.get(data)).clear();
((Set<?>) H.get(data)).clear();
((Set<?>) I.get(data)).clear();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
private static final Field G = NMS.getField(AdvancementDataPlayer.class, "g");
private static final Field H = NMS.getField(AdvancementDataPlayer.class, "h");
private static final Field I = NMS.getField(AdvancementDataPlayer.class, "i");