{"id":14969697,"url":"https://github.com/divisionind/backpacksremastered","last_synced_at":"2025-08-19T14:15:36.488Z","repository":{"id":37263333,"uuid":"193124978","full_name":"divisionind/BackpacksRemastered","owner":"divisionind","description":"A remastered version of the popular backpacks plugin by drew6017","archived":false,"fork":false,"pushed_at":"2022-11-16T04:30:20.000Z","size":850,"stargazers_count":11,"open_issues_count":15,"forks_count":21,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-07T18:07:01.823Z","etag":null,"topics":["bukkit","bukkit-plugin","craftbukkit","craftbukkit-plugin","minecraft","minecraft-plugin","paper-plugin"],"latest_commit_sha":null,"homepage":"https://dev.bukkit.org/projects/backpack-item","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/divisionind.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-06-21T15:53:37.000Z","updated_at":"2024-11-08T01:44:27.000Z","dependencies_parsed_at":"2022-09-04T15:03:51.623Z","dependency_job_id":null,"html_url":"https://github.com/divisionind/BackpacksRemastered","commit_stats":null,"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"purl":"pkg:github/divisionind/BackpacksRemastered","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/divisionind%2FBackpacksRemastered","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/divisionind%2FBackpacksRemastered/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/divisionind%2FBackpacksRemastered/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/divisionind%2FBackpacksRemastered/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/divisionind","download_url":"https://codeload.github.com/divisionind/BackpacksRemastered/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/divisionind%2FBackpacksRemastered/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271166354,"owners_count":24710465,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bukkit","bukkit-plugin","craftbukkit","craftbukkit-plugin","minecraft","minecraft-plugin","paper-plugin"],"created_at":"2024-09-24T13:42:14.195Z","updated_at":"2025-08-19T14:15:36.449Z","avatar_url":"https://github.com/divisionind.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BackpacksRemastered \u003c[bukkit.org](https://dev.bukkit.org/projects/backpack-item)\u003e\n[![](https://img.shields.io/travis/divisionind/BackpacksRemastered/master.svg?style=flat-square)](https://travis-ci.org/divisionind/BackpacksRemastered)\n![](https://img.shields.io/github/repo-size/divisionind/BackpacksRemastered.svg?style=flat-square)\n![](https://img.shields.io/badge/license-GPLv3-green.svg?style=flat-square)\n\n![](https://raw.githubusercontent.com/divisionind/BackpacksRemastered/master/screenshots/logo.png)\n\u003e BackpacksRemastered adds -- well -- backpacks, to Minecraft, the catch being without the use of any client-side modifications. \nCompletely vanilla backpacks! This plugin was the first of its kind due to the fact that it adds backpacks as an `ItemStack`\nthat will persist its inventory even without the plugin installed! Backpacks also allows you to inspect the NBT data\nof items which is handy for getting an under-the-hood look at how the game works.\n\n## Table of contents\n**[Building](#building)**\u003cbr\u003e\n**[Adding languages](#adding-languages)**\u003cbr\u003e\n**[Adaptors and Integration](#adaptors-and-integration)**\u003cbr\u003e\n**[Donate](#donate)**\u003cbr\u003e\n\n## Building\n\n### Docker\n```shell\ndocker build -t drew6017/backpacks .\ndocker run --rm -v \u003cproj_dir\u003e:/project -it drew6017/backpacks\n./gradlew pack\n```\n\n### Manual (old)\nRequirements:\n  - Gradle\n  - Java 8 **and** 11 (if on windows try AdoptOpenJDK)\n  - Git\n  \nOne major note which needs to be made is that the i18nExtractor plugin uses Java 11 features. This means that Gradle must be\nrun with Java 11. However, most Minecraft servers are still on Java 8, so, the final plugin must be built for Java 8.\n\n#### Setting up Gradle:\n##### The Console\n1. install both JDKs\n2. set Java 11 as your default\n3. proceed with the build normally\n\n##### IntelliJ IDEA\n1. again, install both JDKs\n2. go to `File-\u003eProject Structure`\n3. change \"Project SDK\" to Java 11\n4. change \"Project language level\" to Java 8\n\nFor other IDEs, try the console method or just otherwise configure it to run Gradle with Java 11. Gradle should figure\nout that it needs to build for Java 8 on its own.\n\n#### The steps\n*NOTE: These steps will be for building from the console. Most IDEs will simply provide you with a way to run Gradle\ntasks, just add an entry for the task \"pack\".*\n1. clone the repo `git clone https://github.com/divisionind/BackpacksRemastered.git`\n2. enter repo dir `cd BackpacksRemastered`\n3. run the build task `gradlew pack`\n4. The final plugin jar will be located in `build/libs/BackpacksRemastered*.jar`\n\nThe first build will translate all of the strings from the project using google translate (see *Adding languages*)\nthis may fail as the project is very large. If it does, wait a few hours to a day and try to build again to get the\nrest of the strings. If you don't want this to be an issue, remove some languages.\n\n## Adding languages\nThis plugin uses the i18nExtractor gradle plugin written by me (drew6017) for automatically extracting / translating\nstrings into other languages. You can specify any language supported by Google Translate in the last line\nunder the internationalize task.\n\n__NOTE: Google loves throwing 429 errors (too many requests) when you use this because we are essentially spamming \ngoogle with a translation request for each string we choose to add.__ You could modify this to use googles translation\napi but you are then subject to limitations (and you have to pay). Translations are cached to the \".i18nExtractor\"\ndirectory. Delete the cache corresponding to a particular language to refresh it. Be careful how many languages you\nadd/refresh at once because too many requests ~70-150 (depending on the trust factory of the network requesting translation) \nin one go will cause you to get locked out by google for several hours. __If you see any message about a 429 error in \nthe console, it means that a string was not translated and the resulting jar should not be used with other languages \nas this WILL result in errors.__\n\nAlso, the i18nExtractor plugin is currently licensed as \"All rights reserved\" to Division Industries LLC. You may not\ncopy or modify any code from it. However, there is an API for creating custom translators (which you are free to do).\n\n### Steps\n1. Find the section of the build file that looks like `langs('es', 'it', 'fr')` (If you are familiar with gradle, \n   it should be under the internationalize task).\n2. Add your desired [valid Google translate language code](https://cloud.google.com/translate/docs/languages) to the\n   list.\n3. Build the plugin.\n4. You should now be able to use this same language code in the [config.yml](https://github.com/divisionind/BackpacksRemastered/blob/master/src/main/resources/config.yml) \n   of Backpacks. (minus any -X extensions, e.g. \"zh-CH\" would be \"zh\")\n\n##### Notes\n- Translations are cached in the `.i18nExtractor` directory, delete the cache file corresponding to your desired language\n  to grab the latest translations of that language from google.\n- See above notes about 429 errors.\n\n## Adaptors and Integration\nBackpacks supports 3rd-party plugin integration through the use of \"Adaptors\". These adaptors can register custom commands\nor other custom functionality through the use of \"Abilities\" (functions with re-definable meaning used internally).\n\n#### An example adaptor (see examples/ for more)\nBelow is an example of a plugin adaptor for a plugin named \"ExamplePlugin\". The name value of the `@PluginAdaptorMeta`\nannotation must be the name of your plugin as registered by your plugin.yml.\n```java\n@PluginAdaptorMeta(name = \"ExamplePlugin\")\npublic class AdaptorExamplePlugin extends PluginAdaptor {\n\n    private ExamplePlugin parent;\n\n    @Override\n    public void onEnable(Plugin parent) throws Exception {\n        this.parent = (ExamplePlugin) parent;\n\n        Backpacks.getInstance().registerCommands(new CExampleCommand());\n        getLogger().info(\"Registered ExamplePlugin adaptor!\");\n    }\n\n    @AbilityFunction\n    public boolean hasAccessToContainer(Player player, Location location) {\n        // ... logic\n        return true; // or false\n    }\n\n    private static class CExampleCommand extends ACommand {\n        @Override\n        public String alias() {\n            return \"example\";\n        }\n\n        @Override\n        public String desc() {\n            return \"an example command registered by an example adaptor\";\n        }\n\n        @Override\n        public String usage() {\n            return null;\n        }\n\n        @Override\n        public String permission() {\n            return \"backpacks.example\";\n        }\n\n        @Override\n        public void execute(CommandSender sender, String label, String[] args) {\n            // need a player instance? Player player = validatePlayer(sender);\n            // if the sender is not a player, the command will return and respond accordingly\n            respond(sender, \"\u0026eHello world!\");\n        }\n    }\n}\n```\n\n#### Loading the adaptor\n```java\npublic class ExamplePlugin extends JavaPlugin {\n    @Override\n    public void onEnable() {\n        Backpacks.getAdaptorManager().registerAdaptors(AdaptorExamplePlugin.class);\n        getLogger().info(\"ExamplePlugin has been enabled!\");\n    }\n} \n```\n\nMethods tagged with the `@AbilityFunction` annotation inside of a `PluginAdaptor` are automatically registered\nas abilities with the system. If no value is specified (e.g. `@AbilityFunction(\"someName\")`) then the method's \nname is used as the ability name. Abilities overwrite each other, so, if multiple adaptors register an ability\nwith the same name, the last adaptor loaded will have the ability that persists. The following is a list of\ncurrent abilities used internally by Backpacks:\n\n#### Current abilities\n- `boolean hasAccessToContainer(Player, Location)`: returns true if the player has access to the block at the \n  specified location, otherwise false\n  \n## Donate\n- XMR: `83vzgeeKebLh6pj2YtBqn7PqxY47CkyzmLzUhmHfhTCQdj9Mfad4FUF12Yu9ry5uUh5JASTcXg5Fwji5ibjUngw9LomnH6Z`\n- ETH: `0x1bdA7dB6484802DFf4945edc52363B4A8FAcb470`\n- ETC: `0x4a368bb4cd854f650169ce207268c303ffecafb2`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdivisionind%2Fbackpacksremastered","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdivisionind%2Fbackpacksremastered","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdivisionind%2Fbackpacksremastered/lists"}