Citizens2/v1_18_R2/src/main/java/net/citizensnpcs/nms/v1_18_R2/util/EmptyAdvancementDataPlayer.java

95 lines
2.7 KiB
Java
Raw Permalink Normal View History

2022-03-01 13:54:08 +01:00
package net.citizensnpcs.nms.v1_18_R2.util;
2021-12-01 15:56:22 +01:00
import java.lang.invoke.MethodHandle;
import java.util.Collection;
import java.util.Collections;
2021-12-01 15:56:22 +01:00
import java.util.Set;
2023-02-22 17:06:13 +01:00
2021-12-01 15:56:22 +01:00
import com.mojang.datafixers.DataFixer;
2023-02-22 17:06:13 +01:00
2022-01-22 14:08:55 +01:00
import net.citizensnpcs.api.CitizensAPI;
2021-12-01 15:56:22 +01:00
import net.citizensnpcs.util.NMS;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementProgress;
import net.minecraft.resources.ResourceLocation;
2021-12-01 15:56:22 +01:00
import net.minecraft.server.PlayerAdvancements;
import net.minecraft.server.ServerAdvancementManager;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.server.players.PlayerList;
public class EmptyAdvancementDataPlayer extends PlayerAdvancements {
public EmptyAdvancementDataPlayer(DataFixer datafixer, PlayerList playerlist, ServerPlayer entityplayer) {
super(datafixer, playerlist, new EmptyServerAdvancementManager(), CitizensAPI.getDataFolder(), entityplayer);
2021-12-01 15:56:22 +01:00
this.save();
}
@Override
public boolean award(Advancement advancement, String s) {
return false;
}
@Override
public void flushDirty(ServerPlayer entityplayer) {
}
@Override
public AdvancementProgress getOrStartProgress(Advancement advancement) {
return new AdvancementProgress();
}
@Override
public boolean revoke(Advancement advancement, String s) {
return false;
}
@Override
public void save() {
clear(this);
}
@Override
public void setPlayer(ServerPlayer entityplayer) {
}
@Override
public void setSelectedTab(Advancement advancement) {
}
@Override
public void stopListening() {
super.stopListening();
2021-12-01 15:56:22 +01:00
}
private static class EmptyServerAdvancementManager extends ServerAdvancementManager {
public EmptyServerAdvancementManager() {
super(null);
}
@Override
public Advancement getAdvancement(ResourceLocation minecraftkey) {
return null;
}
@Override
public Collection<Advancement> getAllAdvancements() {
return Collections.emptyList();
}
}
2021-12-01 15:56:22 +01:00
public static void clear(PlayerAdvancements data) {
data.stopListening();
data.advancements.clear();
try {
((Set<?>) I.invoke(data)).clear();
((Set<?>) J.invoke(data)).clear();
((Set<?>) K.invoke(data)).clear();
} catch (Throwable e) {
e.printStackTrace();
}
}
private static final MethodHandle I = NMS.getGetter(PlayerAdvancements.class, "i");
private static final MethodHandle J = NMS.getGetter(PlayerAdvancements.class, "j");
private static final MethodHandle K = NMS.getGetter(PlayerAdvancements.class, "k");
}