ItemFrameShops

 FREE ItemFrameShops 6.6.0

ItemFrameShops
◦•●❤♡ ᴄᴏɴᴛᴀᴄᴛ Dekomori on discord ꜰᴏʀ ꜱᴜᴘᴘᴏʀᴛ ♡❤●•◦

Tested Minecraft Versions:
1.14 / 1.15 / 1.16 / 1.17 / 1.18

Sell items and blocks to your players using Item Frames!

Features
  • Create shops, super fast and easy! Very easy to use
  • Shops are automatically protected
  • Advanced automatic price calculation: shop prices are based on a file with some default prices for uncraftable items, all other prices are calculated using their recipes (this includes in-world crafting). IFS will also take into account damaged items and price them according to the amount of damage. Does not include brewing at this time for technical reasons
  • Nice completely customizable GUI menu to interact with a shop.
  • Preview the item you're buying by seeing it as a preview in the shop menu inventory
  • Use WorldEdit to create (or remove) a lot of shops at once.
  • Offer discounts when people buy per stack (or don't, it's up to you!)
  • Works with any custom item as long as it can be put in a item frame
  • Beautifully presented - Item Frames
  • Tested and working with CraftBukkit and Spigot 1.14, 1.15, 1.16, 1.17 and 1.18 (no default prices yet) older versions starting with 1.8 can be used by using older IFS versions (those may lack newer features and are not actively supported)
  • All user-facing messages are customizable

Note: This plugin does not support player shops, and will not in the near future. It is to be used by admins to create shops for server players.

hQLyQpl.png


Prices
Almost every item has a default price shipped with the plugin. You might have to set some prices yourself. (In case of exotic items like mob spawners)
I am not responsible for problems with the included default prices. It is the task of the server owner to finetune prices, the ones I include are just suggestions. All craftable items will be automatically priced based on your defaults.

If you want to change a specific price, make sure you use this webpage. It contains a list of all items, so you can add custom prices for any item.

Required plugins
- Vault
- Permissions system (Bukkit default or plugin like LuckPerms)
- Economy plugin that is supported by Vault. (I use Essentials economy)

Make sure to see the manual for correct versions of these dependencies. https://wwx.be/itemframeshops/docs

Commands and permissions:
Non-command permissions:
  • ifs.admin.remove
  • ifs.admin.create
  • ifs.user.sell
  • ifs.user.buy
  • ifs.user.discount32
  • ifs.user.discount64
  • ifs.user.useSellAll
  • ifs.user.useBuyAll
Commands with permissions:

- /ifs setbuyprice [new buyprice] - Sets buy price for shop (click on item frame to apply, toggles)
Permission: ifs.command.buyprice

- /ifs help - Shows information about commands
Permission: ifs.command.help

- /ifs list - Lists all shops.
Permission: ifs.command.list

- /ifs materials - Saves a file containing all possible materials (blocks and items) in the game. Useful to customize default prices.
Permission: ifs.command.materials

- /ifs setmode [BUYING/SELLING/BOTH/DISABLED] - Set if shop is disabled or allowed to sell and/or buy items
Permission: ifs.command.mode

- /ifs setprice [new price] - Automatically sets sell price to 80% of buy for shop (click on item frame to apply, toggles)
Permission: ifs.command.price

- /ifs recalc - Recalculates buy/sell prices for shop (click on item frame to apply, toggles)
Permission: ifs.command.recalc

- /ifs reload - Reloads config files and data from disk
Permission: ifs.command.reload

- /ifs removeall - Removes all shops from the game.
Permission: ifs.command.removeall

- /ifs remove - Removes shop (click on item frame to apply, toggles)
Permission: ifs.command.remove

- /ifs save - Saves config files and data to disk
Permission: ifs.command.save

- /ifs setsellprice [new sellprice] - Sets sell price for shop (click on item frame to apply, toggles)
Permission: ifs.command.sellprice

- /ifs info - Shows statistics and information about a shop. (toggle on/off)
Permission: ifs.command.info

- /ifs worth - Shows the price and recipes ifs will use for the item in your hand.
Permission: ifs.command.worth

- /ifs debug - Contains a surprise every update
:)
(This is just a command I use to test certain things, I do not recommend that you use it)
Permission: ifs.command.debug

- /ifs create - Enables creating shops (click on item frame to create shop, toggles)
Permission: ifs.command.create

- /ifs shoplayout [amount of rows] - Allows you to change how a shop looks. You can reposition all "menu items" in a fake shop-like inventory. It is a work in progress and might be buggy!
Permission: ifs.command.shoplayout

- /ifs recalcall - Recalculates and loads all shop prices. This will remove any custom set pricing!
Permission: ifs.command.recalcall

- /ifs modifyallprices [multiplier] - Modifies all shop prices based on a multiplier. (does not calculate prices again!)
Permission: ifs.command.modifyallprices

- /ifs iteminfo - Used for debugging prices stuff. Shows item info.
Permission: ifs.command.iteminfo

- /ifs convertworth - Allows you to convert all prices from Essentials worth file to prices.properties. This might help to migrate prices from essentials.
Permission: ifs.command.convertworth

- /ifs groupwhitelist [group] - Adds or removes a group from the group whitelist. (list of groups that are allowed to use the shop) - This feature and command is in beta!
Permission: ifs.command.groupwhitelist

- /ifs setdefaultprice [new default price]
- Allows changing the default price (in prices.properties) for the item in your hand. (does not work for custom items!)
Permission: ifs.command.setdefaultprice
- /ifs createshopsinselection - Turns every itemframe in your WorldEdit selection into a shop.
Permission: ifs.command.createshopsinselection

- /ifs removeshopsinselection - Removes every shop in your WorldEdit selection (but keeps items and frames).
Permission: ifs.command.removeshopsinselection

- /ifs recalcshopsinselection - Recalculates prices for every shop in your WorldEdit selection.
Permission: ifs.command.recalcshopsinselection
- /ifs sellall - Sells your entire inventory at IFS calculated prices.
Permission: ifs.command.sellall
- /ifs sellhand - Sells the item in your hand using a price calculated by IFS.
Permission: ifs.command.sellhand

Settings:
To change these settings, edit config.yml, then do /ifs reload. Do not use /reload as that will overwrite your changes. To give you an idea of what you can configure, this is the default config file.

Code (Text):

#ItemFrameShops config file. Information about a setting can be found above the setting using a comment like this.
#More information can be found at: http://www.spigotmc.org/resources/itemframeshops.4667/
#If you have a problem, please use this page: http://wwx.be/itemframeshops/problem.php
#If you are going to set up prices, this page might come in handy: http://wwx.be/itemframeshops/
#Thank you for buying my plugin, I hope you enjoy using it!
plugin:
# Change this to change how the plugin messages look in chat.
tag: '&4[IFS]: &e'
# Set this to true to enable logging. The plugin will create a logs.txt in the plugin folder.
logging: true
# Can enable or disable update checks.
checkForUpdate: true
# Automatically save shops every 15 minutes?
autoSave: true
# Experimental setting.
# Set this to true to sync prices with existing shops when you create new ones.
synchronizeShops: false
# Set to true if you want the shop menu to stay open when a "button" was clicked.
keepShopMenuOpen: false
# Set to true if you want to block shop usage for people in creative mode.
noCreativeUsage: true

prices:
# All newly created shop prices will be multiplied by this number.
priceMultiplier: 1.0
# Buy price * this number = Sell price
sellFactor: 0.8
# The default price shops will use when they can not load or calculate a price.
defaultPrice: 20.0
# The next two settings are for discounts.
# Value is in percent, must be between 1 and 99
discountPercent32: 2
discountPercent64: 4
# Set this to true to show large numbers as 100k or 20M, ...
convertLargeNumbers: false
inventory:
misc:
# Use this to change the shop title. This will use extra server bandwidth!
# Colors are not supported for 1.8.x
shopMenuTitle: default
# Set this to false if you don't want to allow selling stacks for unstackable items.
show3264forUnstackable: true
# Set to true if you do not want to show an item when a feature is disabled.
hideDisabledItem: false
# Set to true if you do not want to show the preview item.
hidePreviewItem: false
# Set to true if you want the buy/sell buttons to be the same item as the item being sold.
useItemAsIcon: false
# Set to true to disable the sell all button.
disableSellAll: false
# Set to true to disable the fill inventory button.
disableBuyAll: true
# Change the item that is being used for buy/sell buttons.
# A list of materials can be found here: http://wwx.be/itemframeshops/materials.php Use the "Bukkit Material"
shopIconsMaterial: GOLD_INGOT
# Change the item that is being used for "disabled" icons.
# A list of materials can be found here: http://wwx.be/itemframeshops/materials.php Use the "Bukkit Material"
disabledIconMaterial: BARRIER
# Change names and lores for buy icons. Use ; for a new line.
buy:
nameBuy1: Buy 1
nameBuy32: Buy 32
nameBuy64: Buy 64
nameBuyAll: Fill inventory
loreBuy1: 'Buy just 1 from this shop;&6Price: {price}'
loreBuy32: 'Buy half a stack from this shop;&6Price: {price}'
loreBuy64: 'Buy a stack from this shop;&6Price: {price}'
loreBuyAll: 'Fill your inventory;&6Total price: {price}'
loreDiscount32: 'Buy half a stack from this shop;&6Price: {price};&a- {discount}%
discount;&6Total: {total}'
loreDiscount64: 'Buy a stack from this shop;&6Price: {price};&a- {discount}% discount;&6Total:
{total}'
# Change names and lores for sell icons. Use ; for a new line.
sell:
nameSell1: Sell 1
nameSell32: Sell 32
nameSell64: Sell 64
nameSellAll: Sell All
loreSell1: 'Sell just 1 to this shop;&6Price: {price}'
loreSell32: 'Sell half a stack to this shop;&6Price: {price}'
loreSell64: 'Sell a stack to this shop;&6Price: {price}'
loreSellAll: 'Sell all to this shop;&6Price: {price}'
# Change names and lores for disabled icons. Use ; for a new line.
disabled:
nameDisabled: '&4DISABLED'
loreDisabled: This feature is disabled for this shop.
# Do not change these numbers!
# They are used by the plugin for the /ifs layout command.
layout:
sell1slot: 8
sell32slot: 7
sell64slot: 6
sellAllSlot: 14
buy1slot: 0
buy32slot: 1
buy64slot: 2
buyAllSlot: 12
previewSlot: 4
inventorySize: 18

Configurable messages:
Code (Text):

actions:
playerbuy:
just_bought: You've just bought {amount} {itemname}
could_not_withdraw: We could not withdraw the correct amount of funds from your account.
no_permission: You cannot buy items from ifs shops. You do not have the permission.
no_space_in_inventory: You don't have enough space in your inventory!
not_in_group_whitelist: Your group/rank is not allowed to buy here!
playersell:
just_sold: You've just sold {amount} {itemname}
could_not_withdraw: We could not withdraw the correct amount of items from your inventory. You don't have enough.
no_permission: You cannot sell items to ifs shops. You do not have the permission.
not_in_group_whitelist: Your group/rank is not allowed to sell here!
create:
empty: You can't create an empty shop!
success: 'Success! This shop contains: {itemname} for {price}'
no_permission: You do not have permission to create shops.
remove:
success: Shop successfully removed. The ItemFrame is now no longer protected and can be removed.
no_permission: You do not have permission to remove shops.
commands:
GLOBAL:
no_permission: 'You do not have permission to use this command. You need: {permission}'
price_not_valid: That is not a valid price!
player_only: This command can only be run by a player.[/I]

Typical usage
1. Create shops by right clicking an item frame while crouching.
easycreate-gif.40316

2. Optionally set the shop prices and/or modes by using the command.
3. Click the shop to view all available options.
The plugin will display an inventory GUI like this (the layout is cutomisable!):
inventory-gif.40313

4. Remove shops by left clicking a frame while crouching.

Important
Permissions

- ifs.admin.remove (allows removal of shops)
- ifs.admin.create (allows creation of shops)
- ifs.user.sell (allows selling to shops)
- ifs.user.buy (allows buying from shops)
In case you want to allow players to use /ifs sellall, you need to add the command permission AND ifs.command

Minecraft versions

IFS has a very extensive manual that will help you install the correct dependencies for the correct server versions. Please make sure you see the getting started guide here: https://wwx.be/itemframeshops/docs


Preventing /reload problems
IFS does not support /reload
. although I strongly advise against it, when you use /reload you will have to manually do /ifs reload afterwards to load your shops. I know this might be very annoying for some, but at this moment, there isn’t much I can do about it. Besides, restarting really is way better for your server. Please be aware that if you do not use the /ifs reload command after using /reload your shops will be unprotected!

Plugin Conflicts
This plugin should work fine with most plugins as ItemFrameShops does not depend on any special code.


FAQ
Q:
I crouch and right click at the same time and it only flips the item in the frame?
A: Make sure vault is installed and that you have an economy plugin installed. Also check your console for errors or warning messages.

Q: I'm getting an error when I click buy, what is wrong?
A: Are you using 1.7.10? If that's the case, you'll need to use Vault version 1.4.1 and not newer. Otherwise, use the discussion section.

Q: Can I buy items with XP?
A: No.

Q: Can I use this for mob spawners?
A: On its own, no. But with the help of silkspawners you can easily sell working spawners using IFS.

Q: WorldGuard is sending messages to players saying that they don't have permissions, can you fix this?
A: I'd like to, but I can't. The only way to get rid of the messages is to set the deny-message flag on the region the shops are in, in the WorldGuard regions.yml file. Example: http://pastebin.com/Sb1Z2f2m

Q: It no work
A: You me send more information

Q: Where is the cake?
A: The cake is a lie. Or is it?

Latest updates

  1. 6.6.0

    6.6.0
  2. 6.5.0

    6.5.0
  3. 6.4.1

    6.4.1

Latest reviews

[09:13:35 WARN]: [IFS] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[09:13:35 WARN]: [IFS] !! You are illegally using my plugin. !!
[09:13:35 WARN]: [IFS] !! Please consider buying it if you like it. !!
[09:13:35 WARN]: [IFS] !! http://-Redacted-/1lsg77G !!
[09:13:35 WARN]: [IFS] !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
[09:13:35 INFO]: [IFS] Disabling ItemFrameShops v6.4.1
[09:13:35 ERROR]: Could not pass event PluginDisableEvent to ItemFrameShops v6.4.1
java.lang.IllegalStateException: InventoryCloseEvent may only be triggered synchronously.
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:595) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.craftbukkit.v1_16_R1.event.CraftEventFactory.handleInventoryCloseEvent(CraftEventFactory.java:1421) ~[patched_1.16.1.jar:git-Paper-138]
at net.minecraft.server.v1_16_R1.EntityPlayer.closeInventory(EntityPlayer.java:1405) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.craftbukkit.v1_16_R1.entity.CraftHumanEntity.closeInventory(CraftHumanEntity.java:456) ~[patched_1.16.1.jar:git-Paper-138]
at com.woutwoot.ItemFrameShops.iF.ˊ(Unknown Source) ~[?:?]
at com.destroystokyo.paper.event.executor.asm.generated.GeneratedEventExecutor682.execute(Unknown Source) ~[?:?]
at org.bukkit.plugin.EventExecutor.lambda$create$1(EventExecutor.java:69) ~[patched_1.16.1.jar:git-Paper-138]
at co.aikar.timings.TimedEventExecutor.execute(TimedEventExecutor.java:76) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:607) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:409) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:516) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:508) ~[patched_1.16.1.jar:git-Paper-138]
at com.woutwoot.ItemFrameShops.ﻴ.run(Unknown Source) ~[?:?]
at org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftTask.run(CraftTask.java:99) ~[patched_1.16.1.jar:git-Paper-138]
at org.bukkit.craftbukkit.v1_16_R1.scheduler.CraftAsyncTask.run(CraftAsyncTask.java:54) ~[patched_1.16.1.jar:git-Paper-138]
at com.destroystokyo.paper.ServerSchedulerReportingWrapper.run(ServerSchedulerReportingWrapper.java:22) ~[patched_1.16.1.jar:git-Paper-138]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_265]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_265]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_265]
Does it work on 1.15 ??
Thank you very much. all works as it should
BlackSpigot General Chat
Rules Help Users
    Z @ zezohassan: hi
    Top