mirror of
https://github.com/HibiscusMC/HibiscusCommons.git
synced 2025-12-19 15:09:26 +00:00
Revert "feat: move all packet sending to be async"
This reverts commit a9b28dd6
This commit is contained in:
@@ -97,12 +97,5 @@ public interface NMSPackets {
|
|||||||
|
|
||||||
void sendToastPacket(Player player, ItemStack icon, Component title, Component description);
|
void sendToastPacket(Player player, ItemStack icon, Component title, Component description);
|
||||||
|
|
||||||
void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo);
|
|
||||||
|
|
||||||
// The mask here is for is the armorstand is on fire or not.
|
|
||||||
void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo);
|
|
||||||
|
|
||||||
void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo);
|
|
||||||
|
|
||||||
Object createMountPacket(int entityId, int[] passengerIds);
|
Object createMountPacket(int entityId, int[] passengerIds);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,17 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_20_R4;
|
package me.lojosho.hibiscuscommons.nms.v1_20_R4;
|
||||||
|
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class NMSCommon {
|
public class NMSCommon {
|
||||||
|
|
||||||
public void sendPacket(@NotNull Player player, @NotNull Packet packet) {
|
public void sendPacket(Player player, Packet packet) {
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
ServerPlayerConnection connection = serverPlayer.connection;
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
connection.send(packet);
|
||||||
connection.send(packet);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacket(@NotNull List<Player> players, @NotNull Packet packet) {
|
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
|
||||||
for (Player p : players) {
|
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
|
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
|
||||||
connection.send(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,17 +57,10 @@ import java.util.stream.Collectors;
|
|||||||
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
||||||
|
|
||||||
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
||||||
private static final Map<Integer, Number> CLOUD_EFFECT_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20, 8, 0f); // For cloud effects
|
|
||||||
private static final Map<Integer, Number> GENERIC_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20); // For most entities if you just need genericaly invisible
|
|
||||||
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
||||||
|
|
||||||
@Override @SuppressWarnings("unchecked")
|
@Override @SuppressWarnings("unchecked")
|
||||||
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
||||||
ClientboundSetEntityDataPacket packet = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
for (Player player : sendTo) sendPacket(player, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClientboundSetEntityDataPacket getSharedEntityPacket(int entityId, Map<Integer, Number> dataValues) {
|
|
||||||
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
Number value = entry.getValue();
|
Number value = entry.getValue();
|
||||||
@@ -80,7 +73,8 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
};
|
};
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
return new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
||||||
|
for (Player player : sendTo) sendPacket(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -473,59 +467,4 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
fakeNmsEntity.passengers = ImmutableList.of();
|
fakeNmsEntity.passengers = ImmutableList.of();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.AREA_EFFECT_CLOUD;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, CLOUD_EFFECT_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.ARMOR_STAND;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
|
|
||||||
final Map<Integer, Number> dataValues = Map.of(0, mask, 15, (byte) 0x10);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = CraftEntityType.bukkitToMinecraft(type);
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, GENERIC_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,17 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R1;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R1;
|
||||||
|
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class NMSCommon {
|
public class NMSCommon {
|
||||||
|
|
||||||
public void sendPacket(@NotNull Player player, @NotNull Packet packet) {
|
public void sendPacket(Player player, Packet packet) {
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
ServerPlayerConnection connection = serverPlayer.connection;
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
connection.send(packet);
|
||||||
connection.send(packet);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacket(@NotNull List<Player> players, @NotNull Packet packet) {
|
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
|
||||||
for (Player p : players) {
|
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
|
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
|
||||||
connection.send(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R1;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R1;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
@@ -9,6 +10,7 @@ import com.mojang.serialization.JsonOps;
|
|||||||
import io.papermc.paper.adventure.PaperAdventure;
|
import io.papermc.paper.adventure.PaperAdventure;
|
||||||
import it.unimi.dsi.fastutil.ints.IntList;
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
||||||
|
import me.lojosho.hibiscuscommons.nms.v1_21_R1.NMSCommon;
|
||||||
import me.lojosho.hibiscuscommons.util.AdventureUtils;
|
import me.lojosho.hibiscuscommons.util.AdventureUtils;
|
||||||
import me.lojosho.hibiscuscommons.util.MessagesUtil;
|
import me.lojosho.hibiscuscommons.util.MessagesUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@@ -57,17 +59,10 @@ import java.util.stream.Collectors;
|
|||||||
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
||||||
|
|
||||||
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
||||||
private static final Map<Integer, Number> CLOUD_EFFECT_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20, 8, 0f); // For cloud effects
|
|
||||||
private static final Map<Integer, Number> GENERIC_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20); // For most entities if you just need genericaly invisible
|
|
||||||
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
||||||
|
|
||||||
@Override @SuppressWarnings("unchecked")
|
@Override @SuppressWarnings("unchecked")
|
||||||
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
||||||
ClientboundSetEntityDataPacket packet = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
for (Player player : sendTo) sendPacket(player, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClientboundSetEntityDataPacket getSharedEntityPacket(int entityId, Map<Integer, Number> dataValues) {
|
|
||||||
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
Number value = entry.getValue();
|
Number value = entry.getValue();
|
||||||
@@ -80,7 +75,8 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
};
|
};
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
return new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
||||||
|
for (Player player : sendTo) sendPacket(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -473,59 +469,4 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
fakeNmsEntity.passengers = ImmutableList.of();
|
fakeNmsEntity.passengers = ImmutableList.of();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.AREA_EFFECT_CLOUD;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, CLOUD_EFFECT_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.ARMOR_STAND;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
|
|
||||||
final Map<Integer, Number> dataValues = Map.of(0, mask, 15, (byte) 0x10);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = CraftEntityType.bukkitToMinecraft(type);
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, GENERIC_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,17 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R2;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R2;
|
||||||
|
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class NMSCommon {
|
public class NMSCommon {
|
||||||
|
|
||||||
public void sendPacket(@NotNull Player player, @NotNull Packet packet) {
|
public void sendPacket(Player player, Packet packet) {
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
ServerPlayerConnection connection = serverPlayer.connection;
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
connection.send(packet);
|
||||||
connection.send(packet);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacket(@NotNull List<Player> players, @NotNull Packet packet) {
|
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
|
||||||
for (Player p : players) {
|
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
|
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
|
||||||
connection.send(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R2;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R2;
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
import com.google.common.collect.ImmutableList;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
import com.google.gson.JsonObject;
|
import com.google.gson.JsonObject;
|
||||||
import com.mojang.authlib.GameProfile;
|
import com.mojang.authlib.GameProfile;
|
||||||
import com.mojang.authlib.properties.Property;
|
import com.mojang.authlib.properties.Property;
|
||||||
@@ -9,6 +10,7 @@ import com.mojang.serialization.JsonOps;
|
|||||||
import io.papermc.paper.adventure.PaperAdventure;
|
import io.papermc.paper.adventure.PaperAdventure;
|
||||||
import it.unimi.dsi.fastutil.ints.IntList;
|
import it.unimi.dsi.fastutil.ints.IntList;
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
||||||
|
import me.lojosho.hibiscuscommons.nms.v1_21_R2.NMSCommon;
|
||||||
import me.lojosho.hibiscuscommons.util.AdventureUtils;
|
import me.lojosho.hibiscuscommons.util.AdventureUtils;
|
||||||
import me.lojosho.hibiscuscommons.util.MessagesUtil;
|
import me.lojosho.hibiscuscommons.util.MessagesUtil;
|
||||||
import net.kyori.adventure.text.Component;
|
import net.kyori.adventure.text.Component;
|
||||||
@@ -58,17 +60,10 @@ import java.util.stream.Collectors;
|
|||||||
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
||||||
|
|
||||||
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
||||||
private static final Map<Integer, Number> CLOUD_EFFECT_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20, 8, 0f); // For cloud effects
|
|
||||||
private static final Map<Integer, Number> GENERIC_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20); // For most entities if you just need genericaly invisible
|
|
||||||
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
||||||
|
|
||||||
@Override @SuppressWarnings("unchecked")
|
@Override @SuppressWarnings("unchecked")
|
||||||
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
||||||
ClientboundSetEntityDataPacket packet = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
for (Player player : sendTo) sendPacket(player, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClientboundSetEntityDataPacket getSharedEntityPacket(int entityId, Map<Integer, Number> dataValues) {
|
|
||||||
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
Number value = entry.getValue();
|
Number value = entry.getValue();
|
||||||
@@ -81,7 +76,8 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
};
|
};
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
return new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
||||||
|
for (Player player : sendTo) sendPacket(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -471,59 +467,4 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
fakeNmsEntity.passengers = ImmutableList.of();
|
fakeNmsEntity.passengers = ImmutableList.of();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.AREA_EFFECT_CLOUD;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, CLOUD_EFFECT_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.ARMOR_STAND;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
|
|
||||||
final Map<Integer, Number> dataValues = Map.of(0, mask, 15, (byte) 0x10);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = CraftEntityType.bukkitToMinecraft(type);
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, GENERIC_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,17 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R3;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R3;
|
||||||
|
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class NMSCommon {
|
public class NMSCommon {
|
||||||
|
|
||||||
public void sendPacket(@NotNull Player player, @NotNull Packet packet) {
|
public void sendPacket(Player player, Packet packet) {
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
ServerPlayerConnection connection = serverPlayer.connection;
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
connection.send(packet);
|
||||||
connection.send(packet);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacket(@NotNull List<Player> players, @NotNull Packet packet) {
|
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
|
||||||
for (Player p : players) {
|
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
|
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
|
||||||
connection.send(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,17 +60,10 @@ import java.util.stream.Collectors;
|
|||||||
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
||||||
|
|
||||||
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
||||||
private static final Map<Integer, Number> CLOUD_EFFECT_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20, 8, 0f); // For cloud effects
|
|
||||||
private static final Map<Integer, Number> GENERIC_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20); // For most entities if you just need genericaly invisible
|
|
||||||
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
||||||
|
|
||||||
@Override @SuppressWarnings("unchecked")
|
@Override @SuppressWarnings("unchecked")
|
||||||
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
||||||
ClientboundSetEntityDataPacket packet = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
for (Player player : sendTo) sendPacket(player, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClientboundSetEntityDataPacket getSharedEntityPacket(int entityId, Map<Integer, Number> dataValues) {
|
|
||||||
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
Number value = entry.getValue();
|
Number value = entry.getValue();
|
||||||
@@ -83,7 +76,8 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
};
|
};
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
return new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
||||||
|
for (Player player : sendTo) sendPacket(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -508,60 +502,4 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
fakeNmsEntity.passengers = ImmutableList.of();
|
fakeNmsEntity.passengers = ImmutableList.of();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.AREA_EFFECT_CLOUD;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, CLOUD_EFFECT_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.ARMOR_STAND;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
|
|
||||||
final Map<Integer, Number> dataValues = Map.of(0, mask, 15, (byte) 0x10);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = CraftEntityType.bukkitToMinecraft(type);
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, GENERIC_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,17 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R4;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R4;
|
||||||
|
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class NMSCommon {
|
public class NMSCommon {
|
||||||
|
|
||||||
public void sendPacket(@NotNull Player player, @NotNull Packet packet) {
|
public void sendPacket(Player player, Packet packet) {
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
ServerPlayerConnection connection = serverPlayer.connection;
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
connection.send(packet);
|
||||||
connection.send(packet);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void sendPacket(@NotNull List<Player> players, @NotNull Packet packet) {
|
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
|
||||||
for (Player p : players) {
|
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
|
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
|
||||||
connection.send(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -60,17 +60,10 @@ import java.util.stream.Collectors;
|
|||||||
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
||||||
|
|
||||||
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
||||||
private static final Map<Integer, Number> CLOUD_EFFECT_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20, 8, 0f); // For cloud effects
|
|
||||||
private static final Map<Integer, Number> GENERIC_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20); // For most entities if you just need genericaly invisible
|
|
||||||
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
||||||
|
|
||||||
@Override @SuppressWarnings("unchecked")
|
@Override @SuppressWarnings("unchecked")
|
||||||
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
||||||
ClientboundSetEntityDataPacket packet = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
for (Player player : sendTo) sendPacket(player, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClientboundSetEntityDataPacket getSharedEntityPacket(int entityId, Map<Integer, Number> dataValues) {
|
|
||||||
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
Number value = entry.getValue();
|
Number value = entry.getValue();
|
||||||
@@ -83,7 +76,8 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
};
|
};
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
return new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
||||||
|
for (Player player : sendTo) sendPacket(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -509,59 +503,4 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
fakeNmsEntity.passengers = ImmutableList.of();
|
fakeNmsEntity.passengers = ImmutableList.of();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
@Override
|
|
||||||
public void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.AREA_EFFECT_CLOUD;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, CLOUD_EFFECT_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.ARMOR_STAND;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
|
|
||||||
final Map<Integer, Number> dataValues = Map.of(0, mask, 15, (byte) 0x10);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = CraftEntityType.bukkitToMinecraft(type);
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, GENERIC_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,33 +1,16 @@
|
|||||||
package me.lojosho.hibiscuscommons.nms.v1_21_R5;
|
package me.lojosho.hibiscuscommons.nms.v1_21_R5;
|
||||||
|
|
||||||
import me.lojosho.hibiscuscommons.HibiscusCommonsPlugin;
|
|
||||||
import net.minecraft.network.protocol.Packet;
|
import net.minecraft.network.protocol.Packet;
|
||||||
import net.minecraft.server.level.ServerPlayer;
|
import net.minecraft.server.level.ServerPlayer;
|
||||||
import net.minecraft.server.network.ServerPlayerConnection;
|
import net.minecraft.server.network.ServerPlayerConnection;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
import org.bukkit.craftbukkit.entity.CraftPlayer;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class NMSCommon {
|
public class NMSCommon {
|
||||||
|
|
||||||
public void sendPacket(@NotNull Player player, @NotNull Packet packet) {
|
public void sendPacket(Player player, Packet packet) {
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle();
|
ServerPlayerConnection connection = serverPlayer.connection;
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
connection.send(packet);
|
||||||
connection.send(packet);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void sendPacket(@NotNull List<Player> players, @NotNull Packet packet) {
|
|
||||||
Bukkit.getAsyncScheduler().runNow(HibiscusCommonsPlugin.getInstance(), (task) -> {
|
|
||||||
for (Player p : players) {
|
|
||||||
ServerPlayer serverPlayer = ((CraftPlayer) p).getHandle();
|
|
||||||
ServerPlayerConnection connection = serverPlayer.connection;
|
|
||||||
connection.send(packet);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,17 +57,10 @@ import java.util.stream.Collectors;
|
|||||||
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.nms.NMSPackets {
|
||||||
|
|
||||||
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
private static ServerLevel level = MinecraftServer.getServer().overworld();
|
||||||
private static final Map<Integer, Number> CLOUD_EFFECT_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20, 8, 0f); // For cloud effects
|
|
||||||
private static final Map<Integer, Number> GENERIC_INVISIBLE_DATA_VALUES = Map.of(0, (byte) 0x20); // For most entities if you just need genericaly invisible
|
|
||||||
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
private static Entity fakeNmsEntity = new ArmorStand(net.minecraft.world.entity.EntityType.ARMOR_STAND, level);
|
||||||
|
|
||||||
@Override @SuppressWarnings("unchecked")
|
@Override @SuppressWarnings("unchecked")
|
||||||
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
public void sendSharedEntityData(int entityId, Map<Integer, Number> dataValues, List<Player> sendTo) {
|
||||||
ClientboundSetEntityDataPacket packet = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
for (Player player : sendTo) sendPacket(player, packet);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ClientboundSetEntityDataPacket getSharedEntityPacket(int entityId, Map<Integer, Number> dataValues) {
|
|
||||||
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
List<SynchedEntityData.DataValue<?>> nmsDataValues = dataValues.entrySet().stream().map(entry -> {
|
||||||
int index = entry.getKey();
|
int index = entry.getKey();
|
||||||
Number value = entry.getValue();
|
Number value = entry.getValue();
|
||||||
@@ -80,7 +73,8 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
};
|
};
|
||||||
}).collect(Collectors.toList());
|
}).collect(Collectors.toList());
|
||||||
|
|
||||||
return new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
ClientboundSetEntityDataPacket packet = new ClientboundSetEntityDataPacket(entityId, nmsDataValues);
|
||||||
|
for (Player player : sendTo) sendPacket(player, packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -506,60 +500,4 @@ public class NMSPackets extends NMSCommon implements me.lojosho.hibiscuscommons.
|
|||||||
fakeNmsEntity.passengers = ImmutableList.of();
|
fakeNmsEntity.passengers = ImmutableList.of();
|
||||||
return packet;
|
return packet;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleParticleCloud(int entityId, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.AREA_EFFECT_CLOUD;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, CLOUD_EFFECT_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleArmorstand(int entityId, Location location, UUID uuid, byte mask, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = net.minecraft.world.entity.EntityType.ARMOR_STAND;
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
|
|
||||||
final Map<Integer, Number> dataValues = Map.of(0, mask, 15, (byte) 0x10);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, dataValues);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sendInvisibleEntity(int entityId, EntityType type, Location location, UUID uuid, List<Player> sendTo) {
|
|
||||||
net.minecraft.world.entity.EntityType<?> nmsEntityType = CraftEntityType.bukkitToMinecraft(type);
|
|
||||||
double x = location.getX();
|
|
||||||
double y = location.getY();
|
|
||||||
double z = location.getZ();
|
|
||||||
float yaw = location.getYaw();
|
|
||||||
float pitch = location.getPitch();
|
|
||||||
Vec3 velocity = Vec3.ZERO;
|
|
||||||
float headYaw = 0f;
|
|
||||||
|
|
||||||
final ClientboundAddEntityPacket spawnPacket = new ClientboundAddEntityPacket(entityId, uuid, x, y, z, yaw, pitch, nmsEntityType, 0, velocity, headYaw);
|
|
||||||
final ClientboundSetEntityDataPacket dataPacket = getSharedEntityPacket(entityId, GENERIC_INVISIBLE_DATA_VALUES);
|
|
||||||
|
|
||||||
ClientboundBundlePacket bundlePacket = new ClientboundBundlePacket(List.of(spawnPacket, dataPacket));
|
|
||||||
sendPacket(sendTo, bundlePacket);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user