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