summaryrefslogtreewikicommitdiff
path: root/src/main/java/net/tylermurphy/hideAndSeek/util
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/tylermurphy/hideAndSeek/util')
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java24
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/Version.java45
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/AbstractPacket.java115
-rw-r--r--src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/WrapperPlayServerNamedSoundEffect.java158
4 files changed, 329 insertions, 13 deletions
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java
index 18913da..d793f46 100644
--- a/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Packet.java
@@ -21,6 +21,8 @@ package net.tylermurphy.hideAndSeek.util;
import java.lang.reflect.InvocationTargetException;
+import net.tylermurphy.hideAndSeek.Main;
+import net.tylermurphy.hideAndSeek.util.protocollib.WrapperPlayServerNamedSoundEffect;
import org.bukkit.Sound;
import org.bukkit.entity.Player;
@@ -38,19 +40,15 @@ public class Packet {
private static final ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
public static void playSound(Player player, Sound sound, float volume, float pitch) {
- PacketContainer packet = protocolManager.createPacket(PacketType.Play.Server.NAMED_SOUND_EFFECT);
- packet.getSoundCategories().write(0, SoundCategory.MASTER);
- packet.getSoundEffects().write(0, sound);
- packet.getIntegers().write(0, (int)(player.getLocation().getX() * 8.0));
- packet.getIntegers().write(1, (int)(player.getLocation().getY() * 8.0));
- packet.getIntegers().write(2, (int)(player.getLocation().getZ() * 8.0));
- packet.getFloat().write(0, volume);
- packet.getFloat().write(1, pitch);
- try {
- protocolManager.sendServerPacket(player, packet);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
+ WrapperPlayServerNamedSoundEffect packet = new WrapperPlayServerNamedSoundEffect();
+ packet.setSoundCategory(SoundCategory.MASTER);
+ packet.setSoundEffect(sound);
+ packet.setEffectPositionX((int)(player.getLocation().getX() * 8.0));
+ packet.setEffectPositionY((int)(player.getLocation().getY() * 8.0));
+ packet.setEffectPositionZ((int)(player.getLocation().getZ() * 8.0));
+ packet.setPitch(pitch);
+ packet.setVolume(volume);
+ packet.sendPacket(player);
}
public static void setGlow(Player player, Player target, boolean glowing) {
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/Version.java b/src/main/java/net/tylermurphy/hideAndSeek/util/Version.java
new file mode 100644
index 0000000..96854db
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/Version.java
@@ -0,0 +1,45 @@
+package net.tylermurphy.hideAndSeek.util;
+
+import org.bukkit.Bukkit;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Version {
+
+ private static final Map<String,Boolean> CACHE = new HashMap<>();
+
+ public static boolean atLeast(String testVersion){
+
+
+ if(CACHE.containsKey(testVersion)) return CACHE.get(testVersion);
+
+ String[] serverCheckTemp = Bukkit.getBukkitVersion().substring(2,Bukkit.getBukkitVersion().indexOf('-')).split("\\.");
+ int[] serverCheck = new int[serverCheckTemp.length];
+ for(int i=0; i<serverCheck.length; i++){
+ serverCheck[i] = Integer.parseInt(serverCheckTemp[i]);
+ }
+
+ String[] customCheckTemp = testVersion.substring(2).split("\\.");
+ int[] customCheck = new int[customCheckTemp.length];
+ for(int i=0; i<customCheck.length; i++){
+ customCheck[i] = Integer.parseInt(customCheckTemp[i]);
+ }
+
+ boolean result = getResult(customCheck, serverCheck);
+ CACHE.put(testVersion, result);
+ return result;
+ }
+
+ private static boolean getResult(int[] customCheck, int[] serverCheck){
+ if(customCheck[0] > serverCheck[0]) return false;
+ else if(customCheck[0] < serverCheck[0]) return true;
+ else {
+ if (customCheck.length == 1 && serverCheck.length == 1) return true;
+ else if(customCheck.length == 2 && serverCheck.length == 2){
+ return customCheck[1] <= serverCheck[1];
+ }
+ else return serverCheck.length == 2;
+ }
+ }
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/AbstractPacket.java b/src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/AbstractPacket.java
new file mode 100644
index 0000000..f6bd15a
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/AbstractPacket.java
@@ -0,0 +1,115 @@
+/**
+ * PacketWrapper - ProtocolLib wrappers for Minecraft packets
+ * Copyright (C) dmulloy2 <http://dmulloy2.net>
+ * Copyright (C) Kristian S. Strangeland
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.tylermurphy.hideAndSeek.util.protocollib;
+
+import java.lang.reflect.InvocationTargetException;
+
+import org.bukkit.entity.Player;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.events.PacketContainer;
+import com.google.common.base.Objects;
+
+public abstract class AbstractPacket {
+ // The packet we will be modifying
+ protected PacketContainer handle;
+
+ /**
+ * Constructs a new strongly typed wrapper for the given packet.
+ *
+ * @param handle - handle to the raw packet data.
+ * @param type - the packet type.
+ */
+ protected AbstractPacket(PacketContainer handle, PacketType type) {
+ // Make sure we're given a valid packet
+ if (handle == null)
+ throw new IllegalArgumentException("Packet handle cannot be NULL.");
+ if (!Objects.equal(handle.getType(), type))
+ throw new IllegalArgumentException(handle.getHandle()
+ + " is not a packet of type " + type);
+
+ this.handle = handle;
+ }
+
+ /**
+ * Retrieve a handle to the raw packet data.
+ *
+ * @return Raw packet data.
+ */
+ public PacketContainer getHandle() {
+ return handle;
+ }
+
+ /**
+ * Send the current packet to the given receiver.
+ *
+ * @param receiver - the receiver.
+ * @throws RuntimeException If the packet cannot be sent.
+ */
+ public void sendPacket(Player receiver) {
+ try {
+ ProtocolLibrary.getProtocolManager().sendServerPacket(receiver,
+ getHandle());
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException("Cannot send packet.", e);
+ }
+ }
+
+ /**
+ * Send the current packet to all online players.
+ */
+ public void broadcastPacket() {
+ ProtocolLibrary.getProtocolManager().broadcastServerPacket(getHandle());
+ }
+
+ /**
+ * Simulate receiving the current packet from the given sender.
+ *
+ * @param sender - the sender.
+ * @throws RuntimeException If the packet cannot be received.
+ * @deprecated Misspelled. recieve to receive
+ * @see #receivePacket(Player)
+ */
+ @Deprecated
+ public void recievePacket(Player sender) {
+ try {
+ ProtocolLibrary.getProtocolManager().recieveClientPacket(sender,
+ getHandle());
+ } catch (Exception e) {
+ throw new RuntimeException("Cannot recieve packet.", e);
+ }
+ }
+
+ /**
+ * Simulate receiving the current packet from the given sender.
+ *
+ * @param sender - the sender.
+ * @throws RuntimeException if the packet cannot be received.
+ */
+ public void receivePacket(Player sender) {
+ try {
+ ProtocolLibrary.getProtocolManager().recieveClientPacket(sender,
+ getHandle());
+ } catch (Exception e) {
+ throw new RuntimeException("Cannot receive packet.", e);
+ }
+ }
+}
diff --git a/src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/WrapperPlayServerNamedSoundEffect.java b/src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/WrapperPlayServerNamedSoundEffect.java
new file mode 100644
index 0000000..5851a75
--- /dev/null
+++ b/src/main/java/net/tylermurphy/hideAndSeek/util/protocollib/WrapperPlayServerNamedSoundEffect.java
@@ -0,0 +1,158 @@
+/**
+ * PacketWrapper - ProtocolLib wrappers for Minecraft packets
+ * Copyright (C) dmulloy2 <http://dmulloy2.net>
+ * Copyright (C) Kristian S. Strangeland
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+package net.tylermurphy.hideAndSeek.util.protocollib;
+
+import org.bukkit.Sound;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.wrappers.EnumWrappers.SoundCategory;
+
+public class WrapperPlayServerNamedSoundEffect extends AbstractPacket {
+ public static final PacketType TYPE =
+ PacketType.Play.Server.NAMED_SOUND_EFFECT;
+
+ public WrapperPlayServerNamedSoundEffect() {
+ super(new PacketContainer(TYPE), TYPE);
+ handle.getModifier().writeDefaults();
+ }
+
+ public WrapperPlayServerNamedSoundEffect(PacketContainer packet) {
+ super(packet, TYPE);
+ }
+
+ public Sound getSoundEffect() {
+ return handle.getSoundEffects().read(0);
+ }
+
+ public void setSoundEffect(Sound value) {
+ handle.getSoundEffects().write(0, value);
+ }
+
+ public SoundCategory getSoundCategory() {
+ return handle.getSoundCategories().read(0);
+ }
+
+ public void setSoundCategory(SoundCategory value) {
+ handle.getSoundCategories().write(0, value);
+ }
+
+ /**
+ * Retrieve Effect position X.
+ * <p>
+ * Notes: effect X multiplied by 8
+ *
+ * @return The current Effect position X
+ */
+ public int getEffectPositionX() {
+ return handle.getIntegers().read(0);
+ }
+
+ /**
+ * Set Effect position X.
+ *
+ * @param value - new value.
+ */
+ public void setEffectPositionX(int value) {
+ handle.getIntegers().write(0, value);
+ }
+
+ /**
+ * Retrieve Effect position Y.
+ * <p>
+ * Notes: effect Y multiplied by 8
+ *
+ * @return The current Effect position Y
+ */
+ public int getEffectPositionY() {
+ return handle.getIntegers().read(1);
+ }
+
+ /**
+ * Set Effect position Y.
+ *
+ * @param value - new value.
+ */
+ public void setEffectPositionY(int value) {
+ handle.getIntegers().write(1, value);
+ }
+
+ /**
+ * Retrieve Effect position Z.
+ * <p>
+ * Notes: effect Z multiplied by 8
+ *
+ * @return The current Effect position Z
+ */
+ public int getEffectPositionZ() {
+ return handle.getIntegers().read(2);
+ }
+
+ /**
+ * Set Effect position Z.
+ *
+ * @param value - new value.
+ */
+ public void setEffectPositionZ(int value) {
+ handle.getIntegers().write(2, value);
+ }
+
+ /**
+ * Retrieve Volume.
+ * <p>
+ * Notes: 1 is 100%, can be more
+ *
+ * @return The current Volume
+ */
+ public float getVolume() {
+ return handle.getFloat().read(0);
+ }
+
+ /**
+ * Set Volume.
+ *
+ * @param value - new value.
+ */
+ public void setVolume(float value) {
+ handle.getFloat().write(0, value);
+ }
+
+ /**
+ * Retrieve Pitch.
+ * <p>
+ * Notes: 63 is 100%, can be more
+ *
+ * @return The current Pitch
+ */
+ public float getPitch() {
+ return handle.getFloat().read(1);
+ }
+
+ /**
+ * Set Pitch.
+ *
+ * @param value - new value.
+ */
+ public void setPitch(float value) {
+ handle.getFloat().write(1, value);
+ }
+
+}
+