Fixed bug with PacketPlayOutEntityHeadRotation not working on PlayerJoinEvent.
Added partially working targeted entity tracing method Added attack(org.bukkit.entity.Entity) method overload DummyPlayers now drop all experience upon death (but no exp on remove command)
This commit is contained in:
1 parent
b631e5cd01
commit
0ec5e04095
2 files changed
+43
-40
No files matched your search
@@ -3,23 +3,20 @@ package plugin.mrtransistor.AFK;
|
||||
import net.minecraft.server.v1_16_R3.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
|
||||
import org.bukkit.event.EventHandler;
|
||||
import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.entity.PlayerDeathEvent;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
|
||||
import org.bukkit.scheduler.BukkitRunnable;
|
||||
import org.bukkit.scheduler.BukkitTask;
|
||||
import plugin.mrtransistor.AFK.commands.RemoveAllBots;
|
||||
import plugin.mrtransistor.AFK.commands.RemoveBot;
|
||||
import plugin.mrtransistor.AFK.commands.SpawnBot;
|
||||
|
||||
public class AFK extends JavaPlugin implements Listener {
|
||||
|
||||
private BukkitTask updater;
|
||||
|
||||
@Override
|
||||
public void onEnable() {
|
||||
saveDefaultConfig();
|
||||
@@ -33,28 +30,15 @@ public class AFK extends JavaPlugin implements Listener {
|
||||
getCommand("removeAllBots").setExecutor(new RemoveAllBots());
|
||||
getCommand("removeAllBots").setTabCompleter(new RemoveAllBots());
|
||||
|
||||
this.updater = new BukkitRunnable() {
|
||||
/** BUGFIX FOR HEAD ROTATION PACKET NOT BEING REGISTERED PROPERLY **/
|
||||
/*TODO: FIND THE PROBLEM THAT IS CAUSING UPDATES ON PLAYER JOIN NOT WORK*/
|
||||
@Override
|
||||
public void run() {
|
||||
MinecraftServer server = ((CraftServer) Bukkit.getServer()).getServer();
|
||||
for (DummyPlayer dummy : DummyPlayer.dummies) {
|
||||
server.getPlayerList().sendAll(new PacketPlayOutEntityHeadRotation(dummy, (byte) (dummy.yaw * 256/360)));
|
||||
}
|
||||
}
|
||||
}.runTaskTimer(this, 0, 5);
|
||||
|
||||
// Attack test
|
||||
/*new BukkitRunnable(){
|
||||
|
||||
/*new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
for (DummyPlayer dummy : DummyPlayer.dummies) {
|
||||
Entity targetedEntity = dummy.getTargetedEntity();
|
||||
if(targetedEntity != null){
|
||||
dummy.swingHand(EnumHand.MAIN_HAND);
|
||||
dummy.attack(targetedEntity);
|
||||
LivingEntity target = dummy.getTargetedLivingEntity();
|
||||
if (target != null) {
|
||||
dummy.swingHand(EnumHand.MAIN_HAND, true);
|
||||
dummy.attack(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -65,7 +49,6 @@ public class AFK extends JavaPlugin implements Listener {
|
||||
|
||||
@Override
|
||||
public void onDisable() {
|
||||
updater.cancel();
|
||||
int botsRemoved = 0;
|
||||
int numBots = DummyPlayer.dummies.size();
|
||||
for (int i = 0; i < numBots; i++) {
|
||||
@@ -91,8 +74,14 @@ public class AFK extends JavaPlugin implements Listener {
|
||||
plc.sendPacket(new PacketPlayOutNamedEntitySpawn(dummy));
|
||||
plc.sendPacket(new PacketPlayOutEntityMetadata(dummy.getId(),
|
||||
dummy.getDataWatcher(), true));
|
||||
plc.sendPacket(new PacketPlayOutEntityHeadRotation(dummy,
|
||||
(byte) (dummy.yaw * 256 / 360)));
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerDeath(PlayerDeathEvent e){
|
||||
getLogger().info("player died");
|
||||
if(((CraftEntity)e.getEntity()).getHandle() instanceof DummyPlayer){
|
||||
e.setDroppedExp(e.getEntity().getTotalExperience());
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -4,14 +4,22 @@ import com.mojang.authlib.GameProfile;
|
||||
import com.mojang.authlib.properties.Property;
|
||||
import net.minecraft.server.v1_16_R3.*;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.CraftServer;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.CraftWorld;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftEntity;
|
||||
import org.bukkit.craftbukkit.v1_16_R3.entity.CraftPlayer;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.util.RayTraceResult;
|
||||
import org.bukkit.util.Vector;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.UUID;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class DummyPlayer extends EntityPlayer {
|
||||
public static ArrayList<DummyPlayer> dummies = new ArrayList<>();
|
||||
@@ -48,13 +56,14 @@ public class DummyPlayer extends EntityPlayer {
|
||||
worldServer.addPlayerJoin(dummy);
|
||||
|
||||
dummy.setLocation(location.getX(), location.getY(), location.getZ(), location.getYaw(), location.getPitch());
|
||||
dummy.setHeadRotation(location.getYaw());
|
||||
dummy.setYawPitch(location.getYaw(), location.getPitch());
|
||||
worldServer.getChunkProvider().movePlayer(dummy);
|
||||
|
||||
|
||||
server.getPlayerList().sendAll(new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, dummy));
|
||||
server.getPlayerList().sendAll(new PacketPlayOutNamedEntitySpawn(dummy));
|
||||
server.getPlayerList().sendAll(new PacketPlayOutEntityMetadata(dummy.getId(), dummy.getDataWatcher(), true));
|
||||
server.getPlayerList().sendAll(new PacketPlayOutEntityHeadRotation(dummy, (byte) (dummy.yaw * 256 / 360)));
|
||||
return dummy;
|
||||
}
|
||||
|
||||
@@ -68,21 +77,26 @@ public class DummyPlayer extends EntityPlayer {
|
||||
this.playerTick();
|
||||
}
|
||||
|
||||
//TODO: fix hitting through blocks (add block raytracing)
|
||||
public LivingEntity getTargetedLivingEntity() {
|
||||
Player bukkitPlayer = this.getBukkitEntity();
|
||||
World world = bukkitPlayer.getWorld();
|
||||
Location eyePos = bukkitPlayer.getEyeLocation();
|
||||
Vector eyeDirection = bukkitPlayer.getEyeLocation().getDirection();
|
||||
Predicate<org.bukkit.entity.Entity> filter = entity -> !entity.equals(bukkitPlayer);
|
||||
double reach = this.playerConnection.getPlayer().getGameMode() == GameMode.CREATIVE ? 4.5 : 3;
|
||||
|
||||
//TODO: add getTargetedEntity() method to allow damaging targeted entities
|
||||
/*public Entity getTargetedEntity() {
|
||||
WorldServer world = this.getWorldServer();
|
||||
RayTraceResult trace = world.rayTraceEntities(eyePos, eyeDirection, reach, filter);
|
||||
if (trace == null) return null;
|
||||
Entity hitEntity = trace.getHitEntity();
|
||||
if (hitEntity instanceof LivingEntity)
|
||||
return (LivingEntity) hitEntity;
|
||||
else return null;
|
||||
}
|
||||
|
||||
|
||||
Player player = this.getBukkitEntity();
|
||||
Location eye = player.getEyeLocation();
|
||||
for(org.bukkit.entity.Entity entity : player.getNearbyEntities(10, 10, 10)) {
|
||||
Vector toEntity = entity.getLocation().toVector().subtract(eye.toVector());
|
||||
double dot = toEntity.normalize().dot(eye.getDirection());
|
||||
if(dot > 0.99D) return ((CraftEntity) entity).getHandle();
|
||||
}
|
||||
return null;
|
||||
}*/
|
||||
public void attack(Entity entity) {
|
||||
this.attack(((CraftEntity) entity).getHandle());
|
||||
}
|
||||
|
||||
public void remove(String reason) {
|
||||
this.dropInventory();
|
||||
|
||||
Reference in new issue
Block a user