mirror of
https://github.com/xSquishyLiam/mc-GeyserModelEngine-plugin.git
synced 2025-12-19 14:59:19 +00:00
Now we use PacketEvents
This commit is contained in:
10
.idea/jarRepositories.xml
generated
10
.idea/jarRepositories.xml
generated
@@ -1,6 +1,11 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="RemoteRepositoriesConfiguration">
|
<component name="RemoteRepositoriesConfiguration">
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="codemc-snapshots" />
|
||||||
|
<option name="name" value="codemc-snapshots" />
|
||||||
|
<option name="url" value="https://repo.codemc.io/repository/maven-snapshots/" />
|
||||||
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="central" />
|
<option name="id" value="central" />
|
||||||
<option name="name" value="Central Repository" />
|
<option name="name" value="Central Repository" />
|
||||||
@@ -21,6 +26,11 @@
|
|||||||
<option name="name" value="opencollab-release-repo" />
|
<option name="name" value="opencollab-release-repo" />
|
||||||
<option name="url" value="https://repo.opencollab.dev/maven-releases/" />
|
<option name="url" value="https://repo.opencollab.dev/maven-releases/" />
|
||||||
</remote-repository>
|
</remote-repository>
|
||||||
|
<remote-repository>
|
||||||
|
<option name="id" value="codemc-releases" />
|
||||||
|
<option name="name" value="codemc-releases" />
|
||||||
|
<option name="url" value="https://repo.codemc.io/repository/maven-releases/" />
|
||||||
|
</remote-repository>
|
||||||
<remote-repository>
|
<remote-repository>
|
||||||
<option name="id" value="dmulloy2-repo" />
|
<option name="id" value="dmulloy2-repo" />
|
||||||
<option name="name" value="dmulloy2-repo" />
|
<option name="name" value="dmulloy2-repo" />
|
||||||
|
|||||||
1
.idea/misc.xml
generated
1
.idea/misc.xml
generated
@@ -1,4 +1,3 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
<project version="4">
|
||||||
<component name="EntryPointsManager">
|
<component name="EntryPointsManager">
|
||||||
<list size="1">
|
<list size="1">
|
||||||
|
|||||||
38
pom.xml
38
pom.xml
@@ -30,7 +30,27 @@
|
|||||||
<plugin>
|
<plugin>
|
||||||
<groupId>org.apache.maven.plugins</groupId>
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
<artifactId>maven-shade-plugin</artifactId>
|
<artifactId>maven-shade-plugin</artifactId>
|
||||||
<version>3.2.4</version>
|
<version>3.4.1</version>
|
||||||
|
<configuration>
|
||||||
|
<relocations>
|
||||||
|
<relocation>
|
||||||
|
<pattern>com.github.retrooper.packetevents</pattern>
|
||||||
|
<shadedPattern>re.imc.geysermodelengine.libs.com.github.retrooper.packetevents</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>io.github.retrooper.packetevents</pattern>
|
||||||
|
<shadedPattern>re.imc.geysermodelengine.libs.io.github.retrooper.packetevents</shadedPattern>
|
||||||
|
</relocation>
|
||||||
|
</relocations>
|
||||||
|
<filters>
|
||||||
|
<filter>
|
||||||
|
<artifact>*:*</artifact>
|
||||||
|
<excludes>
|
||||||
|
<exclude>net/kyori/**</exclude>
|
||||||
|
</excludes>
|
||||||
|
</filter>
|
||||||
|
</filters>
|
||||||
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
<execution>
|
<execution>
|
||||||
<phase>package</phase>
|
<phase>package</phase>
|
||||||
@@ -94,6 +114,14 @@
|
|||||||
<id>dmulloy2-repo</id>
|
<id>dmulloy2-repo</id>
|
||||||
<url>https://repo.dmulloy2.net/repository/public/</url>
|
<url>https://repo.dmulloy2.net/repository/public/</url>
|
||||||
</repository>
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>codemc-releases</id>
|
||||||
|
<url>https://repo.codemc.io/repository/maven-releases/</url>
|
||||||
|
</repository>
|
||||||
|
<repository>
|
||||||
|
<id>codemc-snapshots</id>
|
||||||
|
<url>https://repo.codemc.io/repository/maven-snapshots/</url>
|
||||||
|
</repository>
|
||||||
</repositories>
|
</repositories>
|
||||||
|
|
||||||
<dependencies>
|
<dependencies>
|
||||||
@@ -123,10 +151,10 @@
|
|||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.github.retrooper</groupId>
|
||||||
<artifactId>ProtocolLib</artifactId>
|
<artifactId>packetevents-spigot</artifactId>
|
||||||
<version>5.3.0-SNAPSHOT</version>
|
<version>2.6.0</version>
|
||||||
<scope>provided</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@@ -1,7 +1,9 @@
|
|||||||
package re.imc.geysermodelengine;
|
package re.imc.geysermodelengine;
|
||||||
|
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.github.retrooper.packetevents.PacketEvents;
|
||||||
import com.comphenix.protocol.wrappers.Pair;
|
import com.github.retrooper.packetevents.event.PacketListenerPriority;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
|
||||||
import com.google.common.cache.Cache;
|
import com.google.common.cache.Cache;
|
||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import com.ticxo.modelengine.api.ModelEngineAPI;
|
import com.ticxo.modelengine.api.ModelEngineAPI;
|
||||||
@@ -9,11 +11,10 @@ import com.ticxo.modelengine.api.model.ActiveModel;
|
|||||||
import com.ticxo.modelengine.api.model.ModeledEntity;
|
import com.ticxo.modelengine.api.model.ModeledEntity;
|
||||||
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import lombok.Setter;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.World;
|
import org.bukkit.World;
|
||||||
import org.bukkit.entity.Entity;
|
import org.bukkit.entity.Entity;
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
import re.imc.geysermodelengine.listener.ModelListener;
|
import re.imc.geysermodelengine.listener.ModelListener;
|
||||||
@@ -44,9 +45,6 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
@Getter
|
@Getter
|
||||||
private int viewDistance;
|
private int viewDistance;
|
||||||
|
|
||||||
@Getter
|
|
||||||
private EntityType modelEntityType;
|
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private Cache<Player, Boolean> joinedPlayer;
|
private Cache<Player, Boolean> joinedPlayer;
|
||||||
|
|
||||||
@@ -70,16 +68,21 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
private ScheduledExecutorService scheduler;
|
private ScheduledExecutorService scheduler;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onLoad() {
|
||||||
|
PacketEvents.getAPI().load();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
// Plugin startup logic
|
PacketEvents.getAPI().init();
|
||||||
saveDefaultConfig();
|
saveDefaultConfig();
|
||||||
// alwaysSendSkin = getConfig().getBoolean("always-send-skin");
|
// alwaysSendSkin = getConfig().getBoolean("always-send-skin");
|
||||||
sendDelay = getConfig().getInt("data-send-delay", 0);
|
sendDelay = getConfig().getInt("data-send-delay", 0);
|
||||||
scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 4));
|
scheduler = Executors.newScheduledThreadPool(getConfig().getInt("thread-pool-size", 4));
|
||||||
viewDistance = getConfig().getInt("entity-view-distance", 60);
|
viewDistance = getConfig().getInt("entity-view-distance", 60);
|
||||||
debug = getConfig().getBoolean("debug", false);
|
debug = getConfig().getBoolean("debug", false);
|
||||||
modelEntityType = EntityType.valueOf(getConfig().getString("model-entity-type", "BAT"));
|
|
||||||
joinSendDelay = getConfig().getInt("join-send-delay", 20);
|
joinSendDelay = getConfig().getInt("join-send-delay", 20);
|
||||||
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
|
entityPositionUpdatePeriod = getConfig().getLong("entity-position-update-period", 35);
|
||||||
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
|
enablePartVisibilityModels.addAll(getConfig().getStringList("enable-part-visibility-models"));
|
||||||
@@ -88,8 +91,30 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
.expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build();
|
.expireAfterWrite(joinSendDelay * 50L, TimeUnit.MILLISECONDS).build();
|
||||||
}
|
}
|
||||||
instance = this;
|
instance = this;
|
||||||
// ProtocolLibrary.getProtocolManager().addPacketListener(new AddEntityPacketListener());
|
PacketEvents.getAPI().getEventManager().registerListener(new MountPacketListener(), PacketListenerPriority.NORMAL);
|
||||||
ProtocolLibrary.getProtocolManager().addPacketListener(new MountPacketListener());
|
/*
|
||||||
|
scheduler.scheduleAtFixedRate(() -> {
|
||||||
|
try {
|
||||||
|
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
|
||||||
|
models.values().forEach(ModelEntity::teleportToModel);
|
||||||
|
}
|
||||||
|
} catch (Throwable t) {
|
||||||
|
t.printStackTrace();
|
||||||
|
}
|
||||||
|
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
scheduler.scheduleWithFixedDelay(() -> {
|
||||||
|
try {
|
||||||
|
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
|
||||||
|
models.values().forEach(model -> model.getTask().updateEntityProperties(model.getViewers(), false));
|
||||||
|
}
|
||||||
|
} catch (Throwable t) {
|
||||||
|
t.printStackTrace();
|
||||||
|
}
|
||||||
|
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
|
||||||
|
|
||||||
|
|
||||||
Bukkit.getPluginManager().registerEvents(new ModelListener(), this);
|
Bukkit.getPluginManager().registerEvents(new ModelListener(), this);
|
||||||
Bukkit.getScheduler()
|
Bukkit.getScheduler()
|
||||||
@@ -109,37 +134,13 @@ public final class GeyserModelEngine extends JavaPlugin {
|
|||||||
|
|
||||||
}, 100);
|
}, 100);
|
||||||
|
|
||||||
;
|
|
||||||
|
|
||||||
scheduler.scheduleAtFixedRate(() -> {
|
|
||||||
try {
|
|
||||||
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
|
|
||||||
models.values().forEach(ModelEntity::teleportToModel);
|
|
||||||
}
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
scheduler.scheduleWithFixedDelay(() -> {
|
|
||||||
try {
|
|
||||||
for (Map<ActiveModel, ModelEntity> models : ModelEntity.ENTITIES.values()) {
|
|
||||||
models.values().forEach(model -> model.getTask().updateEntityProperties(model.getViewers(), false));
|
|
||||||
}
|
|
||||||
} catch (Throwable t) {
|
|
||||||
t.printStackTrace();
|
|
||||||
}
|
|
||||||
}, 10, entityPositionUpdatePeriod, TimeUnit.MILLISECONDS);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
BedrockMountControl.startTask();
|
BedrockMountControl.startTask();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
|
PacketEvents.getAPI().terminate();
|
||||||
for (Map<ActiveModel, ModelEntity> entities : ModelEntity.ENTITIES.values()) {
|
for (Map<ActiveModel, ModelEntity> entities : ModelEntity.ENTITIES.values()) {
|
||||||
entities.forEach((model, modelEntity) -> {
|
entities.forEach((model, modelEntity) -> {
|
||||||
modelEntity.getEntity().remove();
|
modelEntity.getEntity().remove();
|
||||||
|
|||||||
@@ -1,39 +1,20 @@
|
|||||||
package re.imc.geysermodelengine.listener;
|
package re.imc.geysermodelengine.listener;
|
||||||
|
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
import com.ticxo.modelengine.api.events.AddModelEvent;
|
||||||
import com.comphenix.protocol.wrappers.Pair;
|
import com.ticxo.modelengine.api.events.ModelDismountEvent;
|
||||||
import com.destroystokyo.paper.event.entity.EntityRemoveFromWorldEvent;
|
import com.ticxo.modelengine.api.events.ModelMountEvent;
|
||||||
import com.ticxo.modelengine.api.ModelEngineAPI;
|
import com.ticxo.modelengine.api.events.RemoveModelEvent;
|
||||||
import com.ticxo.modelengine.api.events.*;
|
|
||||||
import com.ticxo.modelengine.api.generator.blueprint.ModelBlueprint;
|
|
||||||
import com.ticxo.modelengine.api.model.ActiveModel;
|
import com.ticxo.modelengine.api.model.ActiveModel;
|
||||||
import com.ticxo.modelengine.api.model.ModeledEntity;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import com.ticxo.modelengine.api.model.render.ModelRenderer;
|
|
||||||
import me.zimzaza4.geyserutils.spigot.api.EntityUtils;
|
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.Entity;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
import org.bukkit.event.Listener;
|
import org.bukkit.event.Listener;
|
||||||
import org.bukkit.event.entity.*;
|
|
||||||
import org.bukkit.event.player.PlayerJoinEvent;
|
import org.bukkit.event.player.PlayerJoinEvent;
|
||||||
import org.bukkit.event.player.PlayerQuitEvent;
|
|
||||||
import org.bukkit.event.world.EntitiesLoadEvent;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
|
||||||
import org.geysermc.floodgate.api.FloodgateApi;
|
|
||||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||||
import re.imc.geysermodelengine.model.EntityTask;
|
|
||||||
import re.imc.geysermodelengine.model.ModelEntity;
|
import re.imc.geysermodelengine.model.ModelEntity;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.UUID;
|
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
|
|
||||||
public class ModelListener implements Listener {
|
public class ModelListener implements Listener {
|
||||||
|
|
||||||
@@ -58,7 +39,6 @@ public class ModelListener implements Listener {
|
|||||||
public void onModelMount(ModelMountEvent event) {
|
public void onModelMount(ModelMountEvent event) {
|
||||||
Map<ActiveModel, ModelEntity> map = ModelEntity.ENTITIES.get(event.getVehicle().getModeledEntity().getBase().getEntityId());
|
Map<ActiveModel, ModelEntity> map = ModelEntity.ENTITIES.get(event.getVehicle().getModeledEntity().getBase().getEntityId());
|
||||||
if (map == null) {
|
if (map == null) {
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
if (!event.isDriver()) {
|
if (!event.isDriver()) {
|
||||||
return;
|
return;
|
||||||
@@ -66,7 +46,7 @@ public class ModelListener implements Listener {
|
|||||||
ModelEntity model = map.get(event.getVehicle());
|
ModelEntity model = map.get(event.getVehicle());
|
||||||
|
|
||||||
if (model != null && event.getPassenger() instanceof Player player) {
|
if (model != null && event.getPassenger() instanceof Player player) {
|
||||||
GeyserModelEngine.getInstance().getDrivers().put(player, new Pair<>(event.getVehicle(), event.getSeat()));
|
GeyserModelEngine.getInstance().getDrivers().put(player, Pair.of(event.getVehicle(), event.getSeat()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,6 +61,7 @@ public class ModelListener implements Listener {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@EventHandler(priority = EventPriority.MONITOR)
|
@EventHandler(priority = EventPriority.MONITOR)
|
||||||
public void onModelEntityHurt(EntityDamageEvent event) {
|
public void onModelEntityHurt(EntityDamageEvent event) {
|
||||||
@@ -99,7 +80,7 @@ public class ModelListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*/
|
|
||||||
/*
|
/*
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
@@ -138,8 +119,4 @@ public class ModelListener implements Listener {
|
|||||||
GeyserModelEngine.getInstance().getJoinedPlayer().put(event.getPlayer(), true);
|
GeyserModelEngine.getInstance().getJoinedPlayer().put(event.getPlayer(), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
|
||||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
|
||||||
GeyserModelEngine.getInstance().getDrivers().remove(event.getPlayer());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,35 +1,29 @@
|
|||||||
package re.imc.geysermodelengine.listener;
|
package re.imc.geysermodelengine.listener;
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
import com.github.retrooper.packetevents.event.PacketListener;
|
||||||
import com.comphenix.protocol.events.ListenerOptions;
|
import com.github.retrooper.packetevents.event.PacketReceiveEvent;
|
||||||
import com.comphenix.protocol.events.ListenerPriority;
|
import com.github.retrooper.packetevents.protocol.packettype.PacketType;
|
||||||
import com.comphenix.protocol.events.PacketAdapter;
|
import com.github.retrooper.packetevents.wrapper.play.client.WrapperPlayClientEntityAction;
|
||||||
import com.comphenix.protocol.events.PacketEvent;
|
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
|
||||||
import com.comphenix.protocol.wrappers.Pair;
|
|
||||||
import com.ticxo.modelengine.api.ModelEngineAPI;
|
import com.ticxo.modelengine.api.ModelEngineAPI;
|
||||||
import com.ticxo.modelengine.api.model.ActiveModel;
|
import com.ticxo.modelengine.api.model.ActiveModel;
|
||||||
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
||||||
import com.ticxo.modelengine.api.mount.controller.MountController;
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.geysermc.floodgate.api.FloodgateApi;
|
import org.geysermc.floodgate.api.FloodgateApi;
|
||||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||||
|
|
||||||
import java.util.Set;
|
public class MountPacketListener implements PacketListener {
|
||||||
|
|
||||||
public class MountPacketListener extends PacketAdapter {
|
|
||||||
public MountPacketListener() {
|
|
||||||
super(GeyserModelEngine.getInstance(), ListenerPriority.HIGHEST, Set.of(PacketType.Play.Client.ENTITY_ACTION), ListenerOptions.ASYNC);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPacketReceiving(PacketEvent event) {
|
public void onPacketReceive(PacketReceiveEvent event) {
|
||||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId())) {
|
if (event.getPacketType() != PacketType.Play.Client.ENTITY_ACTION) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
if (!FloodgateApi.getInstance().isFloodgatePlayer(event.getUser().getUUID())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
WrapperPlayClientEntityAction action = new WrapperPlayClientEntityAction(event);
|
||||||
Pair<ActiveModel, Mount> seat = GeyserModelEngine.getInstance().getDrivers().get(event.getPlayer());
|
Pair<ActiveModel, Mount> seat = GeyserModelEngine.getInstance().getDrivers().get(event.getPlayer());
|
||||||
if (seat != null) {
|
if (seat != null) {
|
||||||
if (event.getPacket().getPlayerActions().read(0) == EnumWrappers.PlayerAction.START_SNEAKING) {
|
if (action.getAction() == WrapperPlayClientEntityAction.Action.START_SNEAKING) {
|
||||||
ModelEngineAPI.getMountPairManager().tryDismount(event.getPlayer());
|
ModelEngineAPI.getMountPairManager().tryDismount(event.getPlayer());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package re.imc.geysermodelengine.model;
|
package re.imc.geysermodelengine.model;
|
||||||
|
|
||||||
import com.comphenix.protocol.wrappers.Pair;
|
|
||||||
import com.ticxo.modelengine.api.ModelEngineAPI;
|
import com.ticxo.modelengine.api.ModelEngineAPI;
|
||||||
import com.ticxo.modelengine.api.entity.BukkitEntity;
|
import com.ticxo.modelengine.api.entity.BukkitEntity;
|
||||||
import com.ticxo.modelengine.api.model.ActiveModel;
|
import com.ticxo.modelengine.api.model.ActiveModel;
|
||||||
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
||||||
import com.ticxo.modelengine.api.mount.controller.MountController;
|
import com.ticxo.modelengine.api.mount.controller.MountController;
|
||||||
|
import org.apache.commons.lang3.tuple.Pair;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.scheduler.BukkitRunnable;
|
import org.bukkit.scheduler.BukkitRunnable;
|
||||||
@@ -15,6 +15,7 @@ import re.imc.geysermodelengine.GeyserModelEngine;
|
|||||||
public class BedrockMountControl {
|
public class BedrockMountControl {
|
||||||
|
|
||||||
public static void startTask() {
|
public static void startTask() {
|
||||||
|
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
@@ -38,7 +39,7 @@ public class BedrockMountControl {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (pitch > 80) {
|
if (pitch > 80) {
|
||||||
if (seat.getFirst().getModeledEntity().getBase() instanceof BukkitEntity bukkitEntity) {
|
if (seat.getKey().getModeledEntity().getBase() instanceof BukkitEntity bukkitEntity) {
|
||||||
if (bukkitEntity.getOriginal().isOnGround()) {
|
if (bukkitEntity.getOriginal().isOnGround()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -60,5 +61,8 @@ public class BedrockMountControl {
|
|||||||
|
|
||||||
}
|
}
|
||||||
}.runTaskTimerAsynchronously(GeyserModelEngine.getInstance(), 1, 1);
|
}.runTaskTimerAsynchronously(GeyserModelEngine.getInstance(), 1, 1);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,6 +58,8 @@ public class EntityTask {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.teleportToModel();
|
||||||
|
|
||||||
Set<Player> viewers = model.getViewers();
|
Set<Player> viewers = model.getViewers();
|
||||||
ActiveModel activeModel = model.getActiveModel();
|
ActiveModel activeModel = model.getActiveModel();
|
||||||
ModeledEntity modeledEntity = model.getModeledEntity();
|
ModeledEntity modeledEntity = model.getModeledEntity();
|
||||||
@@ -333,7 +335,7 @@ public class EntityTask {
|
|||||||
Location entityLocation = entity.getLocation().clone();
|
Location entityLocation = entity.getLocation().clone();
|
||||||
playerLocation.setY(0);
|
playerLocation.setY(0);
|
||||||
entityLocation.setY(0);
|
entityLocation.setY(0);
|
||||||
if (playerLocation.distanceSquared(entityLocation) > player.getSendViewDistance() * player.getSendViewDistance() * 16) {
|
if (playerLocation.distanceSquared(entityLocation) > player.getSendViewDistance() * player.getSendViewDistance() * 48) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
CullType type = model.getActiveModel().getModeledEntity().getBase().getData().getTracking().get(player);
|
CullType type = model.getActiveModel().getModeledEntity().getBase().getData().getTracking().get(player);
|
||||||
|
|||||||
@@ -1,16 +1,14 @@
|
|||||||
package re.imc.geysermodelengine.model;
|
package re.imc.geysermodelengine.model;
|
||||||
|
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
|
||||||
import com.google.common.collect.Sets;
|
import com.google.common.collect.Sets;
|
||||||
|
import com.ticxo.modelengine.api.entity.BukkitEntity;
|
||||||
import com.ticxo.modelengine.api.model.ActiveModel;
|
import com.ticxo.modelengine.api.model.ActiveModel;
|
||||||
import com.ticxo.modelengine.api.model.ModeledEntity;
|
import com.ticxo.modelengine.api.model.ModeledEntity;
|
||||||
|
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.bukkit.metadata.FixedMetadataValue;
|
|
||||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||||
import re.imc.geysermodelengine.packet.entity.PacketEntity;
|
import re.imc.geysermodelengine.packet.entity.PacketEntity;
|
||||||
|
|
||||||
@@ -61,7 +59,7 @@ public class ModelEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public PacketEntity spawnEntity() {
|
public PacketEntity spawnEntity() {
|
||||||
entity = new PacketEntity(GeyserModelEngine.getInstance().getModelEntityType(), viewers, modeledEntity.getBase().getLocation());
|
entity = new PacketEntity(EntityTypes.BAT, viewers, modeledEntity.getBase().getLocation());
|
||||||
return entity;
|
return entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,22 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
public class EntityDestroyPacket implements WrapperPacket {
|
|
||||||
|
|
||||||
private final int id;
|
|
||||||
|
|
||||||
public EntityDestroyPacket(int id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketContainer encode() {
|
|
||||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_DESTROY);
|
|
||||||
packet.getIntLists().write(0, Collections.singletonList(this.id));
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
|
|
||||||
public class EntityEquipmentPacket implements WrapperPacket {
|
|
||||||
|
|
||||||
private final int id;
|
|
||||||
private final EnumWrappers.ItemSlot slot;
|
|
||||||
private final ItemStack itemStack;
|
|
||||||
public EntityEquipmentPacket(int id, EnumWrappers.ItemSlot slot, ItemStack itemStack) {
|
|
||||||
this.id = id;
|
|
||||||
this.slot = slot;
|
|
||||||
this.itemStack = itemStack;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketContainer encode() {
|
|
||||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_EQUIPMENT);
|
|
||||||
packet.getIntegers().writeSafely(0, id);
|
|
||||||
packet.getItemSlots().writeSafely(0, slot);
|
|
||||||
packet.getItemModifier().writeSafely(0, itemStack);
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,25 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
|
|
||||||
public class EntityHurtPacket implements WrapperPacket {
|
|
||||||
|
|
||||||
private final int id;
|
|
||||||
|
|
||||||
public EntityHurtPacket(int id) {
|
|
||||||
this.id = id;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketContainer encode() {
|
|
||||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.DAMAGE_EVENT);
|
|
||||||
packet.getIntegers().writeSafely(0, id);
|
|
||||||
packet.getIntegers().writeSafely(1,0);
|
|
||||||
packet.getIntegers().writeSafely(2, 0);
|
|
||||||
packet.getIntegers().writeSafely(3, 0);
|
|
||||||
|
|
||||||
packet.getBooleans().writeSafely(0, false);
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher;
|
|
||||||
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class EntityMetadataPacket implements WrapperPacket {
|
|
||||||
private final int id;
|
|
||||||
private final String name;
|
|
||||||
|
|
||||||
public EntityMetadataPacket(int id, String name) {
|
|
||||||
this.id = id;
|
|
||||||
this.name = name;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketContainer encode() {
|
|
||||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_METADATA);
|
|
||||||
packet.getIntegers().write(0, id);
|
|
||||||
WrappedDataWatcher watcher = new WrappedDataWatcher();
|
|
||||||
watcher.setOptionalChatComponent(0, Optional.of(WrappedChatComponent.fromLegacyText(name)) ,true);
|
|
||||||
packet.getWatchableCollectionModifier().writeSafely(0, watcher.getWatchableObjects());
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
public class EntitySpawnPacket implements WrapperPacket {
|
|
||||||
|
|
||||||
private final int id;
|
|
||||||
private final UUID uuid;
|
|
||||||
private final EntityType type;
|
|
||||||
private final Location location;
|
|
||||||
public EntitySpawnPacket(int entityID, UUID uuid, EntityType type, Location location) {
|
|
||||||
this.id = entityID;
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.type = type;
|
|
||||||
this.location = location;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public PacketContainer encode() {
|
|
||||||
PacketContainer packet = ProtocolLibrary.getProtocolManager()
|
|
||||||
.createPacket(PacketType.Play.Server.SPAWN_ENTITY);
|
|
||||||
packet.getIntegers()
|
|
||||||
.write(0, this.id);
|
|
||||||
packet.getUUIDs()
|
|
||||||
.write(0, this.uuid);
|
|
||||||
packet.getDoubles()
|
|
||||||
.write(0, this.location.getX())
|
|
||||||
.write(1, this.location.getY())
|
|
||||||
.write(2, this.location.getZ());
|
|
||||||
packet.getBytes()
|
|
||||||
.write(0, (byte) (this.location.getPitch() * 256.0F / 360.0F))
|
|
||||||
.write(1, (byte) (this.location.getYaw() * 256.0F / 360.0F))
|
|
||||||
.writeSafely(2, (byte) (this.location.getYaw() * 256.0F / 360.0F));
|
|
||||||
|
|
||||||
packet.getEntityTypeModifier()
|
|
||||||
.writeSafely(0, type);
|
|
||||||
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.PacketType;
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
import org.bukkit.Location;
|
|
||||||
|
|
||||||
public class EntityTeleportPacket implements WrapperPacket {
|
|
||||||
|
|
||||||
private final int id;
|
|
||||||
private final Location loc;
|
|
||||||
|
|
||||||
public EntityTeleportPacket(int entityID, Location location) {
|
|
||||||
this.id = entityID;
|
|
||||||
this.loc = location;
|
|
||||||
}
|
|
||||||
@Override
|
|
||||||
public PacketContainer encode() {
|
|
||||||
PacketContainer packet = new PacketContainer(PacketType.Play.Server.ENTITY_TELEPORT);
|
|
||||||
packet.getIntegers().write(0, this.id);
|
|
||||||
packet.getDoubles().write(0, loc.getX());
|
|
||||||
packet.getDoubles().write(1, loc.getY());
|
|
||||||
packet.getDoubles().write(2, loc.getZ());
|
|
||||||
|
|
||||||
packet.getBytes().write(0, (byte) (loc.getYaw() * 256.0F / 360.0F));
|
|
||||||
packet.getBytes().write(1, (byte) (loc.getPitch() * 256.0F / 360.0F));
|
|
||||||
return packet;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
package re.imc.geysermodelengine.packet;
|
|
||||||
|
|
||||||
import com.comphenix.protocol.events.PacketContainer;
|
|
||||||
|
|
||||||
public interface WrapperPacket {
|
|
||||||
|
|
||||||
default WrapperPacket decode() { return null; };
|
|
||||||
default PacketContainer encode() { return null; };
|
|
||||||
}
|
|
||||||
@@ -1,28 +1,33 @@
|
|||||||
package re.imc.geysermodelengine.packet.entity;
|
package re.imc.geysermodelengine.packet.entity;
|
||||||
|
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.github.retrooper.packetevents.PacketEvents;
|
||||||
import com.comphenix.protocol.utility.MinecraftVersion;
|
import com.github.retrooper.packetevents.manager.server.ServerVersion;
|
||||||
import com.comphenix.protocol.wrappers.EnumWrappers;
|
import com.github.retrooper.packetevents.protocol.entity.EntityPositionData;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.type.EntityType;
|
||||||
|
import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes;
|
||||||
|
import com.github.retrooper.packetevents.protocol.teleport.RelativeFlag;
|
||||||
|
import com.github.retrooper.packetevents.util.Vector3d;
|
||||||
|
import com.github.retrooper.packetevents.wrapper.PacketWrapper;
|
||||||
|
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDestroyEntities;
|
||||||
|
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityPositionSync;
|
||||||
|
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityTeleport;
|
||||||
|
import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnEntity;
|
||||||
|
import io.github.retrooper.packetevents.util.SpigotConversionUtil;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.entity.EntityType;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import re.imc.geysermodelengine.packet.*;
|
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||||
|
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.Map;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import java.util.concurrent.ThreadLocalRandom;
|
import java.util.concurrent.ThreadLocalRandom;
|
||||||
|
|
||||||
@Getter
|
@Getter
|
||||||
public class PacketEntity {
|
public class PacketEntity {
|
||||||
|
|
||||||
public static final MinecraftVersion V1_20_5 = new MinecraftVersion("1.20.5");
|
// public static final MinecraftVersion V1_20_5 = new MinecraftVersion("1.20.5");
|
||||||
public PacketEntity(EntityType type, Set<Player> viewers, Location location) {
|
public PacketEntity(EntityType type, Set<Player> viewers, Location location) {
|
||||||
this.id = ThreadLocalRandom.current().nextInt(300000000, 400000000);
|
this.id = ThreadLocalRandom.current().nextInt(300000000, 400000000);
|
||||||
this.uuid = UUID.randomUUID();
|
this.uuid = UUID.randomUUID();
|
||||||
@@ -37,13 +42,65 @@ public class PacketEntity {
|
|||||||
private Set<Player> viewers;
|
private Set<Player> viewers;
|
||||||
private Location location;
|
private Location location;
|
||||||
private boolean removed = false;
|
private boolean removed = false;
|
||||||
|
|
||||||
private Map<EnumWrappers.ItemSlot, ItemStack> equipment = new ConcurrentHashMap<>();
|
|
||||||
|
|
||||||
public @NotNull Location getLocation() {
|
public @NotNull Location getLocation() {
|
||||||
return location;
|
return location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean teleport(@NotNull Location location) {
|
||||||
|
boolean sent = this.location.getWorld() != location.getWorld() || this.location.distanceSquared(location) > 0.000001;
|
||||||
|
this.location = location.clone();
|
||||||
|
if (sent) {
|
||||||
|
GeyserModelEngine.getInstance().getLogger().info("SEND LOC PACKET TO: " + viewers);
|
||||||
|
sendLocationPacket(viewers);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public void remove() {
|
||||||
|
removed = true;
|
||||||
|
sendEntityDestroyPacket(viewers);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDead() {
|
||||||
|
return removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isValid() {
|
||||||
|
return !removed;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendSpawnPacket(Collection<Player> players) {
|
||||||
|
// EntitySpawnPacket packet = new EntitySpawnPacket(id, uuid, type, location);
|
||||||
|
// EntityMetadataPacket metadataPacket = new EntityMetadataPacket(id);
|
||||||
|
WrapperPlayServerSpawnEntity spawnEntity = new WrapperPlayServerSpawnEntity(id, uuid, EntityTypes.BAT, SpigotConversionUtil.fromBukkitLocation(location), location.getYaw(), 0, null);
|
||||||
|
players.forEach(player -> PacketEvents.getAPI().getPlayerManager().sendPacket(player, spawnEntity));
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendLocationPacket(Collection<Player> players) {
|
||||||
|
|
||||||
|
PacketWrapper<?> packet;
|
||||||
|
EntityPositionData data = new EntityPositionData(SpigotConversionUtil.fromBukkitLocation(location).getPosition(), Vector3d.zero(), location.getYaw(), location.getPitch());
|
||||||
|
if (PacketEvents.getAPI().getServerManager().getVersion().isNewerThanOrEquals(ServerVersion.V_1_21_2)) {
|
||||||
|
packet = new WrapperPlayServerEntityPositionSync(id, data, false);
|
||||||
|
} else {
|
||||||
|
packet = new WrapperPlayServerEntityTeleport(id, data, RelativeFlag.NONE,false);
|
||||||
|
}
|
||||||
|
players.forEach(player -> PacketEvents.getAPI().getPlayerManager().sendPacket(player, packet));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendEntityDestroyPacket(Collection<Player> players) {
|
||||||
|
WrapperPlayServerDestroyEntities packet = new WrapperPlayServerDestroyEntities(id);
|
||||||
|
players.forEach(player -> PacketEvents.getAPI().getPlayerManager().sendPacket(player, packet));
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getEntityId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
public boolean teleport(@NotNull Location location) {
|
public boolean teleport(@NotNull Location location) {
|
||||||
this.location = location.clone();
|
this.location = location.clone();
|
||||||
sendLocationPacket(viewers);
|
sendLocationPacket(viewers);
|
||||||
@@ -86,7 +143,7 @@ public class PacketEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void sendLocationPacket(Collection<Player> players) {
|
public void sendLocationPacket(Collection<Player> players) {
|
||||||
EntityTeleportPacket packet = new EntityTeleportPacket(id, location);
|
WrapperPacket packet = MinecraftVersion.v1_21_2.atOrAbove() ? new EntityPositionSyncPacket(id, location) : new EntityTeleportPacket(id, location);
|
||||||
players.forEach(player -> ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet.encode()));
|
players.forEach(player -> ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet.encode()));
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -94,10 +151,10 @@ public class PacketEntity {
|
|||||||
public void sendHurtPacket(Collection<Player> players) {
|
public void sendHurtPacket(Collection<Player> players) {
|
||||||
// 1.21 error
|
// 1.21 error
|
||||||
if (MinecraftVersion.getCurrentVersion().compareTo(V1_20_5) < 0) {
|
if (MinecraftVersion.getCurrentVersion().compareTo(V1_20_5) < 0) {
|
||||||
EntityHurtPacket packet = new EntityHurtPacket(id);
|
}
|
||||||
players.forEach(player -> ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet.encode()));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
EntityHurtPacket packet = new EntityHurtPacket(id);
|
||||||
|
players.forEach(player -> ProtocolLibrary.getProtocolManager().sendServerPacket(player, packet.encode()));
|
||||||
|
|
||||||
public void sendEntityDestroyPacket(Collection<Player> players) {
|
public void sendEntityDestroyPacket(Collection<Player> players) {
|
||||||
EntityDestroyPacket packet = new EntityDestroyPacket(id);
|
EntityDestroyPacket packet = new EntityDestroyPacket(id);
|
||||||
@@ -119,5 +176,6 @@ public class PacketEntity {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,5 +7,4 @@ authors:
|
|||||||
api-version: '1.19'
|
api-version: '1.19'
|
||||||
depend:
|
depend:
|
||||||
- ModelEngine
|
- ModelEngine
|
||||||
- floodgate
|
- floodgate
|
||||||
- ProtocolLib
|
|
||||||
Reference in New Issue
Block a user