ChestShop (iConomyChestShop)

ChestShop (iConomyChestShop)

6M Downloads

[ChestShop] (build 342) generated an exception while executing task 1046188

andrewkm opened this issue ยท 8 comments

commented

What is happening?

[22:55:13] [Craft Scheduler Thread - 542 - ChestShop/WARN]: [ChestShop] Plugin ChestShop v3.12.1-SNAPSHOT (build 342) generated an exception while executing task 1046188
java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) ~[?:?]
	at java.lang.Integer.parseInt(Integer.java:678) ~[?:?]
	at java.lang.Integer.parseInt(Integer.java:786) ~[?:?]
	at com.Acrobot.Breeze.Utils.QuantityUtil.parseQuantity(QuantityUtil.java:16) ~[ChestShop.jar:?]
	at com.Acrobot.ChestShop.Signs.ChestShopSign.getQuantity(ChestShopSign.java:256) ~[ChestShop.jar:?]
	at com.Acrobot.ChestShop.Signs.ChestShopSign.getQuantity(ChestShopSign.java:246) ~[ChestShop.jar:?]
	at com.Acrobot.ChestShop.Listeners.PostShopCreation.ShopCreationLogger.lambda$onShopCreation$0(ShopCreationLogger.java:24) ~[ChestShop.jar:?]
	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[patched_1.17.1.jar:git-Paper-408]
	at org.bukkit.craftbukkit.v1_17_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[patched_1.17.1.jar:git-Paper-408]
	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.17.1.jar:git-Paper-408]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]

What did you expect to happen?

Fairies to fall from the sky.

Plugin Version

Build 342

Plugin Config

Config
# Should the plugin log some messages that are useful for debugging?
DEBUG: false

# Do you want to turn off the automatic updates of ChestShop?
TURN_OFF_UPDATES: true
# Do you want to turn off the automatic notifications for new development builds?
TURN_OFF_DEV_UPDATE_NOTIFIER: true
# Do you want to include some values of this config in the metrics? (This will not leak sensitive data but help in the development process)
INCLUDE_SETTINGS_IN_METRICS: false

# How large should the internal caches be?
CACHE_SIZE: 1000

# The default language when the client's language can't be found.
DEFAULT_LANGUAGE: "en"
# Should the plugin try to use a language file that matches the client's locale setting?
USE_CLIENT_LOCALE: true

# What containers are allowed to hold a shop? (Only blocks with inventories work!)
SHOP_CONTAINERS: 
- "CHEST"
- "TRAPPED_CHEST"
- "BARREL"

# (In 1/1000th of a second) How often can a player use the shop sign?
SHOP_INTERACTION_INTERVAL: 250
# Do you want to block people in creative mode from using shops?
IGNORE_CREATIVE_MODE: true
# Do you want to block people who have access to a shop due to their permissions from using it? (owners are always ignored)
IGNORE_ACCESS_PERMS: false
# If true, people will buy with left-click and sell with right-click.
REVERSE_BUTTONS: false
# If true, people will be able to buy/sell in 64 stacks while holding the crouch button.
SHIFT_SELLS_IN_STACKS: false
# If true, people will be able to sell/buy everything available of the same type.
SHIFT_SELLS_EVERYTHING: false
# What can you do by clicking shift with SHIFT_SELLS_IN_STACKS turned on? (ALL/BUY/SELL)
SHIFT_ALLOWS: "ALL"
# Can shop's chest be opened by owner with right-clicking a shop's sign?
ALLOW_SIGN_CHEST_OPEN: false
# If true and in 1.14+, the owner of a chest shop can click with a dye / ink sac to dye the sign.
SIGN_DYING: false
# If true, when you left-click your own shop sign you won't open chest's inventory, but instead you will start destroying the sign.
ALLOW_LEFT_CLICK_DESTROYING: true

# If true, if the shop is empty, the sign is destroyed and put into the chest, so the shop isn't usable anymore.
REMOVE_EMPTY_SHOPS: false
# If true, if the REMOVE_EMPTY_SHOPS option is turned on, the chest is also destroyed.
REMOVE_EMPTY_CHESTS: false
# A list of worlds in which to remove empty shops with the previous config. Case sensitive. An empty list means all worlds.
REMOVE_EMPTY_WORLDS: 
- "world1"
- "world2"

# First line of your Admin Shop's sign should look like this:
ADMIN_SHOP_NAME: "EcoCityCraft"
# Make all admin shops be unlimited even if they have a shop container at the sign
FORCE_UNLIMITED_ADMIN_SHOP: false
# The name of the economy account which Admin Shops should use and to which all taxes will go
SERVER_ECONOMY_ACCOUNT: "andrewkm"
# The uuid of the economy account for the Admin Shop. Useful for fake accounts as normally only accounts of players work
SERVER_ECONOMY_ACCOUNT_UUID: 231881e6-de0f-4224-bfce-0b78e07d862b
# Percent of the price that should go to the server's account. (100 = 100 percent)
TAX_AMOUNT: 0
# Percent of the price that should go to the server's account when buying from an Admin Shop.
SERVER_TAX_AMOUNT: 0
# Amount of money player must pay to create a shop
SHOP_CREATION_PRICE: 0
# How much money do you get back when destroying a sign?
SHOP_REFUND_PRICE: 0
# How many decimal places are allowed at a maximum for prices?
PRICE_PRECISION: 2
# This makes sure that the UUIDs of player shop accounts match the server's online-mode setting. Disabling this might lead to issues with offline players and is therefore unsupported!
ENSURE_CORRECT_PLAYERID: true
# This regexp validates the name of the player. If the name doesn't match, the player will neither be able to create a valid shop sign, nor buy/sell from a shop.
# Note for Bedrock support: If you have Floodgate on your server, you should set this regexp to ^\\*?\\w+$ and ENSURE_CORRECT_PLAYERID to false
# If your Floodgate prefix is not *, change the first * in the regexp (the one before the question mark) to whatever your prefix is.
VALID_PLAYERNAME_REGEXP: "^\\w+$"

# Should we block shops that sell things for more than they buy? (This prevents newbies from creating shops that would be exploited)
BLOCK_SHOPS_WITH_SELL_PRICE_HIGHER_THAN_BUY_PRICE: true

# Maximum amount of items that can be bought/sold at a shop. Default 3456 is a double chest of 64 stacks.
MAX_SHOP_AMOUNT: 3456

# Do you want to allow other players to build a shop on a block where there's one already?
ALLOW_MULTIPLE_SHOPS_AT_ONE_BLOCK: false
# Can shops be used even when the buyer/seller doesn't have enough items, space or money? (The price will be scaled adequately to the item amount)
ALLOW_PARTIAL_TRANSACTIONS: true
# Can '?' be put in place of item name in order for the sign to be auto-filled?
ALLOW_AUTO_ITEM_FILL: true

# Enable this if you use BungeeCord and want players to receive shop notifications on other servers
BUNGEECORD_MESSAGES: false

# Do you want to show "Out of stock" messages?
SHOW_MESSAGE_OUT_OF_STOCK: true
# Do you want to show "Full shop" messages?
SHOW_MESSAGE_FULL_SHOP: true
# How many seconds do you want to wait before showing notifications for the same shop to the owner again?
NOTIFICATION_MESSAGE_COOLDOWN: 10

# Can players hide the "Out of stock" messages with /cstoggle?
CSTOGGLE_TOGGLES_OUT_OF_STOCK: false
# Can players hide the "Full shop" messages with /cstoggle?
CSTOGGLE_TOGGLES_FULL_SHOP: false
# Do you want to show "You bought/sold... " messages?
SHOW_TRANSACTION_INFORMATION_CLIENT: true
# Do you want to show "Somebody bought/sold... " messages?
SHOW_TRANSACTION_INFORMATION_OWNER: true

# If true, plugin will log transactions in its own file
LOG_TO_FILE: true
# Do you want ChestShop's messages to show up in console?
LOG_TO_CONSOLE: true
# Should all shop removals be logged to the console?
LOG_ALL_SHOP_REMOVALS: true

# Do you want to stack all items up to 64 item stacks?
STACK_TO_64: false
# Do you want to use built-in protection against chest destruction?
USE_BUILT_IN_PROTECTION: true
# Do you want to have shop signs "stick" to chests?
STICK_SIGNS_TO_CHESTS: false
# EXPERIMENTAL: Do you want to turn off the default protection when another plugin is protecting the block? (Will leave the chest visually open - CraftBukkit bug!)
TURN_OFF_DEFAULT_PROTECTION_WHEN_PROTECTED_EXTERNALLY: true
# Do you want to turn off the default sign protection? Warning! Other players will be able to destroy other people's shops!
TURN_OFF_SIGN_PROTECTION: false
# Do you want to disable the hopper protection, which prevents Hopper-Minecarts from taking items out of shops?
TURN_OFF_HOPPER_PROTECTION: false
# Only allow users to buy/sell that have access to the sign's protection? (E.g. LWC protection)
CHECK_ACCESS_FOR_SHOP_USE: false
# Do you want to protect shop chests with LWC?
PROTECT_CHEST_WITH_LWC: true
# Of which type should the container protection be? Possible type: public, private, donate and on some LWC versions display
LWC_CHEST_PROTECTION_TYPE: "PRIVATE"
# Do you want to protect shop signs with LWC?
PROTECT_SIGN_WITH_LWC: true
# Of which type should the sign protection be? Possible type: public, private, donate and on some LWC versions display
LWC_SIGN_PROTECTION_TYPE: "PRIVATE"
# Should the chest's LWC protection be removed once the shop sign is destroyed? 
REMOVE_LWC_PROTECTION_AUTOMATICALLY: true
# Should LWC limits block shop creations?
LWC_LIMITS_BLOCK_CREATION: true

# Do you want to only let people build inside WorldGuard regions?
WORLDGUARD_INTEGRATION: false
# Do you want to only let people build inside region flagged by doing /region regionName flag allow-shop allow?
WORLDGUARD_USE_FLAG: false
# Do you want ChestShop to respect WorldGuard's chest protection?
WORLDGUARD_USE_PROTECTION: false

# Do you want to only let people build inside GriefPrevention claims?
GRIEFPREVENTION_INTEGRATION: false

# Do you want to only let people build inside RedProtect regions?
REDPROTECT_INTEGRATION: false

# Do you want to deny shop access to unlogged users?
AUTHME_HOOK: true
# Do you want to allow shop access to unregistered users? (Example: registration is optional)
AUTHME_ALLOW_UNREGISTERED: false

# How much Heroes exp should people get for creating a ChestShop?
HEROES_EXP: 0.0

# Add icons and make item names hoverable in transaction messages when ShowItem is installed?
SHOWITEM_MESSAGE: true

# Add stock counter to quantity line?
USE_STOCK_COUNTER: true

Server Version

Paper 1.17.1 Build 408

Server Log

Request privately via andrewkm#0001 Discord.

What other plugins are you running?

Request privately via andrewkm#0001 Discord.

Agreements

Additional context

I recently started eating Avocados and find them delicious.

commented

https://www.spigotmc.org/threads/i-dont-understand-why-the-signs-lines-are-empty.369059/#post-3371506


PreShopCreationEvent preEvent = new PreShopCreationEvent(event.getPlayer(), sign, lines);

ShopCreatedEvent postEvent = new ShopCreatedEvent(preEvent.getPlayer(), preEvent.getSign(), uBlock.findConnectedContainer(preEvent.getSign()), preEvent.getSignLines(), preEvent.getOwnerAccount());

String item = ChestShopSign.getQuantity(event.getSign()) + ' ' + ChestShopSign.getItem(event.getSign());

@Phoenix616 @andrewkm

commented

We have to replace some event.getSign() with event.getSignLines()

commented

Seeing as this worked before without issues it's definitely not whatever that old thread states. Most likely a regression with the recent changes regarding sign parsing. I was sure that I checked that the new logic mirrored the old ones but it's possible that I missed some cases.

commented

SignChangeEvent#getBlock is the sign block before the change, so getting sign lines is not possible

commented

some logging
console
I think passing sign lines instead of a sign object to all methods in PreShopCreationEvent and ShopCreatedEvent listeners will fix it

commented
[04:13:26] [Server thread/INFO]: getQuantity(String[] lines) - QuantityChecker - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: getQuantityLine(String[] lines) - QuantityChecker - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: length = 4
[04:13:26] [Server thread/INFO]: QUANTITY_LINE = 1
[04:13:26] [Server thread/INFO]: lines = [, 1, B 1, Stone]
[04:13:26] [Server thread/INFO]: lines[QUANTITY_LINE] = 1
[04:13:26] [Server thread/INFO]: getQuantity(Sign sign) - PriceRestrictionModule - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: getQuantity(String[] lines) - PriceRestrictionModule - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: getQuantityLine(String[] lines) - PriceRestrictionModule - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: length = 4
[04:13:26] [Server thread/INFO]: QUANTITY_LINE = 1
[04:13:26] [Server thread/INFO]: lines = [, , , ]
[04:13:26] [Server thread/INFO]: lines[QUANTITY_LINE] = 
[04:13:26] [Server thread/INFO]: getQuantity(Sign sign) - StockCounterModule - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: getQuantity(String[] lines) - StockCounterModule - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: getQuantityLine(String[] lines) - StockCounterModule - PreShopCreationEvent
[04:13:26] [Server thread/INFO]: length = 4
[04:13:26] [Server thread/INFO]: QUANTITY_LINE = 1
[04:13:26] [Server thread/INFO]: lines = [, , , ]
[04:13:26] [Server thread/INFO]: lines[QUANTITY_LINE] = 
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: getQuantity(Sign sign) - ShopCreationLogger - ShopCreatedEvent
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: getQuantity(String[] lines) - ShopCreationLogger - ShopCreatedEvent
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: getQuantityLine(String[] lines) - ShopCreationLogger - ShopCreatedEvent
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: length = 4
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: QUANTITY_LINE = 1
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: lines = [, , , ]
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/INFO]: lines[QUANTITY_LINE] = 
[04:13:26] [Craft Scheduler Thread - 7 - ChestShop/WARN]: [ChestShop] Plugin ChestShop v3.12.1-SNAPSHOT (compiled at 2022-02-15T03:11:57Z) generated an exception while executing task 78
java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(NumberFormatException.java:67) ~[?:?]
	at java.lang.Integer.parseInt(Integer.java:678) ~[?:?]
	at java.lang.Integer.parseInt(Integer.java:786) ~[?:?]
	at com.Acrobot.Breeze.Utils.QuantityUtil.parseQuantity(QuantityUtil.java:16) ~[ChestShop.jar:?]
	at com.Acrobot.ChestShop.Signs.ChestShopSign.getQuantity(ChestShopSign.java:267) ~[ChestShop.jar:?]
	at com.Acrobot.ChestShop.Signs.ChestShopSign.getQuantity(ChestShopSign.java:256) ~[ChestShop.jar:?]
	at com.Acrobot.ChestShop.Listeners.PostShopCreation.ShopCreationLogger.lambda$onShopCreation$0(ShopCreationLogger.java:24) ~[ChestShop.jar:?]
	at org.bukkit.craftbukkit.v1_18_R1.scheduler.CraftTask.run(CraftTask.java:101) ~[purpur-1.18.1.jar:git-Purpur-1555]
	at org.bukkit.craftbukkit.v1_18_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:57) ~[purpur-1.18.1.jar:git-Purpur-1555]
	at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[purpur-1.18.1.jar:git-Purpur-1555]
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[?:?]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[?:?]
	at java.lang.Thread.run(Thread.java:833) ~[?:?]
commented

Not too sure how that would be possible tbh. That code should not be reached if the shop is invalid. I assume you don't have information on which sign caused this error?

commented

Nah, no idea my man, I'd have to do a deep dive to reproduce and get more info.