Compare commits

..
6 Commits
Author SHA1 Message Date
unknown b4c28e53d4 pom.xml errors fixed 2020-04-20 08:16:23 +02:00
unknown 8aa8a99909 Bugs fixed and testexample improved 2020-04-20 08:07:42 +02:00
unknown 2916e57d20 TestExample improved and bugs fixed! 2020-04-20 08:06:34 +02:00
purplex 6d0a4c07c6 Merge pull request #1 from purpdev/dependabot/maven/io.netty-netty-all-4.1.42.Final
Bump netty-all from 4.0.23.Final to 4.1.42.Final
2020-04-18 19:18:50 +02:00
unknown 7a3db02214 TinyProtocol example removed, bugs fixed, testexample is no longer registered 2020-04-17 14:59:05 +02:00
dependabot[bot] 652ba2d41c Bump netty-all from 4.0.23.Final to 4.1.42.Final
Bumps [netty-all](https://github.com/netty/netty) from 4.0.23.Final to 4.1.42.Final.
- [Release notes](https://github.com/netty/netty/releases)
- [Commits](https://github.com/netty/netty/compare/netty-4.0.23.Final...netty-4.1.42.Final)

Signed-off-by: dependabot[bot] <support@github.com>
2020-04-17 12:50:48 +00:00
6 changed files with 190 additions and 124 deletions

No files matched your search

+166
View File
@@ -0,0 +1,166 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ArtifactsWorkspaceSettings">
<artifacts-to-build>
<artifact name="PacketEvents:jar" />
</artifacts-to-build>
</component>
<component name="ChangeListManager">
<list default="true" id="56671312-5d48-415e-89e3-6da52f639a93" name="Default Changelist" comment="">
<change beforePath="$PROJECT_DIR$/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/pom.xml" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" />
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
<option name="LAST_RESOLUTION" value="IGNORE" />
</component>
<component name="FileTemplateManagerImpl">
<option name="RECENT_TEMPLATES">
<list>
<option value="Class" />
<option value="Enum" />
<option value="Interface" />
</list>
</option>
</component>
<component name="Git.Settings">
<option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
</component>
<component name="MavenImportPreferences">
<option name="importingSettings">
<MavenImportingSettings>
<option name="downloadDocsAutomatically" value="true" />
<option name="downloadSourcesAutomatically" value="true" />
</MavenImportingSettings>
</option>
</component>
<component name="ProjectId" id="1aLTtv1mzTFDpQDYHmrwgIboWkQ" />
<component name="ProjectLevelVcsManager" settingsEditedManually="true" />
<component name="ProjectViewState">
<option name="hideEmptyMiddlePackages" value="true" />
<option name="showLibraryContents" value="true" />
</component>
<component name="PropertiesComponent">
<property name="ASKED_SHARE_PROJECT_CONFIGURATION_FILES" value="true" />
<property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
<property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
<property name="project.structure.last.edited" value="Modules" />
<property name="project.structure.proportion" value="0.15" />
<property name="project.structure.side.proportion" value="0.2" />
<property name="run.code.analysis.last.selected.profile" value="pProject Default" />
</component>
<component name="RunManager">
<configuration default="true" type="JetRunConfigurationType">
<module name="JSLoader" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="MAIN_CLASS_NAME" />
<option name="WORKING_DIRECTORY" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration default="true" type="KotlinStandaloneScriptRunConfigurationType">
<module name="JSLoader" />
<option name="filePath" />
<option name="vmParameters" />
<option name="alternativeJrePath" />
<option name="programParameters" />
<option name="passParentEnvs" value="true" />
<option name="workingDirectory" />
<option name="isAlternativeJrePathEnabled" value="false" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="MAIN_CLASS_NAME" />
<option name="WORKING_DIRECTORY" />
<option name="filePath" />
<option name="vmParameters" />
<option name="alternativeJrePath" />
<option name="programParameters" />
<option name="passParentEnvs" value="true" />
<option name="workingDirectory" />
<option name="isAlternativeJrePathEnabled" value="false" />
<option name="VM_PARAMETERS" />
<option name="PROGRAM_PARAMETERS" />
<option name="ALTERNATIVE_JRE_PATH_ENABLED" value="false" />
<option name="ALTERNATIVE_JRE_PATH" />
<option name="PASS_PARENT_ENVS" value="true" />
<option name="MAIN_CLASS_NAME" />
<option name="WORKING_DIRECTORY" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
<configuration name="JSLoader build" type="MavenRunConfiguration" factoryName="Maven">
<MavenSettings>
<option name="myGeneralSettings" />
<option name="myRunnerSettings" />
<option name="myRunnerParameters">
<MavenRunnerParameters>
<option name="profiles">
<set />
</option>
<option name="goals">
<list>
<option value="clean" />
<option value="package" />
</list>
</option>
<option name="pomFileName" />
<option name="profilesMap">
<map />
</option>
<option name="resolveToWorkspace" value="false" />
<option name="workingDirPath" value="$PROJECT_DIR$" />
</MavenRunnerParameters>
</option>
</MavenSettings>
<method v="2" />
</configuration>
</component>
<component name="SvnConfiguration">
<configuration />
</component>
<component name="TaskManager">
<task active="true" id="Default" summary="Default task">
<changelist id="56671312-5d48-415e-89e3-6da52f639a93" name="Default Changelist" comment="" />
<created>1586514092402</created>
<option name="number" value="Default" />
<option name="presentableId" value="Default" />
<updated>1586514092402</updated>
</task>
<servers />
</component>
<component name="WindowStateProjectService">
<state x="280" y="4" key="#Project_Structure" timestamp="1586868472617">
<screen x="0" y="0" width="1600" height="860" />
</state>
<state x="280" y="4" key="#Project_Structure/0.0.1600.860@0.0.1600.860" timestamp="1586868472617" />
<state x="558" y="300" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1" timestamp="1586868346065">
<screen x="0" y="0" width="1600" height="860" />
</state>
<state x="558" y="300" key="ANALYSIS_DLG_com.intellij.analysis.BaseAnalysisAction$1/0.0.1600.860@0.0.1600.860" timestamp="1586868346065" />
<state x="580" y="171" key="FileChooserDialogImpl" timestamp="1586868828893">
<screen x="0" y="0" width="1600" height="860" />
</state>
<state x="580" y="171" key="FileChooserDialogImpl/0.0.1600.860@0.0.1600.860" timestamp="1586868828893" />
<state x="280" y="4" key="SettingsEditor" timestamp="1586515368359">
<screen x="0" y="0" width="1600" height="860" />
</state>
<state x="280" y="4" key="SettingsEditor/0.0.1600.860@0.0.1600.860" timestamp="1586515368359" />
<state x="182" y="91" key="new project wizard" timestamp="1587127371863">
<screen x="0" y="0" width="1600" height="860" />
</state>
<state x="182" y="91" key="new project wizard/0.0.1600.860@0.0.1600.860" timestamp="1587127371863" />
<state x="456" y="195" key="run.anything.popup" timestamp="1586766899144">
<screen x="0" y="0" width="1600" height="860" />
</state>
<state x="456" y="195" key="run.anything.popup/0.0.1600.860@0.0.1600.860" timestamp="1586766899144" />
</component>
</project>
+3 -1
View File
@@ -73,12 +73,14 @@
<groupId>com.mojang</groupId>
<artifactId>authlib</artifactId>
<version>1.5.21</version>
<scope>compile</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.0.23.Final</version>
<version>4.1.42.Final</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.bukkit</groupId>
@@ -1,114 +0,0 @@
package com.comphenix.tinyprotocol;
import io.netty.channel.Channel;
import org.bukkit.*;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.comphenix.tinyprotocol.Reflection.*;
/**
* Represents an example plugin utilizing TinyProtocol
*/
public class ExamplePlugin extends JavaPlugin {
// Chat packets
private FieldAccessor<String> CHAT_MESSAGE = Reflection.getField("{nms}.PacketPlayInChat", String.class, 0);
// Explosion packet
private Class<?> particleClass = Reflection.getClass("{nms}.PacketPlayOutWorldParticles");
private FieldAccessor<String> particleName = Reflection.getField(particleClass, String.class, 0);
private FieldAccessor<Float> particleX = Reflection.getField(particleClass, float.class, 0);
private FieldAccessor<Float> particleY = Reflection.getField(particleClass, float.class, 1);
private FieldAccessor<Float> particleZ = Reflection.getField(particleClass, float.class, 2);
private FieldAccessor<Integer> particleCount = Reflection.getField(particleClass, int.class, 0);
// Server info packet
private Class<?> serverInfoClass = Reflection.getClass("{nms}.PacketStatusOutServerInfo");
private Class<Object> serverPingClass = Reflection.getUntypedClass("{nms}.ServerPing");
private Class<Object> playerSampleClass = Reflection.getUntypedClass("{nms}.ServerPingPlayerSample");
private FieldAccessor<Object> serverPing = Reflection.getField(serverInfoClass, serverPingClass, 0);
private FieldAccessor<Object> playerSample = Reflection.getField(serverPingClass, playerSampleClass, 0);
private ConstructorInvoker playerSampleInvoker = Reflection.getConstructor(playerSampleClass, int.class, int.class);
private TinyProtocol protocol;
@Override
public void onEnable() {
protocol = new TinyProtocol(this) {
@Override
public Object onPacketInAsync(Player sender, Channel channel, Object packet) {
// Cancel chat packets
if (CHAT_MESSAGE.hasField(packet)) {
if (CHAT_MESSAGE.get(packet).contains("dirty")) {
sendExplosion(sender);
return null;
}
}
if (particleName.hasField(packet)) {
System.out.println("Sending particle field:" + packet);
}
return super.onPacketInAsync(sender, channel, packet);
}
@Override
public Object onPacketOutAsync(Player reciever, Channel channel, Object packet) {
if (serverInfoClass.isInstance(packet)) {
Object ping = serverPing.get(packet);
playerSample.set(ping, playerSampleInvoker.invoke(1000, 0));
// Which is equivalent to:
// serverPing.get(packet).setPlayerSample(new ServerPingPlayerSample(1000, 0));
return packet;
}
return super.onPacketOutAsync(reciever, channel, packet);
}
};
}
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (sender instanceof Player) {
Player player = (Player) sender;
// Toggle injection
if (protocol.hasInjected(player)) {
protocol.uninjectPlayer(player);
sender.sendMessage(ChatColor.YELLOW + "Player " + player + " has been uninjected.");
} else {
protocol.injectPlayer(player);
sender.sendMessage(ChatColor.DARK_GREEN + "Player " + player + " has been injected.");
}
return true;
} else {
sender.sendMessage(ChatColor.RED + "Can only be invoked by a player.");
}
return false;
}
private void sendExplosion(Player player) {
try {
// Only visible for the client
Object explosionPacket = particleClass.newInstance();
Location loc = player.getLocation();
particleName.set(explosionPacket, "hugeexplosion");
particleX.set(explosionPacket, (float) loc.getX());
particleY.set(explosionPacket, (float) loc.getY());
particleZ.set(explosionPacket, (float) loc.getZ());
particleCount.set(explosionPacket, 1);
// Send the packet to the player
protocol.sendPacket(player, explosionPacket);
} catch (Exception e) {
throw new RuntimeException("Cannot send packet.", e);
}
}
}
@@ -3,8 +3,6 @@ package me.purplex.packetevents;
import com.comphenix.tinyprotocol.*;
import io.netty.channel.Channel;
import me.purplex.packetevents.events.PacketReceiveEvent;
import me.retrooper.packetevents.events.*;
import me.purplex.packetevents.example.TestExample;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.event.*;
@@ -16,7 +14,7 @@ public class Main extends JavaPlugin implements Listener {
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
PacketEvents.getPacketManager().registerPacketListener(new TestExample());
//PacketEvents.getPacketManager().registerPacketListener(new TestExample());
protocol = new TinyProtocol(this) {
@Override
public Object onPacketInAsync(Player p, Channel channel, Object packet) {
@@ -1,7 +1,5 @@
package me.purplex.packetevents.events;
import org.bukkit.event.EventHandler;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -5,18 +5,34 @@ import me.purplex.packetevents.events.PacketListener;
import me.purplex.packetevents.events.PacketReceiveEvent;
import me.purplex.packetevents.events.PacketSendEvent;
import me.purplex.packetevents.packets.Packet;
import me.retrooper.packetevents.events.*;
public class TestExample implements PacketListener {
/**
* How to register a packet listener?
*
* PacketEvents.getPacketManager().registerPacketListener(new TestExample());
*/
@PacketHandler
public void onPacketReceive(PacketReceiveEvent e) {
if (e.getPacketName().equals(Packet.Client.POSITION)) {
e.getPlayer().sendMessage("You sent a position packet!");
//ONLY CLIENT PACKETS ALLOWED HERE!
if(e.getPacketName().equals(Packet.Client.USE_ENTITY)) {
e.getPlayer().sendMessage("You have attacked an entity!");
}
else if(e.getPacketName().equals(Packet.Client.ARM_ANIMATION)) {
e.getPlayer().sendMessage("You swung your arm.");
}
else if(e.getPacketName().equals(Packet.Client.POSITION)) {
e.getPlayer().sendMessage("You updated your position!");
}
}
@PacketHandler
public void onPacketSend(PacketSendEvent e) {
//ONLY SERVER PACKETS ALLOWED HERE!
if(e.getPacketName().equals(Packet.Server.ENTITY_VELOCITY)) {
e.getPlayer().sendMessage("You took velocity!");
}
}
}