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;
|
2024-09-01 17:29:26 +02:00
|
|
|
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;
|
2024-09-01 17:29:26 +02:00
|
|
|
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 {
|
2024-09-01 17:29:26 +02:00
|
|
|
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() {
|
2024-09-01 05:50:32 +02:00
|
|
|
super.stopListening();
|
2021-12-01 15:56:22 +01:00
|
|
|
}
|
|
|
|
|
2024-09-01 17:29:26 +02: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");
|
|
|
|
}
|