8.9 release

This commit is contained in:
mfnalex 2020-06-10 18:21:41 +02:00
parent 9a948b6103
commit 1334d90cbc
8 changed files with 138 additions and 39 deletions

View File

@ -1,4 +1,9 @@
# Changelog # Changelog
## 8.9
- Prevent BossShopPro's GUI from being sorted
- Added custom event to let 3rd party plugins cancel sorting an inventory, see updated API doc for more information
- Published ChestSort in public maven repository repo.jeff-media.de/maven2, see updated API doc for more information
## 8.8.2 ## 8.8.2
- Fixes exception when sorting inventories containing potions in ancient Minecraft versions like 1.8 - Fixes exception when sorting inventories containing potions in ancient Minecraft versions like 1.8

View File

@ -2,32 +2,71 @@
If you want to use ChestSort's advanced sorting features for your own plugin, you can use the ChestSort API. It provides methods to sort any given inventory, following the rules you have specified in your ChestSort's plugin.yml and the corresponding category files. If you want to use ChestSort's advanced sorting features for your own plugin, you can use the ChestSort API. It provides methods to sort any given inventory, following the rules you have specified in your ChestSort's plugin.yml and the corresponding category files.
To use ChestSort's sorting features in your Spigot/Bukkit plugin, you have to import ChestSort.jar into your BuildPath. ## Maven repository
You can use maven to add ChestSort as a dependency to your Spigot-/Bukkit-Plugin:
```
<repositories>
<repository>
<id>jeff-media-repo</id>
<url>https://repo.jeff-media.de/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.jeff_media</groupId>
<artifactId>ChestSort</artifactId>
<version>8.9</version> <!-- Check www.chestsort.de for latest version -->
</dependency>
</dependencies>
```
## Accessing the API
Then you can access it via the plugin manager: Then you can access it via the plugin manager:
``` ```
JeffChestSortPlugin chestSort = (JeffChestSortPlugin) getServer().getPluginManager().getPlugin("ChestSort"); ChestSortPlugin chestSort = (ChestSortPlugin) getServer().getPluginManager().getPlugin("ChestSort");
if(chestSort==null || !(chestSort instanceof ChestSortPlugin)) {
if(chestSort==null || !(chestSort instanceof JeffChestSortPlugin)) { getLogger().severe("Error: ChestSort is not installed.");
getLogger().warning("ChestSort plugin not found."); return;
} }
ChestSortAPI chestSortAPI = chestSort.getAPI();
``` ```
### Sorting inventories
Now, you can sort any Inventory! Just like this: Now, you can sort any Inventory! Just like this:
``` ```
chestSort.sortInventory(Inventory inventory); chestSortAPI.sortInventory(Inventory inventory);
``` ```
To sort only specific slots, you can pass slot numbers where to start and end sorting. ChestSort will not modify the inventory outside the given slot range. To sort only specific slots, you can pass slot numbers where to start and end sorting. ChestSort will not modify the inventory outside the given slot range.
``` ```
chestSort.sortInventory(Inventory inventory, int startSlot, int endSlot); chestSortAPI.sortInventory(Inventory inventory, int startSlot, int endSlot);
``` ```
You can also check if a player has automatic sorting enabled or disabled: You can also check if a player has automatic sorting enabled or disabled:
``` ```
boolean sortingEnabled = chestSort.sortingEnabled(Player player); boolean sortingEnabled = chestSortAPI.sortingEnabled(Player player);
``` ```
### Custom ChestSort event
If you want to prevent ChestSort from sorting a certain inventory, you can listen to the ChestSortEvent event.
```
@EventHandler
public void onChestSortEvent(ChestSortEvent event) {
if(event.getInventory() == whatever) {
event.setCancelled(true);
}
}
```
## Example Plugin
Here is a complete example plugin that shows to add and use the ChestSort API: [LINK](https://github.com/JEFF-Media-GbR/ChestSortAPIExample)

View File

@ -6,6 +6,25 @@ Please see the related topic at spigotmc.org for information regarding the comma
https://www.spigotmc.org/resources/1-13-chestsort.59773/ https://www.spigotmc.org/resources/1-13-chestsort.59773/
## Maven repository
If you want to use ChestSort as dependency for your own plugin, you can use our public maven repository:
```
<repositories>
<repository>
<id>jeff-media-repo</id>
<url>https://repo.jeff-media.de/maven2</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>de.jeff_media</groupId>
<artifactId>ChestSort</artifactId>
<version>8.9</version> <!-- Check www.chestsort.de for latest version -->
</dependency>
</dependencies>
```
## Building .jar file ## Building .jar file
To build the .jar file, you will need maven. Also, the CrackShot library is in no public repository, so please create a directory called `lib` and put the latest CrackShot.jar file [(available here)](https://www.spigotmc.org/resources/crackshot-guns.48301/) inside it. Now you can do `mvn install` To build the .jar file, you will need maven. Also, the CrackShot library is in no public repository, so please create a directory called `lib` and put the latest CrackShot.jar file [(available here)](https://www.spigotmc.org/resources/crackshot-guns.48301/) inside it. Now you can do `mvn install`
@ -13,6 +32,11 @@ To build the .jar file, you will need maven. Also, the CrackShot library is in n
ChestSort takes an instance of org.bukkit.inventory.Inventory and copies the contents. The resulting array is sorted by rules defined in the config.yml. This takes far less than one millisecond for a whole chest. So there should be no problems even on big servers, where hundreds of players are using chests at the same time. ChestSort takes an instance of org.bukkit.inventory.Inventory and copies the contents. The resulting array is sorted by rules defined in the config.yml. This takes far less than one millisecond for a whole chest. So there should be no problems even on big servers, where hundreds of players are using chests at the same time.
The plugin should cause no lag at all. The plugin should cause no lag at all.
## API
If you want to use ChestSort's advanced sorting features for your own plugin, you can use the ChestSort API. It provides methods to sort any given inventory, following the rules you have specified in your ChestSort's plugin.yml and the corresponding category files.
More information about the API can be found [HERE](https://github.com/JEFF-Media-GbR/Spigot-ChestSort/blob/master/HOW_TO_USE_API.md).
## Screenshots ## Screenshots
<p align="center"><img src="https://www.spigotmc.org/attachments/chestsort-screen2-jpg.382332/" alt="Screenshot ChestSort" /></p> <p align="center"><img src="https://www.spigotmc.org/attachments/chestsort-screen2-jpg.382332/" alt="Screenshot ChestSort" /></p>

43
pom.xml
View File

@ -4,13 +4,13 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <modelVersion>4.0.0</modelVersion>
<groupId>de.jeffclan</groupId> <groupId>de.jeff_media</groupId>
<artifactId>JeffChestSort</artifactId> <artifactId>ChestSort</artifactId>
<version>8.8.3-pre1</version>
<packaging>jar</packaging>
<name>JeffChestSort</name> <name>JeffChestSort</name>
<url>https://www.chestsort.de</url> <url>https://www.chestsort.de</url>
<description>Automatically sorts your chests!</description>
<version>8.9</version>
<packaging>jar</packaging>
<properties> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
@ -18,6 +18,7 @@
</properties> </properties>
<build> <build>
<plugins> <plugins>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -34,11 +35,8 @@
<version>3.1.0</version> <version>3.1.0</version>
<configuration> <configuration>
<finalName>ChestSort</finalName> <finalName>ChestSort</finalName>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId> <artifactId>maven-shade-plugin</artifactId>
@ -60,8 +58,16 @@
</execution> </execution>
</executions> </executions>
</plugin> </plugin>
</plugins> </plugins>
<extensions>
<extension>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-ftp</artifactId>
<version>3.4.1</version>
</extension>
</extensions>
</build> </build>
<repositories> <repositories>
@ -90,8 +96,6 @@
<version>1.15.2-R0.1-SNAPSHOT</version> <version>1.15.2-R0.1-SNAPSHOT</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<!-- <dependency> <groupId>net.md-5</groupId> <artifactId>bungeecord-api</artifactId>
<version>1.15-SNAPSHOT</version> <scope>compile</scope> </dependency> -->
<dependency> <dependency>
<groupId>org.bstats</groupId> <groupId>org.bstats</groupId>
<artifactId>bstats-bukkit</artifactId> <artifactId>bstats-bukkit</artifactId>
@ -105,19 +109,18 @@
<scope>system</scope> <scope>system</scope>
<systemPath>${project.basedir}/lib/CrackShot.jar</systemPath> <systemPath>${project.basedir}/lib/CrackShot.jar</systemPath>
</dependency> </dependency>
<!-- <dependency>
<groupId>com.jojodmo.customitems</groupId>
<artifactId>CustomItems</artifactId>
<version>LATEST</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/CustomItemsAPI_PLACEHOLDER.jar</systemPath>
</dependency>-->
<dependency> <dependency>
<groupId>at.pcgamingfreaks</groupId> <groupId>at.pcgamingfreaks</groupId>
<artifactId>Minepacks-API</artifactId> <artifactId>Minepacks-API</artifactId>
<version>2.3.8</version><!-- Check api-version shield for newest version --> <version>2.3.8</version><!-- Check api-version shield for newest version -->
</dependency> </dependency>
</dependencies> </dependencies>
<description>Automatically sorts your chests!</description>
<distributionManagement>
<repository>
<id>jeff-ftp</id>
<url>ftps://ftp.jeff-media.de/maven2</url>
</repository>
</distributionManagement>
</project> </project>

View File

@ -1,25 +1,40 @@
package de.jeff_media.ChestSort; package de.jeff_media.ChestSort;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable; import org.bukkit.event.Cancellable;
import org.bukkit.event.Event; import org.bukkit.event.Event;
import org.bukkit.event.HandlerList; import org.bukkit.event.HandlerList;
import org.bukkit.inventory.Inventory;
import org.jetbrains.annotations.Nullable;
public class ChestSortEvent extends Event implements Cancellable { public class ChestSortEvent extends Event implements Cancellable {
boolean cancelled = false; boolean cancelled = false;
Location loc; Location loc;
Inventory inv;
Player p;
private static final HandlerList HANDLERS = new HandlerList(); private static final HandlerList HANDLERS = new HandlerList();
public ChestSortEvent(Location loc) { public ChestSortEvent(Inventory inv) {
this.loc=loc; this.inv = inv;
} }
@Nullable
public Location getLocation() { public Location getLocation() {
return loc; return loc;
} }
public Inventory getInventory() {
return inv;
}
@Nullable
public Player getPlayer() {
return p;
}
public HandlerList getHandlers() { public HandlerList getHandlers() {
return HANDLERS; return HANDLERS;
} }

View File

@ -399,12 +399,10 @@ public class ChestSortListener implements Listener {
@EventHandler @EventHandler
public void onAdditionalHotkeys(InventoryClickEvent e) { public void onAdditionalHotkeys(InventoryClickEvent e) {
if(e.getClickedInventory() != null && e.getClickedInventory().getLocation()!=null) { // Debug
ChestSortEvent chestSortEvent = new ChestSortEvent(e.getClickedInventory().getLocation()); if(plugin.debug) {
Bukkit.getPluginManager().callEvent(chestSortEvent); System.out.println(e.getInventory().getHolder());
if (chestSortEvent.isCancelled()) { System.out.println(e.getInventory().getHolder().getClass().getName());
return;
}
} }
if(!plugin.getConfig().getBoolean("allow-hotkeys")) { if(!plugin.getConfig().getBoolean("allow-hotkeys")) {
@ -431,12 +429,26 @@ public class ChestSortListener implements Listener {
return; return;
} }
// Don't sort inventories belonging to BossShopPro
if(e.getInventory()!=null && e.getInventory().getHolder()!=null && e.getInventory().getHolder().getClass().getName().equalsIgnoreCase("org.black_ixx.bossshop.core.BSShopHolder")) {
return;
}
if( !p.hasPermission("chestsort.use")) return; if( !p.hasPermission("chestsort.use")) return;
plugin.registerPlayerIfNeeded(p); plugin.registerPlayerIfNeeded(p);
ChestSortPlayerSetting setting = plugin.perPlayerSettings.get(p.getUniqueId().toString()); ChestSortPlayerSetting setting = plugin.perPlayerSettings.get(p.getUniqueId().toString());
ChestSortEvent chestSortEvent = new ChestSortEvent(e.getInventory());
chestSortEvent.loc=e.getWhoClicked().getLocation();
Bukkit.getPluginManager().callEvent(chestSortEvent);
if (chestSortEvent.isCancelled()) {
return;
}
if(e.isLeftClick() && setting.leftClick) { if(e.isLeftClick() && setting.leftClick) {
plugin.organizer.stuffPlayerInventoryIntoAnother(p.getInventory(), e.getInventory()); plugin.organizer.stuffPlayerInventoryIntoAnother(p.getInventory(), e.getInventory());
plugin.organizer.sortInventory(e.getInventory()); plugin.organizer.sortInventory(e.getInventory());
plugin.organizer.updateInventoryView(e.getInventory()); plugin.organizer.updateInventoryView(e.getInventory());

View File

@ -388,7 +388,8 @@ public class ChestSortOrganizer {
void sortInventory(Inventory inv, int startSlot, int endSlot) { void sortInventory(Inventory inv, int startSlot, int endSlot) {
if(inv.getLocation() != null) { if(inv.getLocation() != null) {
ChestSortEvent chestSortEvent = new ChestSortEvent(inv.getLocation()); ChestSortEvent chestSortEvent = new ChestSortEvent(inv);
chestSortEvent.loc = inv.getLocation();
Bukkit.getPluginManager().callEvent(chestSortEvent); Bukkit.getPluginManager().callEvent(chestSortEvent);
if (chestSortEvent.isCancelled()) { if (chestSortEvent.isCancelled()) {
return; return;

View File

@ -1,6 +1,6 @@
main: de.jeff_media.ChestSort.ChestSortPlugin main: de.jeff_media.ChestSort.ChestSortPlugin
name: ChestSort name: ChestSort
version: 8.8.3-pre1 version: 8.9
api-version: 1.13 api-version: 1.13
description: Allows automatic chest sorting description: Allows automatic chest sorting
author: mfnalex author: mfnalex