Compare commits

...
11 Commits
Author SHA1 Message Date
Jikoo 5f04575780 Bump version to 5.3.2 for release 2026-05-22 10:05:43 -04:00
Jikoo 0f5368b134 Include release notes on Hangar 2026-05-22 10:05:09 -04:00
Camden Cove b43a32139d Fix missed copy sending contents to viewers (#401) 2026-05-18 16:23:34 -04:00
R00tB33rMan 98d819c49a Fix inventory access using incorrect schedulers (#400) 2026-05-17 13:09:59 +00:00
tonyjamesstark 8f058fb206 Change format of searchchest (#393)
Displays name if available, shows one entry per line.
2026-05-04 16:16:59 -04:00
dependabot[bot] 60a32b7af5 Bump softprops/action-gh-release from 2.6.1 to 3.0.0 (#395)
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release) from 2.6.1 to 3.0.0.
- [Release notes](https://github.com/softprops/action-gh-release/releases)
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md)
- [Commits](https://github.com/softprops/action-gh-release/compare/v2.6.1...v3.0.0)

---
updated-dependencies:
- dependency-name: softprops/action-gh-release
  dependency-version: 3.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-01 18:52:41 -04:00
dependabot[bot] 61f7d5cee5 Bump actions/github-script from 8 to 9 (#394)
Bumps [actions/github-script](https://github.com/actions/github-script) from 8 to 9.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v8...v9)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '9'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-05-01 18:52:06 -04:00
dependabot[bot] 3d65681c6f Bump com.google.errorprone:error_prone_core from 2.48.0 to 2.49.0 (#398) 2026-05-01 20:43:44 +00:00
dependabot[bot] cf2f53f9e9 Bump gradle-wrapper from 9.4.1 to 9.5.0 (#397) 2026-05-01 20:43:22 +00:00
dependabot[bot] 95ae1cfa0a Bump net.ltgt.errorprone from 4.4.0 to 5.1.0 (#396) 2026-05-01 20:41:17 +00:00
Jikoo 07451de7a3 Bump version to 5.3.2-SNAPSHOT for development 2026-04-21 21:34:03 -04:00
14 changed files with 132 additions and 149 deletions

No files matched your search

+1 -1
View File
@@ -15,7 +15,7 @@ jobs:
# Note: this is directly from GitHub's example for using data from a triggering workflow:
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#using-data-from-the-triggering-workflow
- name: 'Download artifact'
uses: actions/github-script@v8
uses: actions/github-script@v9
with:
script: |
let allArtifacts = await github.rest.actions.listWorkflowRunArtifacts({
+1 -1
View File
@@ -20,7 +20,7 @@ jobs:
- name: Create Release
id: create-release
uses: softprops/action-gh-release@v2.6.1
uses: softprops/action-gh-release@v3.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
+1
View File
@@ -98,6 +98,7 @@ jobs:
slug: 'OpenInv'
version: ${{ github.event.release.tag_name }}
channel: release
description: "${{ github.event.release.body }}"
files: |-
[
{
+1 -1
View File
@@ -1,6 +1,6 @@
# Project meta
group=com.lishid.openinv
version=5.3.1
version=5.3.2
description=A Bukkit plugin for opening normally-inaccessible inventories.
# Gradle configuration
+2 -2
View File
@@ -6,8 +6,8 @@ annotations = "26.1.0"
paperweight = "2.0.0-beta.21"
shadow = "9.4.1"
folia-scheduler-wrapper = "v0.0.3"
errorprone-core = "2.48.0"
errorprone-gradle = "4.4.0"
errorprone-core = "2.49.0"
errorprone-gradle = "5.1.0"
slf4j = "2.0.17"
sqlite-jdbc = "3.49.1.0"
Binary file not shown.
+3 -1
View File
@@ -1,7 +1,9 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.0-bin.zip
networkTimeout=10000
retries=0
retryBackOffMs=500
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Vendored
+2 -5
View File
@@ -1,7 +1,7 @@
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
# Copyright © 2015 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
@@ -57,7 +57,7 @@
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# https://github.com/gradle/gradle/blob/3d91ce3b8caaf77ad09f381f43615b715b53f72c/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
@@ -114,7 +114,6 @@ case "$( uname )" in #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH="\\\"\\\""
# Determine the Java command to use to start the JVM.
@@ -172,7 +171,6 @@ fi
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
JAVACMD=$( cygpath --unix "$JAVACMD" )
@@ -212,7 +210,6 @@ DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
-jar "$APP_HOME/gradle/wrapper/gradle-wrapper.jar" \
"$@"
Vendored
+82 -94
View File
@@ -1,94 +1,82 @@
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:execute
@rem Setup the command line
set CLASSPATH=
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %*
:end
@rem End local scope for the variables with windows NT shell
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables, and ensure extensions are enabled
setlocal EnableExtensions
set DIRNAME=%~dp0
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if %ERRORLEVEL% equ 0 goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto execute
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
"%COMSPEC%" /c exit 1
:execute
@rem Setup the command line
@rem Execute Gradle
@rem endlocal doesn't take effect until after the line is parsed and variables are expanded
@rem which allows us to clear the local environment before executing the java command
endlocal & "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -jar "%APP_HOME%\gradle\wrapper\gradle-wrapper.jar" %* & call :exitWithErrorLevel
:exitWithErrorLevel
@rem Use "%COMSPEC%" /c exit to allow operators to work properly in scripts
"%COMSPEC%" /c exit %ERRORLEVEL%
@@ -89,7 +89,7 @@ public abstract class OpenSyncMenu<T extends Container & ISpecialInventory & Int
for (int index = 0; index < slots.size(); ++index) {
Slot slot = slots.get(index);
ItemStack itemStack = slot instanceof SlotPlaceholder placeholder ? placeholder.getOrDefault() : slot.getItem();
contentsCopy.add(itemStack);
contentsCopy.add(itemStack.copy());
this.remoteSlots.get(index).force(itemStack);
}
@@ -96,7 +96,7 @@ public abstract class OpenSyncMenu<T extends Container & ISpecialInventory & Int
for (int index = 0; index < slots.size(); ++index) {
Slot slot = slots.get(index);
ItemStack itemStack = slot instanceof SlotPlaceholder placeholder ? placeholder.getOrDefault() : slot.getItem();
contentsCopy.add(itemStack);
contentsCopy.add(itemStack.copy());
this.remoteSlots.get(index).force(itemStack);
}
@@ -70,23 +70,25 @@ public abstract class PlayerLookupCommand implements TabExecutor {
return;
}
new WrappedRunnable() {
@Override
public void run() {
// Ensure sender still exists.
if ((sender instanceof Player player) && !player.isValid()) {
return;
}
// Perform access checks and load target if necessary.
PlayerAccess onlineTarget = access(sender, target, accessInv);
if (onlineTarget != null) {
handle(sender, onlineTarget, accessInv, args);
}
Runnable sync = () -> {
// Ensure sender still exists.
if ((sender instanceof Player player) && !player.isValid()) {
return;
}
}.runTask(PlayerLookupCommand.this.plugin);
// Perform access checks and load target if necessary.
PlayerAccess onlineTarget = access(sender, target, accessInv);
if (onlineTarget != null) {
handle(sender, onlineTarget, accessInv, args);
}
};
if (sender instanceof Player senderPlayer) {
PlayerLookupCommand.this.plugin.getScheduler().runTaskAtEntity(senderPlayer, sync);
} else {
PlayerLookupCommand.this.plugin.getScheduler().runTask(sync);
}
}
}.runTaskAsynchronously(this.plugin);
@@ -28,6 +28,7 @@ import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.Nameable;
import org.bukkit.inventory.InventoryHolder;
import org.bukkit.plugin.Plugin;
import org.jetbrains.annotations.NotNull;
@@ -54,8 +55,7 @@ public class SearchContainerCommand implements TabExecutor {
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String label,
@NotNull String[] args
) {
@NotNull String[] args) {
if (!(sender instanceof Player senderPlayer)) {
lang.sendMessage(sender, "messages.error.consoleUnsupported");
return true;
@@ -72,8 +72,7 @@ public class SearchContainerCommand implements TabExecutor {
lang.sendMessage(
sender,
"messages.error.invalidMaterial",
new Replacement("%target%", args[0])
);
new Replacement("%target%", args[0]));
return false;
}
@@ -95,6 +94,7 @@ public class SearchContainerCommand implements TabExecutor {
World world = senderPlayer.getWorld();
Chunk centerChunk = senderPlayer.getLocation().getChunk();
StringBuilder locations = new StringBuilder();
locations.append("\n");
for (int dX = -radius; dX <= radius; ++dX) {
for (int dZ = -radius; dZ <= radius; ++dZ) {
@@ -109,22 +109,24 @@ public class SearchContainerCommand implements TabExecutor {
if (!SearchHelper.findMatch(holder.getInventory(), itemStack -> itemStack.getType() == material)) {
continue;
}
locations.append(holder.getInventory().getType().name().toLowerCase(Locale.ENGLISH)).append(" (")
.append(tileEntity.getX()).append(',').append(tileEntity.getY()).append(',')
.append(tileEntity.getZ()).append("), ");
locations.append(holder.getInventory().getType().name().toLowerCase(Locale.ENGLISH)).append(": ");
if (holder instanceof Nameable named) {
String customName = named.getCustomName();
if (customName != null) {
locations.append(customName.toLowerCase(Locale.ENGLISH).strip()).append(" - ");
}
}
locations.append(" (").append(tileEntity.getX()).append(',').append(tileEntity.getY()).append(',')
.append(tileEntity.getZ()).append(")\n");
}
}
}
// Matches found, delete trailing comma and space
if (!locations.isEmpty()) {
locations.delete(locations.length() - 2, locations.length());
} else {
if (locations.length() < 2) {
lang.sendMessage(
sender,
"messages.info.container.noMatches",
new Replacement("%target%", material.name())
);
new Replacement("%target%", material.name()));
return true;
}
@@ -132,8 +134,7 @@ public class SearchContainerCommand implements TabExecutor {
sender,
"messages.info.container.matches",
new Replacement("%target%", material.name()),
new Replacement("%detail%", locations.toString())
);
new Replacement("%detail%", locations.toString()));
return true;
}
@@ -142,8 +143,7 @@ public class SearchContainerCommand implements TabExecutor {
@NotNull CommandSender sender,
@NotNull Command command,
@NotNull String label,
String[] args
) {
String[] args) {
if (args.length < 1 || args.length > 2 || !command.testPermissionSilent(sender)) {
return Collections.emptyList();
}
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -40,7 +39,7 @@ public class InventoryManager implements Listener {
private final Map<UUID, ISpecialPlayerInventory> inventories = new ConcurrentHashMap<>();
private final Map<UUID, ISpecialEnderChest> enderChests = new ConcurrentHashMap<>();
private final Set<UUID> expectedCloses = new HashSet<>();
private final Set<UUID> expectedCloses = ConcurrentHashMap.newKeySet();
private final @NotNull OpenInv plugin;
private final @NotNull Config config;
private final @NotNull InternalAccessor accessor;
@@ -54,11 +53,6 @@ public class InventoryManager implements Listener {
public void evictAll() {
Stream.concat(inventories.values().stream(), enderChests.values().stream())
.map(inventory -> {
// Rather than iterate twice, evict all viewers during remapping.
for (HumanEntity viewer : List.copyOf(inventory.getBukkitInventory().getViewers())) {
expectedCloses.add(viewer.getUniqueId());
viewer.closeInventory();
}
// If saving is prevented, return a null value for the player to save.
if (config.isSaveDisabled() || OpenEvents.saveCancelled(inventory)) {
return null;
@@ -217,8 +211,7 @@ public class InventoryManager implements Listener {
if (alwaysDenied
|| !connectedState.hasPermission(viewer)
|| (!Objects.equals(owner.getWorld(), viewer.getWorld()) && !Permissions.ACCESS_CROSSWORLD.hasPermission(viewer))) {
expectedCloses.add(viewer.getUniqueId());
viewer.closeInventory();
plugin.getScheduler().runTaskAtEntity(viewer, viewer::closeInventory);
}
}
}
@@ -269,7 +262,7 @@ public class InventoryManager implements Listener {
private <T extends ISpecialInventory> @Nullable T remove(@NotNull UUID key, @NotNull T inventory) {
for (HumanEntity viewer : List.copyOf(inventory.getBukkitInventory().getViewers())) {
expectedCloses.add(viewer.getUniqueId());
viewer.closeInventory();
plugin.getScheduler().runTaskAtEntity(viewer, viewer::closeInventory);
}
return null;
}