mirror of
https://github.com/xSquishyLiam/mc-GeyserModelEngine-plugin.git
synced 2025-12-19 23:09:25 +00:00
fix
This commit is contained in:
@@ -5,16 +5,19 @@ import com.ticxo.modelengine.api.events.AddModelEvent;
|
|||||||
import com.ticxo.modelengine.api.events.AnimationEndEvent;
|
import com.ticxo.modelengine.api.events.AnimationEndEvent;
|
||||||
import com.ticxo.modelengine.api.events.AnimationPlayEvent;
|
import com.ticxo.modelengine.api.events.AnimationPlayEvent;
|
||||||
import com.ticxo.modelengine.api.events.RemoveModelEvent;
|
import com.ticxo.modelengine.api.events.RemoveModelEvent;
|
||||||
|
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 com.ticxo.modelengine.api.model.ModeledEntity;
|
||||||
import me.zimzaza4.geyserutils.spigot.api.PlayerUtils;
|
import me.zimzaza4.geyserutils.spigot.api.PlayerUtils;
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Entity;
|
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.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.EntityChangeBlockEvent;
|
||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.event.entity.EntitySpawnEvent;
|
import org.bukkit.event.entity.EntitySpawnEvent;
|
||||||
import org.bukkit.event.entity.ProjectileHitEvent;
|
import org.bukkit.event.entity.ProjectileHitEvent;
|
||||||
@@ -28,6 +31,8 @@ import re.imc.geysermodelengine.model.ModelEntity;
|
|||||||
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
public class ModelListener implements Listener {
|
public class ModelListener implements Listener {
|
||||||
|
|
||||||
@@ -37,9 +42,9 @@ public class ModelListener implements Listener {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getTarget().getModel(event.getModel().getBlueprint().getName()).isPresent()) {
|
|
||||||
return;
|
UUID entityId = event.getTarget().getBase().getUUID();
|
||||||
}
|
ModelBlueprint blueprint = event.getModel().getBlueprint();
|
||||||
|
|
||||||
Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> {
|
Bukkit.getScheduler().runTask(GeyserModelEngine.getInstance(), () -> {
|
||||||
ModelEntity.create(event.getTarget(), event.getModel());
|
ModelEntity.create(event.getTarget(), event.getModel());
|
||||||
@@ -47,10 +52,9 @@ public class ModelListener implements Listener {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
public void onRemoveModel(RemoveModelEvent event) {
|
public void onRemoveModel(RemoveModelEvent event) {
|
||||||
event.getTarget().getBase();
|
|
||||||
// todo?
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import org.bukkit.util.BoundingBox;
|
|||||||
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.listener.ModelListener;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
import java.util.concurrent.atomic.AtomicInteger;
|
||||||
@@ -83,14 +84,13 @@ public class EntityTask {
|
|||||||
if (activeModel.isRemoved() || !modeledEntity.getBase().isAlive()) {
|
if (activeModel.isRemoved() || !modeledEntity.getBase().isAlive()) {
|
||||||
if (!modeledEntity.getBase().isAlive()) {
|
if (!modeledEntity.getBase().isAlive()) {
|
||||||
|
|
||||||
if (!activeModel.isRemoved()) {
|
if (!activeModel.isRemoved() && hasAnimation("death")) {
|
||||||
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.min(Math.max(playAnimation(animation, 999, 0f) - 3, 0), 200));
|
}.runTaskLater(GeyserModelEngine.getInstance(), Math.min(Math.max(playAnimation("death", 999, 5f, true) - 3, 0), 200));
|
||||||
} else {
|
} else {
|
||||||
new BukkitRunnable() {
|
new BukkitRunnable() {
|
||||||
@Override
|
@Override
|
||||||
@@ -154,6 +154,7 @@ public class EntityTask {
|
|||||||
playAnimation("idle", 0);
|
playAnimation("idle", 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tick % 40 == 0) {
|
if (tick % 40 == 0) {
|
||||||
|
|
||||||
for (Player viewer : Set.copyOf(viewers)) {
|
for (Player viewer : Set.copyOf(viewers)) {
|
||||||
@@ -205,7 +206,9 @@ public class EntityTask {
|
|||||||
PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase());
|
PlayerUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase());
|
||||||
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, 0f);
|
if (looping) {
|
||||||
|
playBedrockAnimation("animation." + model.getActiveModel().getBlueprint().getName() + "." + lastAnimation, looping, 0f);
|
||||||
|
}
|
||||||
sendHitBox(player);
|
sendHitBox(player);
|
||||||
sendScale(player);
|
sendScale(player);
|
||||||
Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> {
|
Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> {
|
||||||
@@ -237,9 +240,9 @@ public class EntityTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public int playAnimation(String animation, int p) {
|
public int playAnimation(String animation, int p) {
|
||||||
return playAnimation(animation, p, 0);
|
return playAnimation(animation, p, 0, false);
|
||||||
}
|
}
|
||||||
public int playAnimation(String animation, int p, float blendTime) {
|
public int playAnimation(String animation, int p, float blendTime, boolean forceLoop) {
|
||||||
|
|
||||||
ActiveModel activeModel = model.getActiveModel();
|
ActiveModel activeModel = model.getActiveModel();
|
||||||
|
|
||||||
@@ -264,7 +267,7 @@ public class EntityTask {
|
|||||||
firstAnimation = false;
|
firstAnimation = false;
|
||||||
}
|
}
|
||||||
boolean lastLoopState = looping;
|
boolean lastLoopState = looping;
|
||||||
looping = animationProperty.getLoopMode() == BlueprintAnimation.LoopMode.LOOP;;
|
looping = forceLoop || animationProperty.getLoopMode() == BlueprintAnimation.LoopMode.LOOP;;
|
||||||
|
|
||||||
if (lastAnimation.equals(animation)) {
|
if (lastAnimation.equals(animation)) {
|
||||||
if (looping) {
|
if (looping) {
|
||||||
@@ -274,6 +277,7 @@ public class EntityTask {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (play) {
|
if (play) {
|
||||||
currentAnimationPriority.set(p);
|
currentAnimationPriority.set(p);
|
||||||
|
|
||||||
@@ -326,15 +330,14 @@ public class EntityTask {
|
|||||||
*/
|
*/
|
||||||
private void playBedrockAnimation(String animationId, boolean loop, float blendTime) {
|
private void playBedrockAnimation(String animationId, boolean loop, float blendTime) {
|
||||||
|
|
||||||
// model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId));
|
model.getViewers().forEach(viewer -> viewer.sendActionBar("CURRENT AN:" + animationId));
|
||||||
|
|
||||||
Entity entity = model.getEntity();
|
Entity entity = model.getEntity();
|
||||||
Set<Player> viewers = model.getViewers();
|
Set<Player> viewers = model.getViewers();
|
||||||
|
|
||||||
Animation.AnimationBuilder animation = Animation.builder()
|
Animation.AnimationBuilder animation = Animation.builder()
|
||||||
.animation(animationId)
|
.animation(animationId)
|
||||||
.blendOutTime(blendTime)
|
.blendOutTime(blendTime);
|
||||||
.controller("controller.animation.armor_stand.wiggle");
|
|
||||||
|
|
||||||
if (loop) {
|
if (loop) {
|
||||||
animation.nextState(animationId);
|
animation.nextState(animationId);
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
skin-send-delay: 0
|
skin-send-delay: 0
|
||||||
skin-view-distance: 50
|
skin-view-distance: 50
|
||||||
join-send-delay: 20
|
join-send-delay: 20
|
||||||
model-entity-type: BAT # must be a living entity
|
model-entity-type: BAT # must be a living entity
|
||||||
|
debug: false
|
||||||
Reference in New Issue
Block a user