use of net.minecraft.advancements.Advancement in project SpongeCommon by SpongePowered.
the class MixinCriterionProgress method grant.
@Override
public Instant grant() {
if (this.obtained != null) {
return this.obtained.toInstant();
}
final Advancement advancement = (Advancement) ((org.spongepowered.api.advancement.AdvancementProgress) this.advancementProgress).getAdvancement();
((IMixinAdvancementProgress) this.advancementProgress).getPlayerAdvancements().grantCriterion(advancement, getCriterion().getName());
return this.obtained.toInstant();
}
use of net.minecraft.advancements.Advancement in project SpongeCommon by SpongePowered.
the class MixinCriterionProgress method revoke.
@Override
public Optional<Instant> revoke() {
if (this.obtained == null) {
return Optional.empty();
}
final Instant instant = this.obtained.toInstant();
final Advancement advancement = (Advancement) ((org.spongepowered.api.advancement.AdvancementProgress) this.advancementProgress).getAdvancement();
((IMixinAdvancementProgress) this.advancementProgress).getPlayerAdvancements().revokeCriterion(advancement, getCriterion().getName());
return Optional.of(instant);
}
use of net.minecraft.advancements.Advancement in project SpongeCommon by SpongePowered.
the class MixinICriterionTriggerListener method onGrantCriterion.
@SuppressWarnings("unchecked")
@Inject(method = "grantCriterion", at = @At("HEAD"), cancellable = true)
private void onGrantCriterion(PlayerAdvancements playerAdvancements, CallbackInfo ci) {
final org.spongepowered.api.advancement.Advancement advancement = (org.spongepowered.api.advancement.Advancement) this.advancement;
AdvancementCriterion advancementCriterion = (AdvancementCriterion) this.advancement.getCriteria().get(this.criterionName);
final IMixinCriterion mixinCriterion = (IMixinCriterion) advancementCriterion;
if (mixinCriterion.getScoreCriterion() != null) {
advancementCriterion = mixinCriterion.getScoreCriterion();
}
// Sponge filters are always handled in the trigger method
if (!(this.criterionInstance instanceof SpongeFilteredTrigger)) {
final FilteredTrigger filteredTrigger = (FilteredTrigger) this.criterionInstance;
if (filteredTrigger.getType() instanceof SpongeTrigger) {
final Cause cause = Sponge.getCauseStackManager().getCurrentCause();
final Player player = ((IMixinPlayerAdvancements) playerAdvancements).getPlayer();
final TypeToken typeToken = TypeToken.of(filteredTrigger.getType().getConfigurationType());
final CriterionEvent.Trigger event = SpongeEventFactory.createCriterionEventTrigger(cause, advancement, advancementCriterion, typeToken, player, filteredTrigger, true);
SpongeImpl.postEvent(event);
if (!event.getResult()) {
ci.cancel();
return;
}
}
}
SpongeImpl.getCauseStackManager().pushCause(this.criterionInstance);
// the score be increased by one.
if (advancementCriterion instanceof ScoreAdvancementCriterion) {
((IMixinPlayerAdvancements) playerAdvancements).getPlayer().getProgress(advancement).get((ScoreAdvancementCriterion) advancementCriterion).get().add(1);
ci.cancel();
SpongeImpl.getCauseStackManager().popCause();
}
}
use of net.minecraft.advancements.Advancement in project Wizardry by TeamWizardry.
the class BlockFluidMana method onEntityUpdate.
@SubscribeEvent
public static void onEntityUpdate(EntityUpdateEvent event) {
Entity entityIn = event.getEntity();
BlockPos pos = entityIn.getPosition();
World world = entityIn.world;
IBlockState state = world.getBlockState(pos);
if (state.getBlock() == ModFluids.MANA.getActualBlock()) {
// Fizz all entities in the pool
if (world.isRemote)
run(world, pos, state.getBlock(), entityIn, entity -> true, entity -> LibParticles.FIZZING_AMBIENT(world, entityIn.getPositionVector()));
// Nullify gravity of player
if (!world.isRemote)
run(world, pos, state.getBlock(), entityIn, entity -> entity instanceof EntityLivingBase, entity -> {
((EntityLivingBase) entityIn).addPotionEffect(new PotionEffect(ModPotions.NULLIFY_GRAVITY, 100, 0, true, false));
if (RandUtil.nextInt(50) == 0)
entity.attackEntityFrom(DamageSourceMana.INSTANCE, 0.1f);
});
// Subtract player food
run(world, pos, state.getBlock(), entityIn, entity -> entity instanceof EntityPlayer, entity -> {
if (!world.isRemote) {
MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
Advancement advancement = server.getAdvancementManager().getAdvancement(new ResourceLocation(Wizardry.MODID, "advancements/advancement_crunch.json"));
if (advancement == null)
return;
AdvancementProgress progress = ((EntityPlayerMP) entity).getAdvancements().getProgress(advancement);
for (String s : progress.getRemaningCriteria()) {
((EntityPlayerMP) entity).getAdvancements().grantCriterion(advancement, s);
}
}
if (!((EntityPlayer) entity).capabilities.isCreativeMode && RandUtil.nextInt(50) == 0)
((EntityPlayer) entity).getFoodStats().addExhaustion(1f);
});
// Explode explodable items
run(world, pos, state.getBlock(), entityIn, entity -> entity instanceof EntityItem && ((EntityItem) entity).getItem().getItem() instanceof IExplodable, entity -> FluidTracker.INSTANCE.addManaCraft(entity.world, entity.getPosition(), new ManaRecipes.ExplodableCrafter()));
}
run(world, pos, state.getBlock(), entityIn, entity -> entity instanceof EntityItem && ManaRecipes.RECIPES.keySet().stream().anyMatch(item -> item.apply(((EntityItem) entity).getItem())), entity -> {
List<Map.Entry<Ingredient, FluidRecipeLoader.FluidCrafter>> allEntries = ManaRecipes.RECIPES.entries().stream().filter(entry -> entry.getValue().getFluid().getBlock() == state.getBlock() && entry.getKey().apply(((EntityItem) entity).getItem())).collect(Collectors.toList());
allEntries.forEach(crafter -> FluidTracker.INSTANCE.addManaCraft(entity.world, entity.getPosition(), crafter.getValue().build()));
});
}
use of net.minecraft.advancements.Advancement in project SpongeVanilla by SpongePowered.
the class MixinAdvancementManager method onLoadAdvancements.
@Redirect(method = "reload", at = @At(value = "INVOKE", target = "Lnet/minecraft/advancements/AdvancementList;loadAdvancements(Ljava/util/Map;)V"))
private void onLoadAdvancements(AdvancementList advancementList, Map<ResourceLocation, Advancement.Builder> advancements) {
if (!SpongeImpl.isInitialized()) {
return;
}
for (PluginContainer pluginContainer : Sponge.getPluginManager().getPlugins()) {
// Skip the minecraft advancements
if (pluginContainer.getId().equals("minecraft")) {
continue;
}
final Optional<Path> optSource = pluginContainer.getSource();
if (optSource.isPresent()) {
final Path source = optSource.get();
final String base = "assets/" + pluginContainer.getId() + "/advancements";
Path root;
if (Files.isDirectory(source)) {
root = source.resolve(base);
} else {
try {
final FileSystem fileSystem = FileSystems.newFileSystem(source, null);
root = fileSystem.getPath("/" + base);
} catch (IOException e) {
SpongeImpl.getLogger().error("Error loading FileSystem from jar: ", e);
continue;
}
}
if (!Files.exists(root)) {
continue;
}
try {
Files.walk(root).forEach(path -> {
if (!FilenameUtils.getExtension(path.getFileName().toString()).equals("json")) {
return;
}
final Path relPath = root.relativize(path);
final String id = FilenameUtils.removeExtension(relPath.toString()).replaceAll("\\\\", "/");
final ResourceLocation resourceLocation = new ResourceLocation(pluginContainer.getId(), id);
if (!advancements.containsKey(resourceLocation)) {
try (BufferedReader reader = Files.newBufferedReader(path)) {
final Advancement.Builder advancementBuilder = JsonUtils.fromJson(GSON, reader, Advancement.Builder.class);
advancements.put(resourceLocation, advancementBuilder);
} catch (IOException e) {
SpongeImpl.getLogger().error("Failed to read advancement " + resourceLocation + " from path " + path, e);
}
}
});
} catch (IOException e) {
SpongeImpl.getLogger().error("Failed to walk path: " + root, e);
}
}
}
advancementList.loadAdvancements(advancements);
}
Aggregations