Skip to content

Commit

Permalink
Add a 'player edits book' event
Browse files Browse the repository at this point in the history
an event for when a player edits/signs book, see added meta for infos.
Also fix a few typos
  • Loading branch information
mcmonkey4eva committed Nov 30, 2013
1 parent 5bb4f34 commit fb95fe1
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 5 deletions.
2 changes: 1 addition & 1 deletion src/main/java/net/aufdemrand/denizen/objects/dPlayer.java
Expand Up @@ -1287,7 +1287,7 @@ public void adjust(Mechanism mechanism, Element value) {
// @description
// Sets the walk speed of the player. The standard value is '0.2'. Valid range is 0.0 to 1.0
// @tags
// <player.fly_speed>
// <player.walk_speed>
// -->
if (mechanism.matches("walk_speed")) {
getPlayerEntity().setWalkSpeed(value.asFloat());
Expand Down
Expand Up @@ -33,7 +33,7 @@ public class AgeCommand extends AbstractCommand {
// @Code
// # +--------------------
// # | Age Command and Item Script/Item Event Example
//
// # |
// # | This script shows a very small example that utilizes the Age Command with the use
// # | of some items scripts and item events. Use /ex give i@aged_wand or /ex give i@baby_wand
// # | and right click an entity.
Expand Down
Expand Up @@ -4,7 +4,7 @@
import org.bukkit.configuration.ConfigurationSection;

// <--[language]
// @name Assignment Script-Containers
// @name Assignment Script Containers
// @group Script Container System
// @description
// Assignment script-containers provide functionality to NPCs by 'assignment' of the container. Assignment
Expand Down
Expand Up @@ -11,10 +11,8 @@

import net.aufdemrand.denizen.Settings;
import net.aufdemrand.denizen.events.EventManager;
import net.aufdemrand.denizen.events.bukkit.ScriptReloadEvent;
import net.aufdemrand.denizen.objects.*;
import net.aufdemrand.denizen.objects.aH.Argument;
import net.aufdemrand.denizen.scripts.containers.core.WorldScriptContainer;
import net.aufdemrand.denizen.utilities.Conversion;
import net.aufdemrand.denizen.utilities.DenizenAPI;
import net.aufdemrand.denizen.utilities.ScoreboardHelper;
Expand All @@ -41,6 +39,7 @@
import org.bukkit.event.world.*;
import org.bukkit.event.entity.*;
import org.bukkit.inventory.ItemStack;
import org.bukkit.inventory.meta.BookMeta;
import org.bukkit.util.BlockIterator;

@SuppressWarnings("deprecation")
Expand Down Expand Up @@ -2934,6 +2933,61 @@ else if (!determination.equals("none")) {
}
}


// <--[event]
// @Events
// player edits book
// player signs book
//
// @Triggers when a player edits or signs a book.
// @Context
// <context.title> returns the name of the book, if any.
// <context.pages> returns the number of pages in the book.
// <context.book> returns the book item being edited.
// <context.signing> returns whether the book is about to be signed.
//
// @Determine
// "CANCELLED" to prevent the book from being edited.
// "NOT_SIGNING" to prevent the book from being signed.
// dScript to set the book information to set it to instead.
//
// -->
@EventHandler
public void playerEditBook(PlayerEditBookEvent event) {
Map<String, dObject> context = new HashMap<String, dObject>();
if (event.isSigning()) context.put("title", new Element(event.getNewBookMeta().getTitle()));
context.put("pages", new Element(event.getNewBookMeta().getPageCount()));
context.put("book", new dItem(event.getPlayer().getInventory().getItem(event.getSlot())));
context.put("signing", new Element(event.isSigning()));

ArrayList<String> events = new ArrayList<String>();

events.add("player edits book");
if (event.isSigning()) {
events.add("player signs book");
}

String determination = EventManager.doEvents(events,
null, event.getPlayer(), context);

if (determination.toUpperCase().startsWith("CANCELLED"))
event.setCancelled(true);
else if (determination.toUpperCase().startsWith("NOT_SIGNING"))
event.setSigning(false);
else if (dScript.matches(determination)) {
dScript script = dScript.valueOf(determination);
if (script.getContainer() instanceof BookScriptContainer) {
dItem book = ((BookScriptContainer)script.getContainer()).getBookFrom(dPlayer.mirrorBukkitPlayer(event.getPlayer()), null);
event.setNewBookMeta((BookMeta) book.getItemStack().getItemMeta());
if (book.getItemStack().getType() == Material.BOOK_AND_QUILL)
event.setSigning(false);
}
else {
dB.echoError("Script '" + determination + "' is valid, but not of type 'book'!");
}
}
}

// <--[event]
// @Events
// player animates (<animation>)
Expand Down

0 comments on commit fb95fe1

Please sign in to comment.