mirror of
https://github.com/GeyserExtensionists/GeyserModelEngine.git
synced 2025-12-19 15:09:18 +00:00
Fix Rotation & Support run without floodgate
This commit is contained in:
@@ -8,6 +8,7 @@ import io.github.retrooper.packetevents.factory.spigot.SpigotPacketEventsBuilder
|
||||
import org.bstats.bukkit.Metrics;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.plugin.java.JavaPlugin;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import re.imc.geysermodelengine.listener.ModelListener;
|
||||
import re.imc.geysermodelengine.listener.MountPacketListener;
|
||||
import re.imc.geysermodelengine.managers.ConfigManager;
|
||||
@@ -16,6 +17,7 @@ import re.imc.geysermodelengine.managers.model.EntityTaskManager;
|
||||
import re.imc.geysermodelengine.managers.model.ModelManager;
|
||||
import re.imc.geysermodelengine.runnables.BedrockMountControlRunnable;
|
||||
import re.imc.geysermodelengine.runnables.UpdateTaskRunnable;
|
||||
import re.imc.geysermodelengine.util.BedrockUtils;
|
||||
|
||||
import java.util.concurrent.*;
|
||||
|
||||
@@ -43,7 +45,6 @@ public class GeyserModelEngine extends JavaPlugin {
|
||||
loadHooks();
|
||||
loadManagers();
|
||||
loadRunnables();
|
||||
|
||||
loadBStats();
|
||||
|
||||
PacketEvents.getAPI().getEventManager().registerListener(new MountPacketListener(this), PacketListenerPriority.NORMAL);
|
||||
@@ -61,6 +62,9 @@ public class GeyserModelEngine extends JavaPlugin {
|
||||
}
|
||||
|
||||
private void loadHooks() {
|
||||
if (Bukkit.getPluginManager().getPlugin("floodgate") != null) {
|
||||
BedrockUtils.FLOODGATE_API = FloodgateApi.getInstance();
|
||||
}
|
||||
PacketEvents.getAPI().init();
|
||||
CommandAPI.onEnable();
|
||||
}
|
||||
|
||||
@@ -12,9 +12,9 @@ import org.bukkit.event.Listener;
|
||||
import org.bukkit.event.player.PlayerJoinEvent;
|
||||
import org.bukkit.event.player.PlayerQuitEvent;
|
||||
import org.bukkit.event.world.WorldInitEvent;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||
import re.imc.geysermodelengine.managers.model.data.ModelEntityData;
|
||||
import re.imc.geysermodelengine.util.BedrockUtils;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@@ -69,14 +69,14 @@ public class ModelListener implements Listener {
|
||||
@EventHandler
|
||||
public void onPlayerJoin(PlayerJoinEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId())) return;
|
||||
if (!BedrockUtils.isBedrockPlayer(player)) return;
|
||||
Bukkit.getGlobalRegionScheduler().runDelayed(plugin, scheduledTask -> plugin.getModelManager().getPlayerJoinedCache().add(player.getUniqueId()), 10);
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
public void onPlayerQuit(PlayerQuitEvent event) {
|
||||
Player player = event.getPlayer();
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId())) return;
|
||||
if (!BedrockUtils.isBedrockPlayer(player)) return;
|
||||
plugin.getModelManager().getPlayerJoinedCache().remove(player.getUniqueId());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@ import com.ticxo.modelengine.api.model.ActiveModel;
|
||||
import com.ticxo.modelengine.api.model.bone.type.Mount;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||
import re.imc.geysermodelengine.util.BedrockUtils;
|
||||
|
||||
public class MountPacketListener implements PacketListener {
|
||||
|
||||
@@ -23,7 +23,7 @@ public class MountPacketListener implements PacketListener {
|
||||
@Override
|
||||
public void onPacketReceive(PacketReceiveEvent event) {
|
||||
if (event.getPacketType() != PacketType.Play.Client.ENTITY_ACTION) return;
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(event.getUser().getUUID())) return;
|
||||
if (!BedrockUtils.isBedrockPlayer(event.getPlayer())) return;
|
||||
|
||||
Player player = event.getPlayer();
|
||||
|
||||
|
||||
@@ -8,12 +8,12 @@ import me.zimzaza4.geyserutils.spigot.api.EntityUtils;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import org.joml.Vector3fc;
|
||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||
import re.imc.geysermodelengine.managers.model.data.ModelEntityData;
|
||||
import re.imc.geysermodelengine.packet.entity.PacketEntity;
|
||||
import re.imc.geysermodelengine.runnables.EntityTaskRunnable;
|
||||
import re.imc.geysermodelengine.util.BedrockUtils;
|
||||
|
||||
import java.awt.*;
|
||||
import java.lang.reflect.Method;
|
||||
@@ -80,7 +80,7 @@ public class EntityTaskManager {
|
||||
|
||||
public void checkViewers(ModelEntityData model, Set<Player> viewers) {
|
||||
for (Player onlinePlayer : Bukkit.getOnlinePlayers()) {
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(onlinePlayer.getUniqueId())) continue;
|
||||
if (!BedrockUtils.isBedrockPlayer(onlinePlayer)) continue;
|
||||
|
||||
if (canSee(onlinePlayer, model.getEntity())) {
|
||||
if (!viewers.contains(onlinePlayer)) {
|
||||
|
||||
@@ -50,7 +50,7 @@ public class PacketEntity {
|
||||
}
|
||||
|
||||
public boolean teleport(@NotNull Location location) {
|
||||
boolean sent = this.location.getWorld() != location.getWorld() || this.location.distanceSquared(location) > 0.000001;
|
||||
boolean sent = this.location.getWorld() != location.getWorld() || this.location.distanceSquared(location) > 0.000001 || this.location.getYaw() != location.getYaw() || this.location.getPitch() != location.getPitch();
|
||||
this.location = location.clone();
|
||||
|
||||
if (sent) sendLocationPacket(viewers);
|
||||
|
||||
@@ -9,8 +9,8 @@ import io.papermc.paper.threadedregions.scheduler.ScheduledTask;
|
||||
import org.apache.commons.lang3.tuple.Pair;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
import re.imc.geysermodelengine.GeyserModelEngine;
|
||||
import re.imc.geysermodelengine.util.BedrockUtils;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
@@ -25,7 +25,7 @@ public class BedrockMountControlRunnable implements Consumer<ScheduledTask> {
|
||||
@Override
|
||||
public void accept(ScheduledTask scheduledTask) {
|
||||
for (Player player : Bukkit.getOnlinePlayers()) {
|
||||
if (!FloodgateApi.getInstance().isFloodgatePlayer(player.getUniqueId())) continue;
|
||||
if (!BedrockUtils.isBedrockPlayer(player)) continue;
|
||||
|
||||
float pitch = player.getLocation().getPitch();
|
||||
Pair<ActiveModel, Mount> seat = plugin.getModelManager().getDriversCache().get(player.getUniqueId());
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package re.imc.geysermodelengine.util;
|
||||
|
||||
import org.bukkit.entity.Player;
|
||||
import org.geysermc.floodgate.api.FloodgateApi;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
public class BedrockUtils {
|
||||
|
||||
public static FloodgateApi FLOODGATE_API;
|
||||
|
||||
public static boolean isBedrockPlayer(Player player) {
|
||||
if (FLOODGATE_API != null) {
|
||||
return FLOODGATE_API.isFloodgatePlayer(player.getUniqueId());
|
||||
}
|
||||
return Objects.equals(player.getClientBrandName(), "Geyser");
|
||||
}
|
||||
}
|
||||
@@ -18,4 +18,4 @@ dependencies:
|
||||
ModelEngine:
|
||||
required: true
|
||||
floodgate:
|
||||
required: true
|
||||
required: false
|
||||
Reference in New Issue
Block a user