use of net.minecraft.advancements.Advancement in project BuildCraft by BuildCraft.
the class AdvancementUtil method unlockAdvancement.
public static void unlockAdvancement(EntityPlayer player, ResourceLocation advancementName) {
if (player instanceof EntityPlayerMP) {
EntityPlayerMP playerMP = (EntityPlayerMP) player;
AdvancementManager advancementManager = playerMP.getServerWorld().getAdvancementManager();
if (advancementManager == null) {
// Because this *can* happen
return;
}
Advancement advancement = advancementManager.getAdvancement(advancementName);
if (advancement != null) {
// never assume the advancement exists, we create them but they are removable by datapacks
playerMP.getAdvancements().grantCriterion(advancement, "code_trigger");
} else if (UNKNOWN_ADVANCEMENTS.add(advancementName)) {
BCLog.logger.warn("[lib.advancement] Attempted to trigger undefined advancement: " + advancementName);
}
}
}
use of net.minecraft.advancements.Advancement in project Cavern2 by kegare.
the class PlayerHelper method grantCriterion.
public static boolean grantCriterion(EntityPlayer entityPlayer, String key, String criterion) {
if (entityPlayer == null || !(entityPlayer instanceof EntityPlayerMP)) {
return false;
}
EntityPlayerMP player = (EntityPlayerMP) entityPlayer;
Advancement advancement = player.mcServer.getAdvancementManager().getAdvancement(CaveUtils.getKey(key));
return advancement != null && player.getAdvancements().grantCriterion(advancement, criterion);
}
use of net.minecraft.advancements.Advancement in project takumicraft by TNTModders.
the class TakumiUtils method getAdvancementUnlocked.
@SideOnly(Side.CLIENT)
public static boolean getAdvancementUnlocked(ResourceLocation location) {
ClientAdvancementManager manager = Minecraft.getMinecraft().player.connection.getAdvancementManager();
try {
Field field = TakumiASMNameMap.getField(ClientAdvancementManager.class, "advancementToProgress");
field.setAccessible(true);
Map<Advancement, AdvancementProgress> advancementToProgress = (Map<Advancement, AdvancementProgress>) field.get(manager);
if (advancementToProgress.containsKey(manager.getAdvancementList().getAdvancement(location))) {
return advancementToProgress.get(manager.getAdvancementList().getAdvancement(location)).isDone();
}
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
}
return false;
}
use of net.minecraft.advancements.Advancement in project SpongeCommon by SpongePowered.
the class MixinAdvancement method onInit.
@SuppressWarnings("ConstantConditions")
@Inject(method = "<init>", at = @At("RETURN"))
private void onInit(ResourceLocation id, @Nullable Advancement parentIn, @Nullable DisplayInfo displayIn, AdvancementRewards rewardsIn, Map<String, Criterion> criteriaIn, String[][] requirementsIn, CallbackInfo ci) {
if (displayIn != null) {
((IMixinDisplayInfo) displayIn).setAdvancement(this);
}
String path = id.getResourcePath();
this.name = path.replace('/', '_');
this.spongeId = id.getResourceDomain() + ':' + this.name;
if (displayIn != null) {
this.name = SpongeTexts.toPlain(displayIn.getTitle());
}
if (!AdvancementRegistryModule.INSIDE_REGISTER_EVENT) {
AdvancementRegistryModule.getInstance().registerAdditionalCatalog(this);
} else {
// Wait to set the parent until the advancement is registered
this.tempParent = parentIn;
this.parent = SpongeAdvancementBuilder.DUMMY_ROOT_ADVANCEMENT;
}
// This is only possible when REGISTER_ADVANCEMENTS_ON_CONSTRUCT is true
if (parentIn == null) {
// Remove the root suffix from json file tree ids
if (path.endsWith("/root")) {
path = path.substring(0, path.lastIndexOf('/'));
}
path = path.replace('/', '_');
String name = path;
if (displayIn != null) {
name = this.name;
}
path = id.getResourceDomain() + ':' + path;
this.tree = new SpongeAdvancementTree(this, path, name);
AdvancementTreeRegistryModule.getInstance().registerAdditionalCatalog(this.tree);
} else {
this.tree = ((org.spongepowered.api.advancement.Advancement) parentIn).getTree().orElse(null);
}
this.text = SpongeTexts.toText(this.displayText);
final ImmutableList.Builder<Text> toastText = ImmutableList.builder();
if (this.display != null) {
final FrameType frameType = this.display.getFrame();
toastText.add(Text.builder(new SpongeTranslation("advancements.toast." + frameType.getName())).format(((AdvancementType) (Object) frameType).getTextFormat()).build());
toastText.add(getDisplayInfo().get().getTitle());
} else {
toastText.add(Text.of("Unlocked advancement"));
toastText.add(Text.of(getId()));
}
this.toastText = toastText.build();
final Set<String> scoreCriteria = new HashSet<>();
final Map<String, ICriterion> criterionMap = new HashMap<>();
for (Map.Entry<String, Criterion> entry : new HashMap<>(criteriaIn).entrySet()) {
final IMixinCriterion mixinCriterion = (IMixinCriterion) entry.getValue();
final ICriterion criterion;
if (mixinCriterion.getScoreGoal() != null) {
criterion = new SpongeScoreCriterion(entry.getKey(), mixinCriterion.getScoreGoal(), entry.getValue().getCriterionInstance());
scoreCriteria.add(entry.getKey());
((SpongeScoreCriterion) criterion).internalCriteria.forEach(criterion1 -> criteriaIn.put(criterion1.getName(), (Criterion) criterion1));
} else {
criterion = (ICriterion) mixinCriterion;
((IMixinCriterion) criterion).setName(entry.getKey());
}
criterionMap.put(entry.getKey(), criterion);
}
final List<String[]> entries = new ArrayList<>();
final List<AdvancementCriterion> andCriteria = new ArrayList<>();
for (String[] array : requirementsIn) {
final Set<AdvancementCriterion> orCriteria = new HashSet<>();
for (String name : array) {
final ICriterion criterion = criterionMap.get(name);
if (criterion instanceof SpongeScoreCriterion) {
((SpongeScoreCriterion) criterion).internalCriteria.forEach(criterion1 -> entries.add(new String[] { criterion1.getName() }));
} else {
entries.add(new String[] { criterion.getName() });
}
orCriteria.add(criterion);
}
andCriteria.add(OrCriterion.of(orCriteria));
}
this.criterion = AndCriterion.of(andCriteria);
if (!scoreCriteria.isEmpty()) {
scoreCriteria.forEach(criteriaIn::remove);
this.criteria = ImmutableMap.copyOf(criteriaIn);
this.requirements = entries.toArray(new String[entries.size()][]);
}
}
use of net.minecraft.advancements.Advancement in project SpongeCommon by SpongePowered.
the class MixinPlayerAdvancements method onUnregisterListenersGetProgress.
@Nullable
@Redirect(method = "unregisterListeners", at = @At(value = "INVOKE", ordinal = 0, target = "Lnet/minecraft/advancements/AdvancementProgress;getCriterionProgress(Ljava/lang/String;)Lnet/minecraft/advancements/CriterionProgress;"))
private CriterionProgress onUnregisterListenersGetProgress(AdvancementProgress advancementProgress, String criterion) {
final org.spongepowered.api.advancement.Advancement advancement = ((org.spongepowered.api.advancement.AdvancementProgress) advancementProgress).getAdvancement();
final AdvancementCriterion advancementCriterion = (AdvancementCriterion) ((Advancement) advancement).getCriteria().get(criterion);
final IMixinCriterion mixinCriterion = (IMixinCriterion) advancementCriterion;
// Only remove the trigger once the goal is reached
if (mixinCriterion.getScoreCriterion() != null && !((org.spongepowered.api.advancement.AdvancementProgress) advancementProgress).get(mixinCriterion.getScoreCriterion()).get().achieved()) {
return null;
}
return advancementProgress.getCriterionProgress(criterion);
}
Aggregations