Skip to content
This repository has been archived by the owner on Apr 12, 2022. It is now read-only.

Commit

Permalink
Improve Advancements
Browse files Browse the repository at this point in the history
They are now built in order. It also wanrs you if they change on reload. Merged the grant and revoke commands into one.
  • Loading branch information
Xenmai committed Feb 7, 2018
1 parent e39b046 commit 54a94e3
Show file tree
Hide file tree
Showing 6 changed files with 164 additions and 171 deletions.
Expand Up @@ -38,6 +38,7 @@
import org.spongepowered.api.event.Listener;
import org.spongepowered.api.event.cause.Cause;
import org.spongepowered.api.event.cause.EventContext;
import org.spongepowered.api.event.game.state.GamePostInitializationEvent;
import org.spongepowered.api.event.game.state.GamePreInitializationEvent;
import org.spongepowered.api.event.game.state.GameStoppedEvent;
import org.spongepowered.api.plugin.Plugin;
Expand Down Expand Up @@ -149,20 +150,19 @@ public void onServerStart(GamePreInitializationEvent event) {
Denizen2Core.register(new RememberInventoryCommand());
// Commands: Player
Denizen2Core.register(new ActionBarCommand());
Denizen2Core.register(new AdvancementCommand());
Denizen2Core.register(new BanCommand());
Denizen2Core.register(new CooldownCommand());
Denizen2Core.register(new CreateBossBarCommand());
Denizen2Core.register(new EditBossBarCommand());
Denizen2Core.register(new FeedCommand());
Denizen2Core.register(new GamemodeCommand());
Denizen2Core.register(new GiveCommand());
Denizen2Core.register(new GrantAdvancementCommand());
Denizen2Core.register(new HotbarCommand());
Denizen2Core.register(new KickCommand());
Denizen2Core.register(new NarrateCommand());
Denizen2Core.register(new PardonCommand());
Denizen2Core.register(new RemoveBossBarCommand());
Denizen2Core.register(new RevokeAdvancementCommand());
Denizen2Core.register(new TabListCommand());
Denizen2Core.register(new TakeCommand());
Denizen2Core.register(new TellCommand());
Expand Down Expand Up @@ -285,6 +285,12 @@ public void onServerStart(GamePreInitializationEvent event) {
// TODO: Config option -> readyToSpamEvents = true;
}

@Listener
public void onServerStarted(GamePostInitializationEvent event) {
// Build the already loaded advancement scripts
AdvancementScript.buildAll();
}

public File getMainDirectory() {
return new File("./config/denizen/");
}
Expand Down
Expand Up @@ -4,21 +4,25 @@
import com.denizenscript.denizen2core.commands.CommandEntry;
import com.denizenscript.denizen2core.commands.CommandQueue;
import com.denizenscript.denizen2core.utilities.ErrorInducedException;
import com.denizenscript.denizen2sponge.spongeevents.Denizen2SpongeReloadEvent;
import com.denizenscript.denizen2core.utilities.debugging.Debug;
import com.denizenscript.denizen2sponge.spongeevents.Denizen2SpongeReloadEvent;
import com.denizenscript.denizen2sponge.spongescripts.AdvancementScript;
import com.denizenscript.denizen2sponge.spongescripts.GameCommandScript;
import org.spongepowered.api.Sponge;
import org.spongepowered.api.text.Text;
import org.spongepowered.api.text.format.TextColors;
import org.spongepowered.api.text.serializer.TextSerializers;

import java.io.File;
import java.util.HashSet;

public class Denizen2SpongeImplementation extends Denizen2Implementation {

@Override
public void preReload() {
GameCommandScript.clear();
AdvancementScript.oldAdvancementScripts = new HashSet<>(AdvancementScript.currentAdvancementScripts.keySet());
AdvancementScript.currentAdvancementScripts.clear();
}

@Override
Expand All @@ -28,6 +32,11 @@ public void midLoad() {

@Override
public void reload() {
if (!AdvancementScript.oldAdvancementScripts.equals(AdvancementScript.currentAdvancementScripts.keySet())) {
Debug.info("Advancement scripts have changed, but won't have any effect. " +
"Restart the server for the new advancements to be registered!");
}
AdvancementScript.buildAll();
Sponge.getEventManager().post(new Denizen2SpongeReloadEvent(Denizen2Sponge.getGenericCause()));
// ...?
}
Expand Down
@@ -0,0 +1,82 @@
package com.denizenscript.denizen2sponge.commands.player;

import com.denizenscript.denizen2core.commands.AbstractCommand;
import com.denizenscript.denizen2core.commands.CommandEntry;
import com.denizenscript.denizen2core.commands.CommandQueue;
import com.denizenscript.denizen2core.tags.objects.BooleanTag;
import com.denizenscript.denizen2core.utilities.debugging.ColorSet;
import com.denizenscript.denizen2core.utilities.debugging.Debug;
import com.denizenscript.denizen2sponge.tags.objects.PlayerTag;
import com.denizenscript.denizen2sponge.utilities.Utilities;
import org.spongepowered.api.advancement.Advancement;

public class AdvancementCommand extends AbstractCommand {

// <--[command]
// @Since 0.4.0
// @Name advancement
// @Arguments <player> <id> <state>
// @Short manages the state of a player's advancement.
// @Updated 2018/02/06
// @Group Player
// @Minimum 3
// @Maximum 3
// @Description
// Manages the state of a player's advancement. Set the state
// to true to grant the advancement, and to false to revoke it.
// @Example
// # This example grants the advancement "iron_man" to the player.
// - advancement <player> iron_man true
// @Example
// # This example revokes the advancement "legend" from the player.
// - advancement <player> legend false
// -->

@Override
public String getName() {
return "advancement";
}

@Override
public String getArguments() {
return "<player> <id> <state>";
}

@Override
public int getMinimumArguments() {
return 3;
}

@Override
public int getMaximumArguments() {
return 3;
}

@Override
public void execute(CommandQueue queue, CommandEntry entry) {
PlayerTag player = PlayerTag.getFor(queue.error, entry.getArgumentObject(queue, 0));
String id = entry.getArgumentObject(queue, 1).toString();
Advancement advancement = (Advancement) Utilities.getTypeWithDefaultPrefix(Advancement.class, id);
if (advancement == null) {
Debug.error("There's no registered advancement that matches the specified id!");
return;
}
BooleanTag state = BooleanTag.getFor(queue.error, entry.getArgumentObject(queue, 2));
if (state.getInternal()) {
player.getOnline(queue.error).getProgress(advancement).grant();
if (queue.shouldShowGood()) {
queue.outGood("Granting advancement '" + ColorSet.emphasis + advancement.getId()
+ ColorSet.good + "' to player '" + ColorSet.emphasis + player.debug()
+ ColorSet.good + "'!");
}
}
else {
player.getOnline(queue.error).getProgress(advancement).revoke();
if (queue.shouldShowGood()) {
queue.outGood("Revoking advancement '" + ColorSet.emphasis + advancement.getId()
+ ColorSet.good + "' from player '" + ColorSet.emphasis + player.debug()
+ ColorSet.good + "'!");
}
}
}
}

This file was deleted.

This file was deleted.

0 comments on commit 54a94e3

Please sign in to comment.