From 50c4227c42296516cba572def12b0d566ddafa5b Mon Sep 17 00:00:00 2001 From: Morphan1 Date: Sun, 4 Jan 2015 10:30:07 -0500 Subject: [PATCH] Add dPlayer.open_book mech --- .../aufdemrand/denizen/objects/dPlayer.java | 13 +++++++ .../denizen/utilities/packets/OpenBook.java | 38 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 src/main/java/net/aufdemrand/denizen/utilities/packets/OpenBook.java diff --git a/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java b/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java index 30aa01f691..77827a8810 100644 --- a/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java +++ b/src/main/java/net/aufdemrand/denizen/objects/dPlayer.java @@ -2208,6 +2208,19 @@ else if (split.length > 1) { PlayerSpectateEntity.setSpectating(getPlayerEntity(), value.asType(dEntity.class).getBukkitEntity()); } + // <--[mechanism] + // @object dPlayer + // @name open_book + // @input None + // @description + // Forces the player to open the written book in their hand. + // The book can safely be removed from the player's hand + // without the player closing the book. + // --> + if (mechanism.matches("open_book")) { + OpenBook.openBook(getPlayerEntity()); + } + // Iterate through this object's properties' mechanisms for (Property property : PropertyParser.getProperties(this)) { property.adjust(mechanism); diff --git a/src/main/java/net/aufdemrand/denizen/utilities/packets/OpenBook.java b/src/main/java/net/aufdemrand/denizen/utilities/packets/OpenBook.java new file mode 100644 index 0000000000..8e09f2aa35 --- /dev/null +++ b/src/main/java/net/aufdemrand/denizen/utilities/packets/OpenBook.java @@ -0,0 +1,38 @@ +package net.aufdemrand.denizen.utilities.packets; + +import io.netty.buffer.Unpooled; +import net.aufdemrand.denizen.utilities.debugging.dB; +import net.minecraft.server.v1_8_R1.PacketDataSerializer; +import net.minecraft.server.v1_8_R1.PacketPlayOutCustomPayload; +import org.bukkit.entity.Player; + +import java.lang.reflect.Field; +import java.util.Map; + +public class OpenBook { + + private static final Field channel, packet_data; + + static { + Map fields = PacketHelper.registerFields(PacketPlayOutCustomPayload.class); + channel = fields.get("a"); + packet_data = fields.get("b"); + } + + public static PacketPlayOutCustomPayload getOpenBookPacket() { + PacketPlayOutCustomPayload customPayloadPacket = new PacketPlayOutCustomPayload(); + try { + channel.set(customPayloadPacket, "MC|BOpen"); + packet_data.set(customPayloadPacket, new PacketDataSerializer(Unpooled.buffer())); + } catch (Exception e) { + dB.echoError(e); + } + return customPayloadPacket; + } + + public static void openBook(Player player) { + PacketPlayOutCustomPayload customPayloadPacket = getOpenBookPacket(); + PacketHelper.sendPacket(player, customPayloadPacket); + } + +}