diff --git a/bukkit/loader/src/main/resources/commands.yml b/bukkit/loader/src/main/resources/commands.yml index 313d117b4..fdf4e1613 100644 --- a/bukkit/loader/src/main/resources/commands.yml +++ b/bukkit/loader/src/main/resources/commands.yml @@ -111,13 +111,6 @@ list_resource: - /craftengine resource list - /ce resource list -set_max_visible_furniture: - enable: false - permission: ce.command.player.set_max_visible_furniture - usage: - - /craftengine feature set-max-visible-furniture - - /ce feature set-max-visible-furniture - # Debug commands debug_set_block: enable: true diff --git a/bukkit/loader/src/main/resources/config.yml b/bukkit/loader/src/main/resources/config.yml index 8d6d19bfe..18053ebc2 100644 --- a/bukkit/loader/src/main/resources/config.yml +++ b/bukkit/loader/src/main/resources/config.yml @@ -181,10 +181,6 @@ furniture: # interaction (best performance) # boat (better compatibility with some anti-cheat plugin) collision-entity-type: interaction - # Limit the maximum amount of furniture that players can see by default - max-visible-furniture: - enable: false - amount: 100 emoji: chat: true diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java index 40cbc68ee..c1f1c3f39 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/BukkitCommandManager.java @@ -52,8 +52,7 @@ public class BukkitCommandManager extends AbstractCommandManager new DisableResourceCommand(this, plugin), new ListResourceCommand(this, plugin), new UploadPackCommand(this, plugin), - new SendResourcePackCommand(this, plugin), - new SetMaxVisibleFurnitureCommand(this, plugin) + new SendResourcePackCommand(this, plugin) )); final LegacyPaperCommandManager manager = (LegacyPaperCommandManager) getCommandManager(); manager.settings().set(ManagerSetting.ALLOW_UNSAFE_REGISTRATION, true); diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SetMaxVisibleFurnitureCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SetMaxVisibleFurnitureCommand.java deleted file mode 100644 index e71b6f43d..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/SetMaxVisibleFurnitureCommand.java +++ /dev/null @@ -1,36 +0,0 @@ -package net.momirealms.craftengine.bukkit.plugin.command.feature; - -import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; -import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; -import net.momirealms.craftengine.core.plugin.CraftEngine; -import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.incendo.cloud.Command; -import org.incendo.cloud.CommandManager; -import org.incendo.cloud.parser.standard.IntegerParser; - -public class SetMaxVisibleFurnitureCommand extends BukkitCommandFeature { - - public SetMaxVisibleFurnitureCommand(CraftEngineCommandManager commandManager, CraftEngine plugin) { - super(commandManager, plugin); - } - - @Override - public Command.Builder assembleCommand(CommandManager manager, Command.Builder builder) { - return builder - .senderType(Player.class) - .required("max", IntegerParser.integerParser(1)) - .handler(context -> { - // 需要找一个更好的存储方案去兼容跨服和在初始化的时候加载 - BukkitServerPlayer cePlayer = plugin().adapt(context.sender()); - Integer max = context.get("max"); - cePlayer.setMaxVisibleFurniture(max, true); - }); - } - - @Override - public String getFeatureID() { - return "set_max_visible_furniture"; - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java index 00e8c84de..ab1b59966 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/command/feature/TestCommand.java @@ -1,8 +1,6 @@ package net.momirealms.craftengine.bukkit.plugin.command.feature; -import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.plugin.command.BukkitCommandFeature; -import net.momirealms.craftengine.bukkit.plugin.user.BukkitServerPlayer; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import org.bukkit.Material; @@ -40,27 +38,19 @@ public class TestCommand extends BukkitCommandFeature { public Command.Builder assembleCommand(org.incendo.cloud.CommandManager manager, Command.Builder builder) { return builder .senderType(Player.class) - // .required("reset", BooleanParser.booleanParser()) - // .required("setTag", NamespacedKeyParser.namespacedKeyParser()) - // .required("targetBlock", StringParser.stringComponent(StringParser.StringMode.GREEDY_FLAG_YIELDING).suggestionProvider(new SuggestionProvider<>() { - // @Override - // public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { - // return CompletableFuture.completedFuture(TARGET_BLOCK_SUGGESTIONS); - // } - // })) + .required("reset", BooleanParser.booleanParser()) + .required("setTag", NamespacedKeyParser.namespacedKeyParser()) + .required("targetBlock", StringParser.stringComponent(StringParser.StringMode.GREEDY_FLAG_YIELDING).suggestionProvider(new SuggestionProvider<>() { + @Override + public @NonNull CompletableFuture> suggestionsFuture(@NonNull CommandContext context, @NonNull CommandInput input) { + return CompletableFuture.completedFuture(TARGET_BLOCK_SUGGESTIONS); + } + })) .handler(context -> { Player player = context.sender(); - BukkitServerPlayer cePlayer = plugin().adapt(player); - player.sendMessage("visualFurnitureView: " + cePlayer.visualFurnitureView().getTotalMembers()); - player.sendMessage(cePlayer.visualFurnitureView() + "\n==============================="); - // cePlayer.visualFurnitureView().getAllElements().forEach(element -> { - // LoadedFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId()); - // if (furniture == null || !player.canSee(furniture.baseEntity())) { - // cePlayer.visualFurnitureView().removeByEntityId(element.entityId()); - // player.sendMessage("remove: " + element.entityId()); - // } - // }); - // player.sendMessage("visualFurnitureView2: " + cePlayer.visualFurnitureView().getTotalMembers()); + player.sendMessage("开始测试"); + NamespacedKey key = context.get("setTag"); + player.sendMessage("结束测试"); }); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 2719be684..66f26b85a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -1600,33 +1600,8 @@ public class PacketConsumers { // Furniture BukkitFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(entityId); if (furniture != null) { - Player player = (Player) user.platformPlayer(); - List fakeEntityIds = furniture.fakeEntityIds(); - user.entityPacketHandlers().computeIfAbsent(entityId, k -> new FurniturePacketHandler(fakeEntityIds)); - if (Config.enableMaxVisibleFurniture()) { - if (user.visualFurnitureView().getTotalMembers() <= Config.maxVisibleFurniture()) { - user.sendPacket(furniture.spawnPacket(player), false); - } - int[] entityIdsArray = new int[fakeEntityIds.size() + 2]; - entityIdsArray[0] = -114514; - entityIdsArray[1] = entityId; - for (int i = 0; i < fakeEntityIds.size(); i++) { - entityIdsArray[i + 2] = fakeEntityIds.get(i); - } - double distance = furniture.location().distanceSquared(player.getLocation()); - 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()) { - BukkitFurniture 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); - } + user.entityPacketHandlers().computeIfAbsent(entityId, k -> new FurniturePacketHandler(furniture.fakeEntityIds())); + user.sendPacket(furniture.spawnPacket((Player) user.platformPlayer()), false); if (Config.hideBaseEntity() && !furniture.hasExternalModel()) { event.setCancelled(true); } @@ -1668,25 +1643,11 @@ public class PacketConsumers { FriendlyByteBuf buf = event.getBuffer(); boolean isChange = false; IntList intList = buf.readIntIdList(); - int first = intList.getFirst(); - if (first != -114514) { - for (int i = 0, size = intList.size(); i < size; i++) { - int entityId = intList.getInt(i); - EntityPacketHandler handler = user.entityPacketHandlers().remove(entityId); - if (handler != null && handler.handleEntitiesRemove(intList)) { - user.visualFurnitureView().removeByEntityId(entityId); - isChange = true; - } - } - } else { - intList.removeFirst(); - isChange = true; - for (int i = 0, size = intList.size(); i < size; i++) { - int entityId = intList.getInt(i); - EntityPacketHandler handler = user.entityPacketHandlers().get(entityId); - if (handler != null) { - handler.handleEntitiesRemove(intList); - } + for (int i = 0, size = intList.size(); i < size; i++) { + int entityId = intList.getInt(i); + EntityPacketHandler handler = user.entityPacketHandlers().remove(entityId); + if (handler != null && handler.handleEntitiesRemove(intList)) { + isChange = true; } } if (isChange) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java index b04238a43..40fac266a 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/user/BukkitServerPlayer.java @@ -4,8 +4,6 @@ import com.google.common.collect.Lists; import io.netty.channel.Channel; import net.kyori.adventure.text.Component; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; -import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurniture; -import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; import net.momirealms.craftengine.bukkit.item.BukkitItemManager; import net.momirealms.craftengine.bukkit.nms.FastNMS; import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine; @@ -25,7 +23,6 @@ import net.momirealms.craftengine.core.plugin.network.ConnectionState; import net.momirealms.craftengine.core.plugin.network.EntityPacketHandler; import net.momirealms.craftengine.core.plugin.network.ProtocolVersion; import net.momirealms.craftengine.core.util.Direction; -import net.momirealms.craftengine.core.util.DynamicPriorityTracker; import net.momirealms.craftengine.core.util.Key; import net.momirealms.craftengine.core.util.VersionHelper; import net.momirealms.craftengine.core.world.BlockPos; @@ -40,7 +37,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.PlayerInventory; import org.bukkit.potion.PotionEffect; import org.bukkit.potion.PotionEffectType; -import org.bukkit.persistence.PersistentDataType; import org.bukkit.util.RayTraceResult; import org.jetbrains.annotations.Nullable; @@ -50,7 +46,6 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; public class BukkitServerPlayer extends Player { - public static final NamespacedKey MAX_VISIBLE_FURNITURE_KEY = Objects.requireNonNull(NamespacedKey.fromString("craftengine:max_visible_furniture")); private final BukkitCraftEngine plugin; // handshake private ProtocolVersion protocolVersion = ProtocolVersion.UNKNOWN; @@ -99,10 +94,8 @@ public class BukkitServerPlayer extends Player { // cache interaction range here private int lastUpdateInteractionRangeTick; private double cachedInteractionRange; - private Integer maxVisibleFurniture = -1; private final Map entityTypeView = new ConcurrentHashMap<>(); - private final DynamicPriorityTracker visualFurnitureView = new DynamicPriorityTracker(); public BukkitServerPlayer(BukkitCraftEngine plugin, Channel channel) { this.channel = channel; @@ -114,9 +107,6 @@ public class BukkitServerPlayer extends Player { this.serverPlayerRef = new WeakReference<>(FastNMS.INSTANCE.method$CraftPlayer$getHandle(player)); this.uuid = player.getUniqueId(); this.name = player.getName(); - this.maxVisibleFurniture = player.getPersistentDataContainer() - .getOrDefault(MAX_VISIBLE_FURNITURE_KEY, PersistentDataType.INTEGER, -1); - this.visualFurnitureView.setMaxVisibleFurniture(this.maxVisibleFurniture); } @Override @@ -353,7 +343,6 @@ public class BukkitServerPlayer extends Player { } if (this.gameTicks % 30 == 0) { this.updateGUI(); - this.updateVisualFurnitureView(); } if (this.isDestroyingBlock) { this.tickBlockDestroy(); @@ -378,26 +367,6 @@ public class BukkitServerPlayer extends Player { } } - private void updateVisualFurnitureView() { - if (!Config.enableMaxVisibleFurniture()) return; - if (visualFurnitureView().getTotalMembers() <= Config.maxVisibleFurniture()) return; - for (DynamicPriorityTracker.Element element : visualFurnitureView().getAllElements()) { - BukkitFurniture furniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(element.entityId()); - if (furniture == null || !furniture.isValid()) continue; - double distance = furniture.location().distanceSquared(platformPlayer().getLocation()); - DynamicPriorityTracker.Element newElement = new DynamicPriorityTracker.Element(element.entityId(), distance, element.removePacket()); - DynamicPriorityTracker.UpdateResult result = visualFurnitureView().addOrUpdateElement(newElement); - for (DynamicPriorityTracker.Element resultElement : result.getEntered()) { - BukkitFurniture updateFurniture = BukkitFurnitureManager.instance().loadedFurnitureByRealEntityId(resultElement.entityId()); - if (updateFurniture == null || !updateFurniture.isValid()) continue; - sendPacket(updateFurniture.spawnPacket(platformPlayer()), false); - } - for (DynamicPriorityTracker.Element resultElement : result.getExited()) { - sendPacket(resultElement.removePacket(), false); - } - } - } - @Override public float getDestroyProgress(Object blockState, BlockPos pos) { return FastNMS.INSTANCE.method$BlockStateBase$getDestroyProgress(blockState, serverPlayer(), FastNMS.INSTANCE.field$CraftWorld$ServerLevel(platformPlayer().getWorld()), LocationUtils.toBlockPos(pos)); @@ -773,23 +742,6 @@ public class BukkitServerPlayer extends Player { return this.entityTypeView; } - @Override - public DynamicPriorityTracker visualFurnitureView() { - return this.visualFurnitureView; - } - - @Override - public void setMaxVisibleFurniture(int maxVisibleFurniture, boolean fromCommand) { - if (fromCommand) { - platformPlayer().getPersistentDataContainer() - .set(MAX_VISIBLE_FURNITURE_KEY, PersistentDataType.INTEGER, maxVisibleFurniture); - this.maxVisibleFurniture = maxVisibleFurniture; - } - this.visualFurnitureView.setMaxVisibleFurniture( - this.maxVisibleFurniture == -1 ? maxVisibleFurniture : this.maxVisibleFurniture - ); - } - public void setResendSound() { resentSoundTick = gameTicks(); } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index 96d399ae3..304a9abed 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -132,9 +132,6 @@ public abstract class CraftEngine implements Plugin { long time1 = System.currentTimeMillis(); // firstly reload main config this.config.load(); - for (Player player : this.networkManager().onlineUsers()) { - player.setMaxVisibleFurniture(Config.maxVisibleFurniture(), false); - } // reset debugger this.debugger = Config.debug() ? (s) -> logger.info("[Debug] " + s.get()) : (s) -> {}; // now we reload the translations diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java index 6099fd69d..be96fe1ed 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/Config.java @@ -110,8 +110,6 @@ public class Config { protected Map furniture$handle_invalid_furniture_on_chunk_load$mapping; protected boolean furniture$hide_base_entity; protected ColliderType furniture$collision_entity_type; - protected boolean furniture$max_visible_furniture_enable; - protected int furniture$max_visible_furniture_amount; protected boolean block$sound_system$enable; protected boolean block$simplify_adventure_break_check; @@ -302,8 +300,6 @@ public class Config { furniture$handle_invalid_furniture_on_chunk_load$mapping = builder.build(); furniture$hide_base_entity = config.getBoolean("furniture.hide-base-entity", true); furniture$collision_entity_type = ColliderType.valueOf(config.getString("furniture.collision-entity-type", "interaction").toUpperCase(Locale.ENGLISH)); - furniture$max_visible_furniture_enable = config.getBoolean("furniture.max-visible-furniture.enable", false); - furniture$max_visible_furniture_amount = config.getInt("furniture.max-visible-furniture.amount", 100); // block block$sound_system$enable = config.getBoolean("block.sound-system.enable", true); @@ -421,14 +417,6 @@ public class Config { return instance.resource_pack$supported_version$min; } - public static boolean enableMaxVisibleFurniture() { - return instance.furniture$max_visible_furniture_enable; - } - - public static int maxVisibleFurniture() { - return instance.furniture$max_visible_furniture_amount; - } - public static float packMaxVersion() { return instance.resource_pack$supported_version$max; } diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java index a0283efab..cf9442fee 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/network/NetWorkUser.java @@ -2,7 +2,6 @@ package net.momirealms.craftengine.core.plugin.network; import io.netty.channel.Channel; import net.momirealms.craftengine.core.plugin.Plugin; -import net.momirealms.craftengine.core.util.DynamicPriorityTracker; import net.momirealms.craftengine.core.util.Key; import org.jetbrains.annotations.ApiStatus; @@ -44,10 +43,6 @@ public interface NetWorkUser { Map entityPacketHandlers(); - DynamicPriorityTracker visualFurnitureView(); - - void setMaxVisibleFurniture(int maxVisibleFurniture, boolean fromCommand); - boolean clientModEnabled(); void setClientModState(boolean enable); diff --git a/core/src/main/java/net/momirealms/craftengine/core/util/DynamicPriorityTracker.java b/core/src/main/java/net/momirealms/craftengine/core/util/DynamicPriorityTracker.java deleted file mode 100644 index f538a6269..000000000 --- a/core/src/main/java/net/momirealms/craftengine/core/util/DynamicPriorityTracker.java +++ /dev/null @@ -1,194 +0,0 @@ -package net.momirealms.craftengine.core.util; - -import net.momirealms.craftengine.core.plugin.config.Config; - -import java.util.*; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.locks.ReentrantLock; - -public class DynamicPriorityTracker { - - public static class Element { - private final int entityId; - private volatile double distance; - private final Object removePacket; - - public Element(int entityId, double distance, Object removePacket) { - this.entityId = entityId; - this.distance = distance; - this.removePacket = removePacket; - } - - public int entityId() { - return entityId; - } - public double distance() { - return distance; - } - public void setDistance(double distance) { - this.distance = distance; - } - public Object removePacket() { - return removePacket; - } - - @Override - public String toString() { - return "Element{" + - "entityId=" + entityId + - ", distance=" + distance + - ", removePacket=" + removePacket + - '}'; - } - } - - public static class UpdateResult { - private final List entered = new ArrayList<>(); - private final List exited = new ArrayList<>(); - - public List getEntered() { - return entered; - } - public List getExited() { - return exited; - } - - void addEntered(Element e) { - entered.add(e); - } - void addExited(Element e) { - exited.add(e); - } - - @Override - public String toString() { - return "UpdateResult{" + - "entered=" + entered + - ", exited=" + exited + - '}'; - } - } - - private Integer maxVisibleFurniture; - private final PriorityQueue maxHeap; - private final Map elementMap = new ConcurrentHashMap<>(); - private final Set inHeapSet = ConcurrentHashMap.newKeySet(); - private final ReentrantLock heapLock = new ReentrantLock(); - - public DynamicPriorityTracker() { - this.maxVisibleFurniture = Config.maxVisibleFurniture(); - this.maxHeap = new PriorityQueue<>((a, b) -> Double.compare(b.distance, a.distance)); - } - - public void setMaxVisibleFurniture(int maxVisibleFurniture) { - this.maxVisibleFurniture = maxVisibleFurniture; - } - - public UpdateResult addOrUpdateElement(Element newElement) { - UpdateResult result = new UpdateResult(); - heapLock.lock(); - try { - Element existing = elementMap.get(newElement.entityId); - - if (existing != null) { - return handleExistingElement(existing, newElement, result); - } else { - return handleNewElement(newElement, result); - } - } finally { - heapLock.unlock(); - } - } - - private UpdateResult handleNewElement(Element newElement, UpdateResult result) { - elementMap.put(newElement.entityId, newElement); - - if (maxHeap.size() < maxVisibleFurniture) { - maxHeap.offer(newElement); - inHeapSet.add(newElement.entityId); - result.addEntered(newElement); - } else if (maxHeap.peek() != null && newElement.distance < maxHeap.peek().distance) { - Element removed = maxHeap.poll(); - inHeapSet.remove(removed.entityId); - result.addExited(removed); - - maxHeap.offer(newElement); - inHeapSet.add(newElement.entityId); - result.addEntered(newElement); - } - return result; - } - - private UpdateResult handleExistingElement(Element existing, Element newElement, UpdateResult result) { - existing.setDistance(newElement.distance); - - boolean wasInHeap = inHeapSet.contains(existing.entityId); - boolean nowInHeap = checkIfShouldBeInHeap(existing.distance); - - if (wasInHeap) { - maxHeap.remove(existing); - maxHeap.offer(existing); - } else if (nowInHeap) { - if (maxHeap.size() < maxVisibleFurniture) { - maxHeap.offer(existing); - inHeapSet.add(existing.entityId); - result.addEntered(existing); - } else if (maxHeap.peek() != null && existing.distance < maxHeap.peek().distance) { - Element removed = maxHeap.poll(); - inHeapSet.remove(removed.entityId); - result.addExited(removed); - - maxHeap.offer(existing); - inHeapSet.add(existing.entityId); - result.addEntered(existing); - } - } - return result; - } - - private boolean checkIfShouldBeInHeap(double distance) { - if (maxHeap.size() < maxVisibleFurniture) return true; - return maxHeap.peek() != null && distance < maxHeap.peek().distance; - } - - public int getTotalMembers() { - heapLock.lock(); - try { - return elementMap.size(); - } finally { - heapLock.unlock(); - } - } - - public List getAllElements() { - heapLock.lock(); - try { - return List.copyOf(elementMap.values()); - } finally { - heapLock.unlock(); - } - } - - public void removeByEntityId(int entityId) { - heapLock.lock(); - try { - Element removed = elementMap.remove(entityId); - if (removed != null) { - maxHeap.remove(removed); - inHeapSet.remove(entityId); - } - } finally { - heapLock.unlock(); - } - } - - @Override - public String toString() { - return "DynamicPriorityTracker{" + - "maxHeap=" + maxHeap + - ", elementMap=" + elementMap + - ", inHeapSet=" + inHeapSet + - ", heapLock=" + heapLock + - '}'; - } -} diff --git a/gradle.properties b/gradle.properties index afbc44234..c17776f19 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ org.gradle.jvmargs=-Xmx1G # Project settings # Rule: [major update].[feature update].[bug fix] project_version=0.0.54.6 -config_version=34 +config_version=33 lang_version=13 project_group=net.momirealms latest_supported_version=1.21.5