Merge pull request #33 from JEFF-Media-GbR/CrackShotHook

Crack shot hook
This commit is contained in:
JEFF 2019-07-15 21:56:52 +02:00 committed by GitHub
commit 4151c3024e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 110 additions and 20 deletions

View File

@ -1,22 +1,19 @@
# ChestSort
1.8 to 1.14 compatible Minecraft-/Spigot-Plugin to allow automatic chest sorting.
## About
Tired of sorting your chests? Let's spend less time on organizing, and more on playing!
![Screenshot ChestSort](https://static.jeff-media.de/i/chestsortbeforeafter.jpg "Screenshot ChestSort")
ChestSort will automatically sort every chest after you have closed it. Every player can enable or disable this feature if desired with the simple command `/chestsort`. By default, sorting is disabled. If a player uses a chest for the first time after logging in, they will be shown a text on how to enable automatic chest sorting. Players need the "chestsort.use" permission to use the plugin.
Sorting will work with chests and shulker boxes.
Tested Spigot versions: 1.8 to 1.14
1.8 to 1.14 compatible Minecraft-/Spigot-Plugin to allow automatic chest and inventory sorting.
## Download & more information
Please see the related topic at spigotmc.org for information regarding the commands, permissions and download links:
https://www.spigotmc.org/resources/1-13-chestsort.59773/
## 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 inside it. Now you can do `mvn install`
## Technical stuff
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.
## Screenshots
<p align="center"><img src="https://static.jeff-media.de/chestsort/chestsort-screen1.jpg" alt="Screenshot ChestSort" /></p>
<p align="center"><img src="https://static.jeff-media.de/chestsort/chestsort-screen2.jpg" alt="Screenshot ChestSort" /></p>

View File

@ -6,7 +6,7 @@
<groupId>de.jeffclan</groupId>
<artifactId>JeffChestSort</artifactId>
<version>6.2</version>
<version>6.3</version>
<packaging>jar</packaging>
<name>JeffChestSort</name>
@ -92,6 +92,13 @@
<version>1.4</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.shampaggon.crackshot</groupId>
<artifactId>CSUtility</artifactId>
<version>0.98.9</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/CrackShot.jar</systemPath>
</dependency>
</dependencies>
<description>Automatically sorts your chests!</description>

View File

@ -13,6 +13,7 @@ import org.bukkit.Bukkit;
import org.bukkit.inventory.Inventory;
import org.bukkit.inventory.ItemStack;
import de.jeffclan.hooks.CrackShotHook;
import de.jeffclan.utils.CategoryLinePair;
import de.jeffclan.utils.TypeMatchPositionPair;
@ -30,6 +31,7 @@ public class JeffChestSortOrganizer {
*/
JeffChestSortPlugin plugin;
CrackShotHook crackShotHook;
// All available colors in the game. We will strip this from the item names and
// keep the color in a separate variable
@ -95,6 +97,8 @@ public class JeffChestSortOrganizer {
}
}
}
crackShotHook = new CrackShotHook(plugin);
}
@ -276,10 +280,23 @@ public class JeffChestSortOrganizer {
String[] typeAndColor = getTypeAndColor(item.getType().name());
String typeName = typeAndColor[0];
String color = typeAndColor[1];
CategoryLinePair categoryLinePair = getCategoryLinePair(item.getType().name());
String hookChangedName = item.getType().name();
// CrackShot Support Start
if(plugin.hookCrackShot) {
if(crackShotHook.getCrackShotWeaponName(item)!=null) {
typeName = plugin.getConfig().getString("hook-crackshot-prefix") + "_" + crackShotHook.getCrackShotWeaponName(item);
color="";
hookChangedName = typeName;
}
}
// CrackShot Support End
CategoryLinePair categoryLinePair = getCategoryLinePair(hookChangedName);
String categoryName = categoryLinePair.getCategoryName();
String categorySticky = categoryName;
String lineNumber = getCategoryLinePair(item.getType().name()).getFormattedPosition();
String lineNumber = getCategoryLinePair(hookChangedName).getFormattedPosition();
if(stickyCategoryNames.contains(categoryName)) {
categorySticky = categoryName+"~"+lineNumber;
}

View File

@ -47,6 +47,7 @@ import org.bukkit.configuration.InvalidConfigurationException;
import org.bukkit.configuration.file.YamlConfiguration;
import org.bukkit.entity.Player;
import org.bukkit.inventory.Inventory;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import de.jeffclan.utils.Utils;
@ -61,10 +62,13 @@ public class JeffChestSortPlugin extends JavaPlugin {
JeffChestSortListener listener;
String sortingMethod;
ArrayList<String> disabledWorlds;
int currentConfigVersion = 15;
int currentConfigVersion = 16;
boolean usingMatchingConfig = true;
boolean debug = false;
boolean verbose = true;
public boolean hookCrackShot = false;
private long updateCheckInterval = 86400; // in seconds. We check on startup and every 24 hours (if you never
// restart your server)
@ -140,6 +144,10 @@ public class JeffChestSortPlugin extends JavaPlugin {
getConfig().addDefault("hotkeys.shift-click", true);
getConfig().addDefault("hotkeys.double-click", true);
getConfig().addDefault("hotkeys.shift-right-click", true);
getConfig().addDefault("hook-crackshot", true);
getConfig().addDefault("hook-crackshot-prefix", "crackshot_weapon");
getConfig().addDefault("verbose", true); // Prints some information in onEnable()
}
@ -205,6 +213,12 @@ public class JeffChestSortPlugin extends JavaPlugin {
// Create the config file, including checks for old config versions, and load
// the default values for unset options
createConfig();
if(getConfig().getBoolean("hook-crackshot")) {
if(Bukkit.getPluginManager().getPlugin("CrackShot") instanceof Plugin) {
hookCrackShot=true;
}
}
debug = getConfig().getBoolean("debug");

View File

@ -0,0 +1,33 @@
package de.jeffclan.hooks;
import org.bukkit.inventory.ItemStack;
import com.shampaggon.crackshot.CSUtility;
import de.jeffclan.JeffChestSort.JeffChestSortPlugin;
public class CrackShotHook {
JeffChestSortPlugin plugin;
CSUtility crackShotUtility = null;
public CrackShotHook(JeffChestSortPlugin plugin) {
this.plugin=plugin;
if(plugin.hookCrackShot) {
crackShotUtility = new CSUtility();
plugin.getLogger().info("Succesfully hooked into CrackShot");
}
}
// Will return when not a weapon
public String getCrackShotWeaponName(ItemStack item) {
if(crackShotUtility == null || plugin.hookCrackShot==false) {
return null;
}
// Will be null if not a weapon
return crackShotUtility.getWeaponTitle(item);
}
}

View File

@ -13,6 +13,8 @@
# in your sorting-method
sticky=true
crackshot_weapon_*
crossbow
bow
*_sword
trident

View File

@ -106,6 +106,26 @@ verbose: true
disabled-worlds:
##########################
##### Plugin hooks #####
##########################
# ChestSort can hook into other plugins to allow better sorting
# for items belonging to 3rd party plugins.
# You do NOT have to disable the hooks for plugins you don't have
# installed. ChestSort will automatically check if the plugins
# are installed.
##### CrackShot #####
# When CrackShot is installed, all CrackShot weapons will be
# grouped together and sorted by their name
hook-crackshot: true
# You can define a custom name that will be used as prefix
# for all CrackShot weapon names.
# E.g. when you set this to "crackshot_weapon", an AK-47
# will be called "crackshot_weapon_AK-47"
hook-crackshot-prefix: "crackshot_weapon"
##########################
##### Sorting Method #####
##########################
@ -289,4 +309,4 @@ message-error-invalid-options: "&cError: Unknown option %s. Valid options are %s
#########################
# please do not change the following line manually!
config-version: 15
config-version: 16

View File

@ -1,14 +1,14 @@
main: de.jeffclan.JeffChestSort.JeffChestSortPlugin
name: ChestSort
version: 6.2
version: 6.3
api-version: 1.13
description: Allows automatic chest sorting
author: mfnalex
website: https://www.chestsort.de
prefix: ChestSort
database: false
loadbefore:
- InvUnload
loadbefore: [InvUnload]
softdepend: [CrackShot]
commands:
chestsort:
description: Toggle automatic chest sorting