|
13 | 13 | import lombok.Setter;
|
14 | 14 | import me.zimzaza4.geyserutils.spigot.api.EntityUtils;
|
15 | 15 | import org.bukkit.Bukkit;
|
| 16 | +import org.bukkit.Location; |
16 | 17 | import org.bukkit.entity.Player;
|
17 | 18 | import org.bukkit.scheduler.BukkitRunnable;
|
18 | 19 | import org.geysermc.floodgate.api.FloodgateApi;
|
@@ -61,14 +62,8 @@ public void runAsync() {
|
61 | 62 | ActiveModel activeModel = model.getActiveModel();
|
62 | 63 | ModeledEntity modeledEntity = model.getModeledEntity();
|
63 | 64 | if (activeModel.isDestroyed() || activeModel.isRemoved()) {
|
64 |
| - new BukkitRunnable() { |
65 |
| - @Override |
66 |
| - public void run() { |
67 |
| - removed = true; |
68 |
| - entity.remove(); |
69 |
| - } |
70 |
| - }.runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), 1); |
71 |
| - |
| 65 | + removed = true; |
| 66 | + entity.remove(); |
72 | 67 |
|
73 | 68 | ENTITIES.remove(modeledEntity.getBase().getEntityId());
|
74 | 69 | MODEL_ENTITIES.remove(entity.getEntityId());
|
@@ -142,25 +137,25 @@ private void sendSpawnPacket(Player onlinePlayer) {
|
142 | 137 | delay = GeyserModelEngine.getInstance().getJoinSendDelay();
|
143 | 138 | }
|
144 | 139 | if (task == null || firstJoined) {
|
145 |
| - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { |
| 140 | + GeyserModelEngine.getInstance().getScheduler().schedule(() -> { |
146 | 141 | model.getTask().sendEntityData(onlinePlayer, 1);
|
147 |
| - }, delay); |
| 142 | + }, delay, TimeUnit.MILLISECONDS); |
148 | 143 | } else {
|
149 | 144 | task.sendEntityData(onlinePlayer, 1);
|
150 | 145 | }
|
151 | 146 | }
|
152 | 147 |
|
153 | 148 | public void sendEntityData(Player player, int delay) {
|
154 | 149 | EntityUtils.setCustomEntity(player, model.getEntity().getEntityId(), "modelengine:" + model.getActiveModel().getBlueprint().getName().toLowerCase());
|
155 |
| - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { |
| 150 | + GeyserModelEngine.getInstance().getScheduler().schedule(() -> { |
156 | 151 | model.getEntity().sendSpawnPacket(Collections.singletonList(player));
|
157 |
| - Bukkit.getScheduler().runTaskLaterAsynchronously(GeyserModelEngine.getInstance(), () -> { |
| 152 | + GeyserModelEngine.getInstance().getScheduler().schedule(() -> { |
158 | 153 | sendHitBox(player);
|
159 | 154 | sendScale(Collections.singleton(player), true);
|
160 | 155 | sendColor(Collections.singleton(player), true);
|
161 | 156 | updateEntityProperties(Collections.singleton(player), true);
|
162 |
| - }, 1); |
163 |
| - }, delay); |
| 157 | + }, 20, TimeUnit.MILLISECONDS); |
| 158 | + }, delay * 20L, TimeUnit.MILLISECONDS); |
164 | 159 | }
|
165 | 160 |
|
166 | 161 | public void sendScale(Collection<Player> players, boolean firstSend) {
|
@@ -334,6 +329,13 @@ private boolean canSee(Player player, PacketEntity entity) {
|
334 | 329 | if (GeyserModelEngine.getInstance().getJoinedPlayer() != null && GeyserModelEngine.getInstance().getJoinedPlayer().getIfPresent(player) != null) {
|
335 | 330 | return false;
|
336 | 331 | }
|
| 332 | + Location playerLocation = player.getLocation(); |
| 333 | + Location entityLocation = entity.getLocation(); |
| 334 | + playerLocation.setY(0); |
| 335 | + entityLocation.setY(0); |
| 336 | + if (playerLocation.distanceSquared(entityLocation) > player.getSendViewDistance() * player.getSendViewDistance()) { |
| 337 | + return false; |
| 338 | + } |
337 | 339 | CullType type = model.getActiveModel().getModeledEntity().getBase().getData().getTracking().get(player);
|
338 | 340 | return type != null;
|
339 | 341 | /*
|
|
0 commit comments