{"id":14969513,"url":"https://github.com/resonos/tachyon","last_synced_at":"2025-10-26T09:30:53.236Z","repository":{"id":253634276,"uuid":"843859030","full_name":"Resonos/Tachyon","owner":"Resonos","description":"Schematic library for Minecraft Spigot \u0026 Paper Servers","archived":false,"fork":false,"pushed_at":"2024-09-17T05:42:34.000Z","size":101,"stargazers_count":6,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-31T17:14:05.926Z","etag":null,"topics":["api","fawe","minecraft","optimized","paper","plugin","schematic","spigot","worldedit"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Resonos.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-17T16:28:35.000Z","updated_at":"2025-01-11T19:11:44.000Z","dependencies_parsed_at":"2024-09-11T18:56:45.304Z","dependency_job_id":"3e07f76c-c2b1-41b9-93a8-67af4e7256c1","html_url":"https://github.com/Resonos/Tachyon","commit_stats":{"total_commits":41,"total_committers":1,"mean_commits":41.0,"dds":0.0,"last_synced_commit":"f18745c3688a9269cfc1c7d3ced30505a5d5ef78"},"previous_names":["athishh/tachyon"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Resonos%2FTachyon","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Resonos%2FTachyon/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Resonos%2FTachyon/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Resonos%2FTachyon/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Resonos","download_url":"https://codeload.github.com/Resonos/Tachyon/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238301118,"owners_count":19449393,"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","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":["api","fawe","minecraft","optimized","paper","plugin","schematic","spigot","worldedit"],"created_at":"2024-09-24T13:41:58.251Z","updated_at":"2025-10-26T09:30:47.972Z","avatar_url":"https://github.com/Resonos.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tachyon\nA Easy to Use, Fast, Cross-Version schematic library.\n\nStop having to depend on large plugins like WorldEdit or Limiting Libraries like NeoSchematic. Tachyon allows you to create, save, load \u0026 paste schematics easily \u0026 Efficiently.\n\n## Features\n- [x] 🟩 **Easy to Use** 🟩\n    - Extremely easy to use, just implement tachyon and look at our simple usage examples!\n  \n- [x] 🌎 **1.8 - 1.20 Version Support** 🌎\n    - Create Schematics on any version you please. It is just as fast if not faster on some versions 😉\n  \n- [x] 💎 **Much Smaller than WorldEdit** 💎\n    - Stop having to depend on a whole large plugin like worldedit or having to use other schematic libraries that are inefficient or sacrifice version support\n  \n- [x] 🌟 **Faster than WorldEdit** 🌟\n    - Tachyon's Pasting system is simply much faster than worldedit :)\n  \n- [x] 🚀 **Fully Asynchronous \u0026 Zero TPS Impact** 🚀\n    - There won't be any TPS loss no matter the amount of blocks being set. This is because Tachyon places blocks using NMS, thereby bypassing inefficient bukkit methods.\n  \n- [x] 📜 **Custom file extension for schematics 📜**\n    - Tachyon uses a custom file extension for schematics which is \".tachyon\" by default but you may set it to whatever you'd like by rewriting 1 string.\n  \n- [x] ⚡ **Hyperfast loading \u0026 saving of schematics** ⚡\n    - Significantly greater speeds for saving and loading schematics, sometimes upto 10x faster than regular java serialization.\n- [x] 🛠️ **Schematic Editing** 🛠️\n    - We support direct editing of schematics without having to paste them. This includes:\n      - [x] **Rotations** - Rotate the schematic by any angle multiple of 90 degrees.\n      - [x] **Flipping** - Flip the schematic up , down, left or right.\n      - [x] **Block Replacements** - Replace any block type in the schematic.\n\n## TODO\n- [ ] Add Version info for schematics\n- [ ] Fix block rotations\n\n\n## Setup\n\n**Manual**\\\nJust Copy the files into your project.\n\n## Usage\n\n### Creating a Schematic from locations\n```java\nSchematic.createAsync(pos1, pos2, origin);\n```\n\n### Saving a Schematic\n```java\nSchematic schematic = /* get your schematic */\nFile file = new File(dir, filename + Schematic.getFileExtension());\nschematic.saveAsync(file);\n```\n\n### Loading/Creating a Schematic from File\n```java\nFile file = new File(getDataFolder(), \"schematics/\" + filename + Schematic.getFileExtension());\nSchematic.createAsync(file);\n```\n\n\n### Pasting a Schematic\n```java\nSchematic schematic = /* get your schematic */\nschematic.pasteAsync(pasteLocation, true);  // boolean ignoreAir blocks\n```\n\n### Example plugin\n```java\npackage me.athish.tachyon;\n\nimport org.bukkit.Location;\nimport org.bukkit.command.Command;\nimport org.bukkit.command.CommandSender;\nimport org.bukkit.entity.Player;\nimport org.bukkit.plugin.java.JavaPlugin;\n\nimport java.io.*;\nimport java.util.HashMap;\nimport java.util.Map;\nimport java.util.UUID;\n\npublic final class ExamplePlugin extends JavaPlugin {\n  private final Map\u003cUUID, Location\u003e firstPoints = new HashMap\u003c\u003e();\n  private final Map\u003cUUID, Location\u003e secondPoints = new HashMap\u003c\u003e();\n  private final Map\u003cUUID, Schematic\u003e schematics = new HashMap\u003c\u003e();\n\n  @Override\n  public void onEnable() {\n    getCommand(\"schematic\").setExecutor(this);\n  }\n\n  @Override\n  public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {\n    if (!(sender instanceof Player)) {\n      sender.sendMessage(\"This command can only be used by players.\");\n      return true;\n    }\n\n    Player player = (Player) sender;\n\n    if (args.length \u003c 1) {\n      player.sendMessage(\"Usage: /schematic \u003cpos1|pos2|copy|save|load|paste\u003e [filename]\");\n      return true;\n    }\n\n    switch (args[0].toLowerCase()) {\n      case \"pos1\":\n        firstPoints.put(player.getUniqueId(), player.getLocation());\n        player.sendMessage(\"First position set.\");\n        break;\n      case \"pos2\":\n        secondPoints.put(player.getUniqueId(), player.getLocation());\n        player.sendMessage(\"Second position set.\");\n        break;\n      case \"copy\":\n        copyBlocks(player);\n        break;\n      case \"save\":\n        if (args.length \u003c 2) {\n          player.sendMessage(\"Usage: /schematic save \u003cfilename\u003e\");\n          return true;\n        }\n        saveSchematic(player, args[1]);\n        break;\n      case \"load\":\n        if (args.length \u003c 2) {\n          player.sendMessage(\"Usage: /schematic load \u003cfilename\u003e\");\n          return true;\n        }\n        loadSchematic(player, args[1]);\n        break;\n      case \"paste\":\n        pasteSchematic(player);\n        break;\n      default:\n        player.sendMessage(\"Unknown subcommand. Use pos1, pos2, copy, save, load, or paste.\");\n    }\n\n    return true;\n  }\n\n  private void copyBlocks(Player player) {\n    Location first = firstPoints.get(player.getUniqueId());\n    Location second = secondPoints.get(player.getUniqueId());\n\n    if (first == null || second == null) {\n      player.sendMessage(\"Please set both positions first.\");\n      return;\n    }\n    long start = System.currentTimeMillis();\n    Schematic.createAsync(first, second, player.getLocation()).thenAccept(schematic -\u003e {\n      schematics.put(player.getUniqueId(), schematic);\n      player.sendMessage(\"Blocks copied successfully. \" + (System.currentTimeMillis() - start) + \" ms\");\n    }).exceptionally(e -\u003e {\n      player.sendMessage(\"Error creating schematic: \" + e.getMessage());\n      return null;\n    });\n  }\n\n  private void saveSchematic(Player player, String filename) {\n    Schematic schematic = schematics.get(player.getUniqueId());\n    if (schematic == null) {\n      player.sendMessage(\"Please copy a schematic first.\");\n      return;\n    }\n    File dir = new File(getDataFolder(), \"schematics\");\n    if (!dir.exists()) {\n      dir.mkdirs();\n    }\n\n    File file = new File(dir, filename + Schematic.getFileExtension());\n    if (file.exists()) {\n      player.sendMessage(\"A schematic with that name already exists.\");\n      return;\n    }\n    long start = System.currentTimeMillis();\n    schematic.saveAsync(file).thenRun(() -\u003e player.sendMessage(\"Schematic saved successfully.\" + (System.currentTimeMillis() - start) + \" ms\"))\n            .exceptionally(e -\u003e {\n              player.sendMessage(\"Error saving schematic: \" + e.getMessage());\n              return null;\n            });\n  }\n\n  private void loadSchematic(Player player, String filename)  {\n    try {\n      File file = new File(getDataFolder(), \"schematics/\" + filename + Schematic.getFileExtension());\n      long start = System.currentTimeMillis();\n      Schematic.createAsync(file).thenAccept(schematic -\u003e {\n        schematics.put(player.getUniqueId(), schematic);\n        player.sendMessage(\"Schematic created and stored successfully.\"  + (System.currentTimeMillis() - start) + \" ms\");\n      }).exceptionally(e -\u003e {\n        player.sendMessage(\"Error loading schematic: \" + e.getMessage());\n        return null;\n      });\n    } catch (Exception e) {\n      player.sendMessage(\"Error loading schematic: \" + e.getMessage());\n    }\n  }\n\n  private void pasteSchematic(Player player) {\n    Schematic schematic = schematics.get(player.getUniqueId());\n    if (schematic == null) {\n      player.sendMessage(\"Please load/copy a schematic first.\");\n      return;\n    }\n    Location pasteLocation = player.getLocation();\n    long start = System.currentTimeMillis();\n    schematic.pasteAsync(pasteLocation, true).thenRun(() -\u003e\n                    player.sendMessage(\"Schematic pasted successfully. \" + (System.currentTimeMillis() - start) + \" ms\"))\n            .exceptionally(e -\u003e {\n              player.sendMessage(\"Error pasting schematic: \" + e.getMessage());\n              return null;\n            });\n  }\n}\n```\n\n## Credits\n- [BlockChanger](https://github.com/TheGaming999/BlockChanger) by TheGaming999\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresonos%2Ftachyon","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fresonos%2Ftachyon","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fresonos%2Ftachyon/lists"}