diff --git a/BetterRTPAddons/pom.xml b/BetterRTPAddons/pom.xml
index 988eea6..1a30fb3 100644
--- a/BetterRTPAddons/pom.xml
+++ b/BetterRTPAddons/pom.xml
@@ -61,6 +61,11 @@
papermc
https://papermc.io/repo/repository/maven-public/
+
+
+ dmulloy2-repo
+ https://repo.dmulloy2.net/nexus/repository/public/
+
@@ -84,11 +89,18 @@
1.0.5
compile
+
me.SuperRonanCraft
BetterRTP
LATEST
provided
+
+
+ com.comphenix.protocol
+ ProtocolLib
+ 4.5.0
+
\ No newline at end of file
diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/AbstractPacket.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/AbstractPacket.java
new file mode 100644
index 0000000..a67a4d4
--- /dev/null
+++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/AbstractPacket.java
@@ -0,0 +1,96 @@
+package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
+
+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);
+ }
+ }
+}
\ No newline at end of file
diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java
index c681b93..76b4e0b 100644
--- a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java
+++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/PortalsCommand_Loc1.java
@@ -1,19 +1,39 @@
package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.ProtocolLibrary;
+import com.comphenix.protocol.ProtocolManager;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.wrappers.WrappedBlockData;
import me.SuperRonanCraft.BetterRTPAddons.addons.portals.AddonPortals;
import org.bukkit.Location;
import org.bukkit.Material;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
+import java.lang.reflect.InvocationTargetException;
+
public class PortalsCommand_Loc1 implements PortalsCommands, LocationFinder {
+ private PacketContainer fakeBlock;
+
@Override
public void execute(CommandSender sendi, String label, String[] args, AddonPortals addonPortals) {
Player p = (Player) sendi;
Location loc = getTargetBlock(p, 10).getLocation();
addonPortals.getPortals().setPortal(p, loc, false);
sendi.sendMessage("Location 1 set to this location " + loc.toString());
- p.sendBlockChange(loc, Material.GLOWSTONE, (byte) 0);
+ //p.sendBlockChange(loc, Material.GLOWSTONE, (byte) 0);
+
+ ProtocolManager protocolManager = ProtocolLibrary.getProtocolManager();
+ WrapperPlayServerBlockChange fakeBlock = new WrapperPlayServerBlockChange();
+ fakeBlock.setLocation(BlockLocation);
+ try {
+ //System.out.println(fakeBlock.toString());
+ protocolManager.sendServerPacket(p, fakeBlock);
+ } catch (InvocationTargetException e) {
+ throw new RuntimeException(
+ "Cannot send packet " + fakeBlock, e);
+ }
}
}
diff --git a/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/WrapperPlayServerBlockChange.java b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/WrapperPlayServerBlockChange.java
new file mode 100644
index 0000000..9e3efa6
--- /dev/null
+++ b/BetterRTPAddons/src/main/java/me/SuperRonanCraft/BetterRTPAddons/addons/portals/cmds/WrapperPlayServerBlockChange.java
@@ -0,0 +1,70 @@
+package me.SuperRonanCraft.BetterRTPAddons.addons.portals.cmds;
+
+import org.bukkit.Location;
+import org.bukkit.World;
+
+import com.comphenix.protocol.PacketType;
+import com.comphenix.protocol.events.PacketContainer;
+import com.comphenix.protocol.wrappers.BlockPosition;
+import com.comphenix.protocol.wrappers.WrappedBlockData;
+
+public class WrapperPlayServerBlockChange extends AbstractPacket {
+ public static final PacketType TYPE = PacketType.Play.Server.BLOCK_CHANGE;
+
+ public WrapperPlayServerBlockChange() {
+ super(new PacketContainer(TYPE), TYPE);
+ handle.getModifier().writeDefaults();
+ }
+
+ public WrapperPlayServerBlockChange(PacketContainer packet) {
+ super(packet, TYPE);
+ }
+
+ /**
+ * Retrieve Location.
+ *
+ * Notes: block Coordinates
+ *
+ * @return The current Location
+ */
+ public BlockPosition getLocation() {
+ return handle.getBlockPositionModifier().read(0);
+ }
+
+ /**
+ * Set Location.
+ *
+ * @param value - new value.
+ */
+ public void setLocation(BlockPosition value) {
+ handle.getBlockPositionModifier().write(0, value);
+ }
+
+ /**
+ * Retrieve the Bukkit Location.
+ *
+ * @param world World for the location
+ * @return Bukkit Location
+ */
+ public Location getBukkitLocation(World world) {
+ return getLocation().toVector().toLocation(world);
+ }
+
+ /**
+ * Retrieve Block Data.
+ *
+ * @return The current Block Data
+ */
+ public WrappedBlockData getBlockData() {
+ return handle.getBlockData().read(0);
+ }
+
+ /**
+ * Set Block Data.
+ *
+ * @param value - new value.
+ */
+ public void setBlockData(WrappedBlockData value) {
+ handle.getBlockData().write(0, value);
+ }
+}
\ No newline at end of file