diff --git a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/ChatBoxPeripheral.java b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/ChatBoxPeripheral.java index d0bcb5c32..873f7a0fe 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/ChatBoxPeripheral.java +++ b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/ChatBoxPeripheral.java @@ -111,8 +111,7 @@ public final MethodResult sendFormattedMessage(@NotNull IArguments arguments) th return withChatOperation(ignored -> { String message = arguments.getString(0); int maxRange = APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get(); - int range = arguments.optInt(4, maxRange); - range = maxRange == -1 ? range : Math.min(range, APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get()); + int range = arguments.optInt(4, -1); ResourceKey dimension = getLevel().dimension(); MutableComponent component = Component.Serializer.fromJson(message); if (component == null) @@ -129,7 +128,7 @@ public final MethodResult sendFormattedMessage(@NotNull IArguments arguments) th for (ServerPlayer player : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers()) { if (!APConfig.PERIPHERALS_CONFIG.chatBoxMultiDimensional.get() && player.getLevel().dimension() != dimension) continue; - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) player.sendSystemMessage(preparedMessage); } return MethodResult.of(true); @@ -141,8 +140,7 @@ public final MethodResult sendMessage(@NotNull IArguments arguments) throws LuaE return withChatOperation(ignored -> { String message = arguments.getString(0); int maxRange = APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get(); - int range = arguments.optInt(4, maxRange); - range = maxRange == -1 ? range : Math.min(range, APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get()); + int range = arguments.optInt(4, -1); ResourceKey dimension = getLevel().dimension(); if (checkBrackets(arguments.optString(2))) return MethodResult.of(null, "incorrect bracket string (e.g. [], {}, <>, ...)"); @@ -155,7 +153,7 @@ public final MethodResult sendMessage(@NotNull IArguments arguments) throws LuaE for (ServerPlayer player : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers()) { if (!APConfig.PERIPHERALS_CONFIG.chatBoxMultiDimensional.get() && player.getLevel().dimension() != dimension) continue; - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) player.sendSystemMessage(preparedMessage); } return MethodResult.of(true); @@ -168,8 +166,7 @@ public final MethodResult sendFormattedMessageToPlayer(@NotNull IArguments argum String message = arguments.getString(0); String playerName = arguments.getString(1); int maxRange = APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get(); - int range = arguments.optInt(5, maxRange); - range = maxRange == -1 ? range : Math.min(range, APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get()); + int range = Math.min(arguments.optInt(5, -1), maxRange); ResourceKey dimension = getLevel().dimension(); ServerPlayer player = getPlayer(playerName); if (player == null) @@ -190,7 +187,7 @@ public final MethodResult sendFormattedMessageToPlayer(@NotNull IArguments argum if (!APConfig.PERIPHERALS_CONFIG.chatBoxMultiDimensional.get() && player.getLevel().dimension() != dimension) return MethodResult.of(false, "NOT_SAME_DIMENSION"); - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) player.sendSystemMessage(preparedMessage); return MethodResult.of(true); }); @@ -204,8 +201,7 @@ public final MethodResult sendFormattedToastToPlayer(@NotNull IArguments argumen String title = arguments.getString(1); String playerName = arguments.getString(2); int maxRange = APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get(); - int range = arguments.optInt(6, maxRange); - range = maxRange == -1 ? range : Math.min(range, APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get()); + int range = arguments.optInt(6, -1); ResourceKey dimension = getLevel().dimension(); ServerPlayer player = getPlayer(playerName); if (player == null) @@ -231,7 +227,7 @@ public final MethodResult sendFormattedToastToPlayer(@NotNull IArguments argumen if (!APConfig.PERIPHERALS_CONFIG.chatBoxMultiDimensional.get() && player.getLevel().dimension() != dimension) return MethodResult.of(false, "NOT_SAME_DIMENSION"); - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) { + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) { ToastToClientPacket packet = new ToastToClientPacket(titleComponent, preparedMessage); APNetworking.sendTo(packet, player); } @@ -246,8 +242,7 @@ public final MethodResult sendMessageToPlayer(@NotNull IArguments arguments) thr String message = arguments.getString(0); String playerName = arguments.getString(1); int maxRange = APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get(); - int range = arguments.optInt(5, maxRange); - range = maxRange == -1 ? range : Math.min(range, APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get()); + int range = arguments.optInt(5, -1); ResourceKey dimension = getLevel().dimension(); ServerPlayer player = getPlayer(playerName); if (player == null) @@ -264,7 +259,7 @@ public final MethodResult sendMessageToPlayer(@NotNull IArguments arguments) thr if (!APConfig.PERIPHERALS_CONFIG.chatBoxMultiDimensional.get() && player.getLevel().dimension() != dimension) return MethodResult.of(false, "NOT_SAME_DIMENSION"); - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) player.sendSystemMessage(preparedMessage, false); return MethodResult.of(true); }); @@ -277,8 +272,7 @@ public final MethodResult sendToastToPlayer(@NotNull IArguments arguments) throw String title = arguments.getString(1); String playerName = arguments.getString(2); int maxRange = APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get(); - int range = arguments.optInt(6, maxRange); - range = maxRange == -1 ? range : Math.min(range, APConfig.PERIPHERALS_CONFIG.chatBoxMaxRange.get()); + int range = arguments.optInt(6, -1); ResourceKey dimension = getLevel().dimension(); ServerPlayer player = getPlayer(playerName); if (player == null) @@ -296,7 +290,7 @@ public final MethodResult sendToastToPlayer(@NotNull IArguments arguments) throw if (!APConfig.PERIPHERALS_CONFIG.chatBoxMultiDimensional.get() && player.getLevel().dimension() != dimension) return MethodResult.of(false, "NOT_SAME_DIMENSION"); - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) { + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, maxRange)) { ToastToClientPacket packet = new ToastToClientPacket(Component.literal(title), preparedMessage); APNetworking.sendTo(packet, player); } diff --git a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/PlayerDetectorPeripheral.java b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/PlayerDetectorPeripheral.java index 6e8b90fa3..8a6bf1913 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/PlayerDetectorPeripheral.java +++ b/src/main/java/de/srendi/advancedperipherals/common/addons/computercraft/peripheral/PlayerDetectorPeripheral.java @@ -97,7 +97,7 @@ public final List getPlayersInRange(int range) { for (ServerPlayer player : getPlayers()) { if (!isAllowedMultiDimensional() && player.getLevel().dimension() != dimension) continue; - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, MAX_RANGE)) + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, MAX_RANGE)) playersName.add(player.getName().getString()); } return playersName; @@ -142,7 +142,7 @@ public final boolean isPlayersInRange(int range) { for (ServerPlayer player : getPlayers()) { if (!isAllowedMultiDimensional() && player.getLevel().dimension() != dimension) continue; - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, MAX_RANGE)) return true; + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, MAX_RANGE)) return true; } return false; } @@ -185,7 +185,7 @@ public final boolean isPlayerInRange(int range, String username) { for (Player player : getPlayers()) { if (!isAllowedMultiDimensional() && player.getLevel().dimension() != dimension) continue; - if (range == -1 || CoordUtil.isInRange(getPos(), getLevel(), player, range, MAX_RANGE)) { + if (CoordUtil.isInRange(getPos(), getLevel(), player, range, MAX_RANGE)) { if(player.getName().getString().equals(username)) return true; } diff --git a/src/main/java/de/srendi/advancedperipherals/common/util/CoordUtil.java b/src/main/java/de/srendi/advancedperipherals/common/util/CoordUtil.java index a21f2ab8d..48ff704e0 100644 --- a/src/main/java/de/srendi/advancedperipherals/common/util/CoordUtil.java +++ b/src/main/java/de/srendi/advancedperipherals/common/util/CoordUtil.java @@ -16,13 +16,35 @@ public class CoordUtil { + /** + * isInRange checks if the player is in the range + * + * @param pos the position to start check + * @param world the world to start check + * @param player the player going to be check + * @param range the range that user want to reach, must be -1, 0, or a positive number + * @param maxRange the maximum range the user can reach, must be -1, 0, or a positive number + * + * @return If the player is in the {@code range} as well as in the {@code maxRange}, or {@code range} and {@code maxRange} are -1 + */ public static boolean isInRange(@Nullable BlockPos pos, @Nullable Level world, @Nullable Player player, int range, int maxRange) { // There are rare cases where these are null. For example if a player detector pocket computer runs while not in a player inventory // Fixes https://github.com/SirEndii/AdvancedPeripherals/issues/356 - if (pos == null || world == null || player == null) + if (pos == null || world == null || player == null) { return false; + } - range = maxRange == -1 ? range : Math.min(Math.abs(range), maxRange); + if (range == 0 || maxRange == 0) { + return false; + } + if (range < 0) { + if (maxRange < 0) { + return true; + } + range = maxRange; + } else if (maxRange > 0 && range > maxRange) { + range = maxRange; + } return isPlayerInBlockRange(pos, world, player, (double) range); }