mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-31 04:46:37 +00:00
feat(bukkit): 添加配置文件
This commit is contained in:
@@ -1601,25 +1601,29 @@ public class PacketConsumers {
|
||||
Player player = (Player) user.platformPlayer();
|
||||
List<Integer> fakeEntityIds = furniture.fakeEntityIds();
|
||||
user.entityPacketHandlers().computeIfAbsent(entityId, k -> new FurniturePacketHandler(fakeEntityIds));
|
||||
if (user.visualFurnitureView().getTotalMembers() <= 100) {
|
||||
if (Config.enableMaxVisibleFurniture()) {
|
||||
if (user.visualFurnitureView().getTotalMembers() <= Config.maxVisibleFurniture()) {
|
||||
user.sendPacket(furniture.spawnPacket(player), false);
|
||||
}
|
||||
int[] entityIdsArray = new int[fakeEntityIds.size() + 1];
|
||||
entityIdsArray[0] = entityId;
|
||||
for (int i = 0; i < fakeEntityIds.size(); i++) {
|
||||
entityIdsArray[i + 1] = fakeEntityIds.get(i);
|
||||
}
|
||||
double distance = player.getLocation().distance(furniture.location());
|
||||
Object removePacket = Reflections.constructor$ClientboundRemoveEntitiesPacket.newInstance(entityIdsArray);
|
||||
DynamicPriorityTracker.UpdateResult result = user.visualFurnitureView().addOrUpdateElement(new DynamicPriorityTracker.Element(entityId, distance, removePacket));
|
||||
for (DynamicPriorityTracker.Element element : result.getEntered()) {
|
||||
LoadedFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId());
|
||||
if (updateFurniture == null || !updateFurniture.isValid()) continue;
|
||||
user.sendPacket(updateFurniture.spawnPacket(player), false);
|
||||
}
|
||||
for (DynamicPriorityTracker.Element element : result.getExited()) {
|
||||
user.sendPacket(element.removePacket(), false);
|
||||
}
|
||||
} else {
|
||||
user.sendPacket(furniture.spawnPacket(player), false);
|
||||
}
|
||||
int[] entityIdsArray = new int[fakeEntityIds.size() + 1];
|
||||
entityIdsArray[0] = entityId;
|
||||
for (int i = 0; i < fakeEntityIds.size(); i++) {
|
||||
entityIdsArray[i + 1] = fakeEntityIds.get(i);
|
||||
}
|
||||
double distance = player.getLocation().distance(furniture.location());
|
||||
Object removePacket = Reflections.constructor$ClientboundRemoveEntitiesPacket.newInstance(entityIdsArray);
|
||||
DynamicPriorityTracker.UpdateResult result = user.visualFurnitureView().addOrUpdateElement(new DynamicPriorityTracker.Element(entityId, distance, removePacket));
|
||||
for (DynamicPriorityTracker.Element element : result.getEntered()) {
|
||||
LoadedFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId());
|
||||
if (updateFurniture == null || !updateFurniture.isValid()) continue;
|
||||
user.sendPacket(updateFurniture.spawnPacket(player), false);
|
||||
}
|
||||
for (DynamicPriorityTracker.Element element : result.getExited()) {
|
||||
user.sendPacket(element.removePacket(), false);
|
||||
}
|
||||
if (Config.hideBaseEntity() && !furniture.hasExternalModel()) {
|
||||
event.setCancelled(true);
|
||||
}
|
||||
|
||||
@@ -100,7 +100,7 @@ public class BukkitServerPlayer extends Player {
|
||||
private double cachedInteractionRange;
|
||||
|
||||
private final Map<Integer, EntityPacketHandler> entityTypeView = new ConcurrentHashMap<>();
|
||||
private final DynamicPriorityTracker visualFurnitureView = new DynamicPriorityTracker(100);
|
||||
private final DynamicPriorityTracker visualFurnitureView = new DynamicPriorityTracker();
|
||||
|
||||
public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) {
|
||||
this.channel = channel;
|
||||
@@ -374,7 +374,8 @@ public class BukkitServerPlayer extends Player {
|
||||
}
|
||||
|
||||
private void updateVisualFurnitureView() {
|
||||
if (visualFurnitureView().getTotalMembers() <= 100) return;
|
||||
if (!Config.enableMaxVisibleFurniture()) return;
|
||||
if (visualFurnitureView().getTotalMembers() <= Config.maxVisibleFurniture()) return;
|
||||
for (DynamicPriorityTracker.Element element : visualFurnitureView().getAllElements()) {
|
||||
LoadedFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId());
|
||||
if (furniture == null || !furniture.isValid()) continue;
|
||||
|
||||
Reference in New Issue
Block a user