mirror of
https://github.com/xSquishyLiam/mc-GeyserModelEngine-plugin.git
synced 2025-12-19 14:59:19 +00:00
custom entity
This commit is contained in:
Binary file not shown.
2
pom.xml
2
pom.xml
@@ -112,7 +112,7 @@
|
||||
<dependency>
|
||||
<groupId>me.zimzaza4</groupId>
|
||||
<artifactId>geyserutils-spigot</artifactId>
|
||||
<version>1.0.1</version>
|
||||
<version>1.0.0</version>
|
||||
<scope>system</scope>
|
||||
<systemPath>${project.basedir}/libs/geyserutils-spigot-1.0-SNAPSHOT.jar</systemPath>
|
||||
</dependency>
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package re.imc.geysermodelengine.listener;
|
||||
|
||||
import com.comphenix.protocol.PacketType;
|
||||
import com.comphenix.protocol.ProtocolLibrary;
|
||||
import com.comphenix.protocol.events.*;
|
||||
import com.comphenix.protocol.reflect.StructureModifier;
|
||||
import com.ticxo.modelengine.api.entity.BukkitEntity;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||
import re.imc.geysermodelengine.model.EntityTask;
|
||||
import re.imc.geysermodelengine.model.ModelEntity;
|
||||
|
||||
import java.util.Set;
|
||||
@@ -29,11 +32,22 @@ public class AddEntityPacketListener extends PacketAdapter {
|
||||
|
||||
if (model != null) {
|
||||
if (FloodgateApi.getInstance().isFloodgatePlayer(event.getPlayer().getUniqueId())) {
|
||||
if (GeyserModelEngine.getInstance().getJoinedPlayer() != null && GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(event.getPlayer()) != null) {
|
||||
model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getJoinSendDelay());
|
||||
} else {
|
||||
model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay());
|
||||
if (packet.getMeta("delayed").isPresent()) {
|
||||
return;
|
||||
}
|
||||
EntityTask task = model.getTask();
|
||||
if (task == null) {
|
||||
Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> {
|
||||
model.getTask().sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay());
|
||||
}, 1);
|
||||
} else {
|
||||
task.sendEntityData(event.getPlayer(), GeyserModelEngine.getInstance().getSkinSendDelay());
|
||||
}
|
||||
event.setCancelled(true);
|
||||
Bukkit.getScheduler().runTaskLater(GeyserModelEngine.getInstance(), () -> {
|
||||
packet.setMeta("delayed", 1);
|
||||
ProtocolLibrary.getProtocolManager().sendServerPacket(event.getPlayer(), packet);
|
||||
}, 2);
|
||||
} else {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@@ -59,6 +59,7 @@ public class EntityTask {
|
||||
}
|
||||
|
||||
if (syncTick % 5 == 0) {
|
||||
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) {
|
||||
onlinePlayer.hideEntity(GeyserModelEngine.getInstance(), model.getEntity());
|
||||
@@ -78,16 +79,24 @@ public class EntityTask {
|
||||
ActiveModel activeModel = model.getActiveModel();
|
||||
ModeledEntity modeledEntity = model.getModeledEntity();
|
||||
if (modeledEntity.isDestroyed() || !modeledEntity.getBase().isAlive()) {
|
||||
if (!modeledEntity.isDestroyed() && !modeledEntity.getBase().isAlive()) {
|
||||
|
||||
String animation = hasAnimation("death") ? "death" : "idle";
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
entity.remove();
|
||||
}
|
||||
}.runTaskLater(GeyserModelEngine.getInstance(), Math.max(playAnimation(animation, 99) - 1, 0));
|
||||
if (!modeledEntity.getBase().isAlive()) {
|
||||
|
||||
if (!modeledEntity.isDestroyed()) {
|
||||
String animation = hasAnimation("death") ? "death" : "idle";
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
entity.remove();
|
||||
}
|
||||
}.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation(animation, 99) - 1, 0), 200));
|
||||
} else {
|
||||
new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
entity.remove();
|
||||
}
|
||||
}.runTask(GeyserModelEngine.getInstance());
|
||||
}
|
||||
}
|
||||
ENTITIES.remove(modeledEntity.getBase().getEntityId());
|
||||
MODEL_ENTITIES.remove(entity.getEntityId());
|
||||
@@ -190,8 +199,11 @@ public class EntityTask {
|
||||
}
|
||||
|
||||
public void sendEntityData(Player player, int delay) {
|
||||
GeyserModelEngine.getInstance().getLogger()
|
||||
.info("SEND ENTITY");
|
||||
PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName());
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> {
|
||||
PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName());
|
||||
// PlayerUtils.sendCustomSkin(player, model.getEntity(), model.getActiveModel().getBlueprint().getName());
|
||||
playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping);
|
||||
sendHitBox(player);
|
||||
Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> {
|
||||
@@ -363,6 +375,8 @@ public class EntityTask {
|
||||
}
|
||||
|
||||
public void run(GeyserModelEngine instance, int i) {
|
||||
|
||||
sendHitBoxToAll();
|
||||
syncTask = new BukkitRunnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
|
||||
@@ -6,9 +6,16 @@ import com.ticxo.modelengine.api.model.ActiveModel;
|
||||
import com.ticxo.modelengine.api.model.ModeledEntity;
|
||||
import lombok.Getter;
|
||||
import me.libraryaddict.disguise.DisguiseAPI;
|
||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||
import me.libraryaddict.disguise.disguisetypes.MiscDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.MobDisguise;
|
||||
import me.libraryaddict.disguise.disguisetypes.PlayerDisguise;
|
||||
import me.libraryaddict.disguise.utilities.reflection.ReflectionManager;
|
||||
import me.zimzaza4.geyserutils.spigot.api.PlayerUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Entity;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.entity.LivingEntity;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
@@ -74,11 +81,23 @@ public class ModelEntity {
|
||||
}
|
||||
|
||||
public LivingEntity spawnEntity() {
|
||||
entity = (LivingEntity) modeledEntity.getBase().getLocation().getWorld().spawnEntity(modeledEntity.getBase().getLocation(), GeyserModelEngine.getInstance().getModelEntityType());
|
||||
applyFeatures(entity, "model." + activeModel.getBlueprint().getName());
|
||||
ModelEntity model = this;
|
||||
int lastEntityId = ReflectionManager.getNewEntityId();
|
||||
// System.out.println("RID:" + entityId);
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) {
|
||||
PlayerUtils.setCustomEntity(onlinePlayer, lastEntityId + 1, "modelengine:" + model.getActiveModel().getBlueprint().getName());
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
entity = (LivingEntity) modeledEntity.getBase().getLocation().getWorld().spawnEntity(modeledEntity.getBase().getLocation(), GeyserModelEngine.getInstance().getModelEntityType());
|
||||
|
||||
int id = entity.getEntityId();
|
||||
|
||||
MODEL_ENTITIES.put(id, model);
|
||||
applyFeatures(entity, "model." + activeModel.getBlueprint().getName());
|
||||
|
||||
controllerEntity = new BukkitEntity(entity);
|
||||
return entity;
|
||||
}
|
||||
@@ -102,15 +121,17 @@ public class ModelEntity {
|
||||
display.setPersistent(false);
|
||||
|
||||
// armorStand.setVisible(false);
|
||||
|
||||
/*
|
||||
String uuid = UUID.randomUUID().toString();
|
||||
PlayerDisguise disguise = new PlayerDisguise(name + "_" + uuid);
|
||||
MobDisguise disguise = new MobDisguise(DisguiseType.getType(entity.getType()));
|
||||
disguise.setDisguiseName(uuid);
|
||||
|
||||
DisguiseAPI.disguiseEntity(display, disguise.setNameVisible(false));
|
||||
DisguiseAPI.disguiseEntity(display, disguise);
|
||||
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user