Be more aggressive in blocking achievement earning

This commit is contained in:
fullwall 2018-04-02 00:46:45 +08:00
parent fc1d7eab58
commit a8ec654753
3 changed files with 73 additions and 7 deletions

View File

@ -1,6 +1,8 @@
package net.citizensnpcs.nms.v1_12_R1.entity;
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;
@ -30,6 +32,7 @@ import net.citizensnpcs.api.trait.trait.Inventory;
import net.citizensnpcs.nms.v1_12_R1.network.EmptyNetHandler;
import net.citizensnpcs.nms.v1_12_R1.network.EmptyNetworkManager;
import net.citizensnpcs.nms.v1_12_R1.network.EmptySocket;
import net.citizensnpcs.nms.v1_12_R1.util.EmptyAdvancementDataPlayer;
import net.citizensnpcs.nms.v1_12_R1.util.NMSImpl;
import net.citizensnpcs.nms.v1_12_R1.util.PlayerControllerJump;
import net.citizensnpcs.nms.v1_12_R1.util.PlayerControllerLook;
@ -42,7 +45,6 @@ import net.citizensnpcs.npc.skin.SkinnableEntity;
import net.citizensnpcs.trait.Gravity;
import net.citizensnpcs.util.NMS;
import net.citizensnpcs.util.Util;
import net.minecraft.server.v1_12_R1.AdvancementProgress;
import net.minecraft.server.v1_12_R1.AttributeInstance;
import net.minecraft.server.v1_12_R1.BlockPosition;
import net.minecraft.server.v1_12_R1.ChatComponentText;
@ -123,11 +125,6 @@ public class EntityHumanNPC extends EntityPlayer implements NPCHolder, Skinnable
super.B_();
if (npc == null)
return;
if (this.getAdvancementData().data != null) {
for (AdvancementProgress progress : this.getAdvancementData().data.values()) {
progress.a(EMPTY_PROGRESS_MAP, EMPTY_PROGRESS);
}
}
this.noclip = isSpectator();
if (updateCounter + 1 > Setting.PACKET_UPDATE_DELAY.asInt()) {
updateEffects = true;
@ -325,6 +322,14 @@ 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);
try {
ADVANCEMENT_DATA_PLAYER.set(this,
new EmptyAdvancementDataPlayer(minecraftServer, CitizensAPI.getDataFolder().getParentFile(), this));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
@Override
@ -533,8 +538,16 @@ 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 {
Field modifiersField = NMS.getField(Field.class, "modifiers");
try {
modifiersField.setInt(ADVANCEMENT_DATA_PLAYER, ADVANCEMENT_DATA_PLAYER.getModifiers() & ~Modifier.FINAL);
} catch (Exception e) {
}
}
}

View File

@ -0,0 +1,54 @@
package net.citizensnpcs.nms.v1_12_R1.util;
import java.io.File;
import net.minecraft.server.v1_12_R1.Advancement;
import net.minecraft.server.v1_12_R1.AdvancementDataPlayer;
import net.minecraft.server.v1_12_R1.AdvancementProgress;
import net.minecraft.server.v1_12_R1.EntityPlayer;
import net.minecraft.server.v1_12_R1.MinecraftServer;
public class EmptyAdvancementDataPlayer extends AdvancementDataPlayer {
public EmptyAdvancementDataPlayer(MinecraftServer minecraftserver, File file, EntityPlayer entityplayer) {
super(minecraftserver, file, entityplayer);
}
@Override
public void a() {
}
@Override
public void a(Advancement advancement) {
}
@Override
public void a(EntityPlayer entityplayer) {
}
@Override
public void b() {
}
@Override
public void b(EntityPlayer entityplayer) {
}
@Override
public void c() {
}
@Override
public AdvancementProgress getProgress(Advancement advancement) {
return new AdvancementProgress();
}
@Override
public boolean grantCriteria(Advancement advancement, String s) {
return false;
}
@Override
public boolean revokeCritera(Advancement advancement, String s) {
return false;
}
}

View File

@ -1019,7 +1019,6 @@ public class NMSImpl implements NMSBridge {
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(null, ENTITY_REGISTRY.getWrapped());
} catch (Exception e) {
}
}