Backpack - including sorting, filtering and recipes! 1.0

backpack, sorting, filter, config, recipes, 5 types, bag, portable, customizable, recipe, nbt, json

  1. TheKoopaCrafter
    Tested Minecraft Versions:
    • 1.8
    Languages Supported:
    German (Deutsch)
    banner.png

    Backpacks
    provides 5 different Backpacks where you can store your items while mining, exploring etc.! There are also 4 different sorting methods:
    • Sort by Amount ascending (0-9)
    • Sort by Amount descending (9-0)
    • Sort by Name ascending (A-Z)
    • Sort by Name descending (Z-A)
    and you can even search for a specific name!

    If an item with an amount which is less than 1 is detected, it will be logged in an file called 'cheat.log' and set the item's amount to 1. A log may look like this:
    Code (Text):
    [2019-07-12 17:38:54] Player: [UUID: 2e9a8168-cae8-301b-bc12-27fcbb0438a3 ; Name: TheKoopaCrafter] ; Method: DECODE ; Material: stone ; Amount: -512 ; Full JSON: {"amount":-512,"material":"stone","meta":{"lore":[],"itemflags":[],"enchantments":[],"type":"default","submeta":{}},"durability":1,"enchantments":[]}
    The Method-Parameter has two states: ENCODE (when the backpack gets closed) and DECODE (when the backpack gets opened).
    The log shows the Players' UUID and Name as well as the Item-Material and Amount.
    The 'Full JSON'-Parameter gives you a JSON-String where you can find all of the data stored on the item.
    This function is implemented to prevent duplicating and to show the server administrator which player had items with an invalid amount.

    The items will not be stored in any file, they are stored as NBT-Data directly in the item! If the backpack gets lost, the items cannot be recovered!
    You cannot put backpacks in a backpack!
    PLEASE report duplication bugs, item disappearing bugs etc. to help me improve this plugin!

    gui.png
    Each GUI has a similar layout:
    layout.JPG
    The only difference between each backpack is the slot count:
    • Tiny: 9 Slots / 1 Row
    • Small: 18 Slots / 2 Rows
    • Medium: 27 Slots / 3 Rows
    • Big: 36 Slots / 4 Rows
    • Large: 45 Slots / 5 Rows
    In the last row of each backpack, you can select the filter, which will be highlighted:
    layout_selection.JPG

    recipes.png
    The recipes can be fully customized and disabled in the recipes.json file! But here are the default recipes:​
    bprecipes.png

    commands.png
    Here is a list of all the currently available commands:
    • /backpack <tiny|small|medium|big|large> - Gives you a backpack (if you are to lazy to craft)
    • /backpack config <save|reload|reset> - Either saves, reloads or resets the config.json-file. If 'reset' is chosen, an backup of your current config.json-file will be saved in the backups-folder.
    • /backpack set <path> <value> - Changes a config value
    • /backpack get [path] - Retreives a config value. If no path is given, it will show all the config values.
    • /backpack recipe <tiny|small|medium|big|large> - Shows you the recipe for the backpack
    All of these commands require the following permission:
    backpacks.command
    config.png
    skull-parameter explaination:
    The skull-parameter can either be a playername (eg. "TheKoopaCrafter") or a base64 encoded string.
    You can get the base64 encoded string by visiting either https://minecraft-heads.com/custom-heads/heads-generator or https://freshcoal.com/, enter the username you want the skin from and you should get a command like this:
    Code (Text):
    /give @p skull 1 3 {display:{Name:"TheKoopaCrafter"},SkullOwner:{Id:"4f00e843-56d5-41f3-b9e3-61cfb9aff867",Properties:{textures:[{Value:"eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZjYxMjY2MDZhNmVmNzE4M2M5YWEyMGIwZGY3NGY1MTZhMjMxNjE4YmNkMzM1MTNiYmIxOGYzNTliNTUyZmI4MCJ9fX0="}]}}}
    And the "random" characters after the "Value"-keyword and between the quotation marks is your base64 encoded string!
    Code (Text):
    {
        "item": {
            "small": {
                "lore": [
                    "&eHolds up to &b18 Item Stacks&e!"
                ],
                "displayname": "&2Small &6Backpack",
                "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZThlNTU0NGFmN2Y1NDg5Y2MyNzQ5MWNhNjhmYTkyMzg0YjhlYTVjZjIwYjVjODE5OGFkYjdiZmQxMmJjMmJjMiJ9fX0="
            },
            "big": {
                "lore": [
                    "&eHolds up to &b36 Item Stacks&e!"
                ],
                "displayname": "&9Big &6Backpack",
                "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvM2FkYmNmYjI4ODIxNWE4ZDE1M2RkZmRkYjM2YmQyZWQ3YTM3YWRkMzU2NjJmODYzM2Y3MTFkMmRmY2ViNDE3YyJ9fX0="
            },
            "large": {
                "lore": [
                    "&eHolds up to &b45 Item Stacks&e!"
                ],
                "displayname": "&4Large &6Backpack",
                "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTZjYzQ4NmMyYmUxY2I5ZGZjYjJlNTNkZDlhM2U5YTg4M2JmYWRiMjdjYjk1NmYxODk2ZDYwMmI0MDY3In19fQ=="
            },
            "tiny": {
                "lore": [
                    "&eHolds up to &b9 Item Stacks&e!"
                ],
                "displayname": "&aTiny &6Backpack",
                "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNmY2OGQ1MDliNWQxNjY5Yjk3MWRkMWQ0ZGYyZTQ3ZTE5YmNiMWIzM2JmMWE3ZmYxZGRhMjliZmM2ZjllYmYifX19"
            },
            "medium": {
                "lore": [
                    "&eHolds up to &b27 Item Stacks&e!"
                ],
                "displayname": "&eMedium &6Backpack",
                "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNDUyY2VlZDA2NDgzNWVhMjMyZTY1NmE3M2Y4MmVkNzYxODI3ODU5YzkxMzQ0OTMxNGI4ZmQyMWIzZDExZDYifX19"
            }
        },
        "gui": {
            "small": {
                "title": "&2Small &6Backpack"
            },
            "general": {
                "background": {
                    "damage": 7,
                    "material": "stained_glass_pane"
                },
                "filters": {
                    "name_ascending": {
                        "damage": 0,
                        "material": "skull_item",
                        "lore": [
                            "&bascending&7: &9A-Z"
                        ],
                        "displayname": "&eSort by Name",
                        "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTY3ZDgxM2FlN2ZmZTViZTk1MWE0ZjQxZjJhYTYxOWE1ZTM4OTRlODVlYTVkNDk4NmY4NDk0OWM2M2Q3NjcyZSJ9fX0=",
                        "selected": {
                            "damage": 0,
                            "material": "skull_item",
                            "lore": [
                                "&bascending&7: &9A-Z"
                            ],
                            "displayname": "&eSort by Name",
                            "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMmFjNThiMWEzYjUzYjk0ODFlMzE3YTFlYTRmYzVlZWQ2YmFmY2E3YTI1ZTc0MWEzMmU0ZTNjMjg0MTI3OGMifX19"
                        }
                    },
                    "amount_descending": {
                        "damage": 0,
                        "material": "skull_item",
                        "lore": [
                            "&bdescending&7: &99-0"
                        ],
                        "displayname": "&eSort by Amount",
                        "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvZTY3Y2FmNzU5MWIzOGUxMjVhODAxN2Q1OGNmYzY0MzNiZmFmODRjZDQ5OWQ3OTRmNDFkMTBiZmYyZTViODQwIn19fQ==",
                        "selected": {
                            "damage": 0,
                            "material": "skull_item",
                            "lore": [
                                "&bdescending&7: &99-0"
                            ],
                            "displayname": "&eSort by Amount",
                            "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYTE5MjhlMWJmZDg2YTliNzkzOTdjNGNiNGI2NWVmOTlhZjQ5YjdkNWY3OTU3YWQ2MmMwYzY5OWE2MjJjZmJlIn19fQ=="
                        }
                    },
                    "amount_ascending": {
                        "damage": 0,
                        "material": "skull_item",
                        "lore": [
                            "&bascending&7: &90-9"
                        ],
                        "displayname": "&eSort by Amount",
                        "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvMGViZTdlNTIxNTE2OWE2OTlhY2M2Y2VmYTdiNzNmZGIxMDhkYjg3YmI2ZGFlMjg0OWZiZTI0NzE0YjI3In19fQ==",
                        "selected": {
                            "damage": 0,
                            "material": "skull_item",
                            "lore": [
                                "&bascending&7: &90-9"
                            ],
                            "displayname": "&eSort by Amount",
                            "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNTVhMjI0ODA3NjkzOTc4ZWQ4MzQzNTVmOWU1MTQ1ZjljNTZlZjY4Y2Y2ZjJjOWUxNzM0YTQ2ZTI0NmFhZTEifX19"
                        }
                    },
                    "name_descending": {
                        "damage": 0,
                        "material": "skull_item",
                        "lore": [
                            "&bdescending&7: &9Z-A"
                        ],
                        "displayname": "&eSort by Name",
                        "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvOTA1ODJiOWI1ZDk3OTc0YjExNDYxZDYzZWNlZDg1ZjQzOGEzZWVmNWRjMzI3OWY5YzQ3ZTFlMzhlYTU0YWU4ZCJ9fX0=",
                        "selected": {
                            "damage": 0,
                            "material": "skull_item",
                            "lore": [
                                "&bdescending&7: &9Z-A"
                            ],
                            "displayname": "&eSort by Name",
                            "skull": "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvNGU5MTIwMGRmMWNhZTUxYWNjMDcxZjg1YzdmN2Y1Yjg0NDlkMzliYjMyZjM2M2IwYWE1MWRiYzg1ZDEzM2UifX19"
                        }
                    },
                    "name_input": {
                        "damage": 0,
                        "material": "sign",
                        "lore": [
                            "&eCurrent filter: &f${current_filter}",
                            "&bRight Click to clear",
                            "&bLeft click to edit"
                        ],
                        "displayname": "&aFilter by Name",
                        "skull": "null",
                        "selected": {
                            "damage": 0,
                            "material": "sign",
                            "lore": [
                                "&eCurrent filter: &f${current_filter}",
                                "&bRight Click to clear",
                                "&bLeft click to edit"
                            ],
                            "displayname": "&aFilter by Name",
                            "skull": "null"
                        }
                    }
                }
            },
            "big": {
                "title": "&9Big &6Backpack"
            },
            "large": {
                "title": "&4Large &6Backpack"
            },
            "tiny": {
                "title": "&aTiny &6Backpack"
            },
            "medium": {
                "title": "&eMedium &6Backpack"
            }
        },
        "message": {
            "filter": "${prefix} &aPlease enter a filter: &7(up to &c32 characters&7, type '&8cancel&7' to cancel)",
            "expired": "${prefix} &cYour time to type a filter has expired. &7(&e${time_formatted}&e)",
            "prefix": "&8[&6&lBackpack&8] &7» ",
            "success": "${prefix} &aApplied filter &7'&f${filter}&7'&a!",
            "cancelled": "${prefix} &cChanging filter cancelled!",
            "timeformat": {
                "milliseconds": "ms",
                "seconds": "s",
                "hours": "h",
                "minutes": "min"
            },
            "filter_input_deadline": "00:01:00.000"
        }
    }
    To disable a specific recipe, just replace the true after the "enabled" with a false.
    You can also create shapeless recipes:
    Code (Text):
    {
        "method": "shapeless",
        "ingredients: [
            "leather",
            "leather",
            "leather",
            "chest",
        ]
    }
    The example above creates a shapeless recipe where you have to put 3 leather and 1 chest in the crafting table to get your backpack!
    Warning: the code above won't work, because there is no 'enabled' defined.
    Shaped recipe:
    Code (Text):
    {
        "method": "shaped",
        "shape": { # Each character represents an item ; if you want to have a slot empty (without an item in the crafting table), just use a space (' ')
            "0": "aaa", # Line 1 in the crafting table
            "1": "bcb", # Line 2 in the crafting table
            "2": "aaa"  # Line 2 in the crafting table
        },
        "ingredients": {
            "a": "leather", # The item 'leather' will be used in the crafting table where you defined 'a' in the shape-object above
            "b": "iron_ingot", # The item 'iron_ingot' will be used in the crafting table where you defined 'b' in the shape-object above
            "c": "chest" # The item 'chest' will be used in the crafting table where you defined 'c' in the shape-object above
        }
    }
    Warning: the code above won't work, because JSON doesn't allow comments and there is no 'enabled' defined.
    Code (Text):
    {
        "small": {
            "shape": {
                "0": "bab",
                "1": "aca",
                "2": "bab"
            },
            "method": "shaped",
            "ingredients": {
                "a": "leather",
                "b": "iron_ingot",
                "c": "chest"
            },
            "enabled": true
        },
        "big": {
            "shape": {
                "0": "aba",
                "1": "cdc",
                "2": "aaa"
            },
            "method": "shaped",
            "ingredients": {
                "a": "diamond",
                "b": "nether_star",
                "c": "leather",
                "d": "chest"
            },
            "enabled": true
        },
        "large": {
            "shape": {
                "0": "aba",
                "1": "cdc",
                "2": "aea"
            },
            "method": "shaped",
            "ingredients": {
                "a": "diamond",
                "b": "eye_of_ender",
                "c": "nether_star",
                "d": "ender_chest",
                "e": "ender_pearl"
            },
            "enabled": true
        },
        "tiny": {
            "shape": {
                "0": "aaa",
                "1": "aba",
                "2": "aaa"
            },
            "method": "shaped",
            "ingredients": {
                "a": "leather",
                "b": "chest"
            },
            "enabled": true
        },
        "medium": {
            "shape": {
                "0": "aaa",
                "1": "bcb",
                "2": "aaa"
            },
            "method": "shaped",
            "ingredients": {
                "a": "gold_ingot",
                "b": "leather",
                "c": "chest"
            },
            "enabled": true
        }
    }
    If you want to use the German Version of the config, just delete the config.json-file and rename the config_de.json-file to config.json!​
    apis.png
    This Plugin uses the following APIs:


    Thank you for downloading my plugin! ;)