{"id":118392,"date":"2026-06-07T02:05:23","date_gmt":"2026-06-06T23:05:23","guid":{"rendered":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/"},"modified":"2026-06-07T02:05:23","modified_gmt":"2026-06-06T23:05:23","slug":"over-enchant","status":"publish","type":"mod","link":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/","title":{"rendered":"Over Enchant"},"content":{"rendered":"<details>\n<summary>README(\u7b80\u4f53\u4e2d\u6587\uff09<\/summary>\n<p># OverEnchanted\uff08\u8d85\u9650\u9644\u9b54\uff09<\/p>\n<p>> \u8fd9\u662f\u4e00\u4e2a\u9762\u5411\u6709\u5f00\u53d1\u80fd\u529b\u7684 Paper \u670d\u4e3b\u7684\u63d2\u4ef6\u539f\u578b\uff0c\u63d0\u4f9b\u201c\u8d85\u9650\u9644\u9b54\u201d\u73a9\u6cd5\uff1a\u7528**\u9b54\u6cd5\u7b26\u6587** + **\u8d85\u9650\u9b54\u6cd5\u6838\u5fc3** + \u4e00\u5806\u6750\u6599\uff0c\u5728\u4e13\u95e8\u7684\u201c\u8d85\u9650\u9644\u9b54\u53f0\u201d\u4e0a\u5c06\u7269\u54c1\u6253\u4e0a\u4e0d\u517c\u5bb9\/\u8d85\u51fa\u6700\u5927\u7b49\u7ea7\u9650\u5236\u7684\u9644\u9b54\/\u5728\u6b64\u57fa\u7840\u4e0a\u7ee7\u7eed\u63d0\u5347\u67d0\u9879\u9644\u9b54\u7b49\u7ea7\u3002<\/p>\n<p>> **\u672c\u63d2\u4ef6\u5e76\u975e\u5f00\u7bb1\u5373\u7528** \u2014 \u5b83\u5047\u5b9a\u4f60\u4f60\u7684\u4e3b\u4e16\u754c\u6700\u4f4e\u9ad8\u5ea6\u4f4e\u4e8e-64\u5e76\u4e14\u73a9\u5bb6\u6709\u80fd\u529b\u8fdb\u5165\u5e76\u5728\u90a3\u91cc\u653e\u7f6e\u65b9\u5757\uff08\u6216\u8005\u4f60\u53ef\u4ee5\u81ea\u5df1\u4fee\u6539\u8fd9\u91cc\u7684\u903b\u8f91\uff0c\u8be6\u89c1\u201c\u91cd\u8981\u9650\u5236\u4e0e\u5f00\u53d1\u63d0\u793a\u201d\uff09\u3002<\/p>\n<p>&#8212;<\/p>\n<p>## \u73a9\u6cd5\uff1a<br \/>\n&#8211; \u73a9\u5bb6\u624b\u6301\u9644\u9b54\u53f0\uff0c\u53f3\u952e\u4e00\u4e2a\u6ee1\u7ea7\u7684\uff0c\u6709\u6548\u679c\u7684\uff0c\u6fc0\u6d3b\u7684\u4fe1\u6807\uff0c\u83b7\u5f97\u4e00\u4e2a\u8d85\u9650\u9644\u9b54\u53f0\u7269\u54c1<br \/>\n&#8211; \u5c06\u8d85\u9650\u9644\u9b54\u53f0\u653e\u7f6e\u5230**Y<-64**\u7684\u4f4d\u7f6e\uff0c\u7136\u540e\u53f3\u952e\u6253\u5f00\u8d85\u9650\u9644\u9b54\u53f0\u754c\u9762\n- \u5728\u6b64\u754c\u9762\u4e2d\u53ef\u4ee5\u6d88\u8017\u6307\u5b9a\u7684\u6750\u6599\u4e0e**\u9b54\u6cd5\u7b26\u6587\uff08\u901a\u8fc7\u5728\u9ad8\u7089\u4e2d\u7194\u70bc\u9644\u9b54\u4e66\u83b7\u5f97\uff09**\u4e0e**\u8d85\u9650\u9644\u9b54\u6838\u5fc3\uff08\u901a\u8fc7\u6253\u5f00\u67d0\u4e9b\u6218\u5229\u54c1\u7bb1\u5b50\u6216\u8005\u73a9\u5bb6\u51fb\u6740\u67d0\u4e9b\u602a\u7269\u6982\u7387\u83b7\u5f97\uff09**\u5bf9\u7269\u54c1\u8fdb\u884c\u8d85\u9650\u9644\u9b54\n\n---\n\n## \u4e3b\u8981\u529f\u80fd\n\n* **GUI \u6808\u5f0f\u914d\u7f6e\u754c\u9762**\uff1a\u57fa\u4e8e\u5b57\u7b26\u4e32\u5e03\u5c40\u521b\u5efa\u7bb1\u5b50\u83dc\u5355\uff0c\u652f\u6301\u70b9\u51fb\u5207\u6362\u9644\u9b54\u3001\u5b9e\u65f6\u68c0\u67e5\u517c\u5bb9\u6027\u3001\u663e\u793a\u6750\u6599\u9700\u6c42\u4e0e\u6210\u529f\u7387\u3002\n* **\u9b54\u6cd5\u7b26\u6587\uff08Rune\uff09**\uff1a\u901a\u8fc7\u7194\u70bc\u9644\u9b54\u4e66\uff08\u9ad8\u7089\/BlastingRecipe + \u4e8b\u4ef6\u5904\u7406\uff09\u5f97\u6765\uff0c\u4fdd\u5b58\u5176\u9644\u9b54\uff08\u9644\u9b54\u539f\u751f\u5c55\u793a\uff0c\u4e0d\u9690\u85cf\uff09\uff0c\u5e76\u4fdd\u7559\u7b26\u6587\u7b49\u7ea7\uff08PDC\uff09\u3002\n* **\u8d85\u9650\u9b54\u6cd5\u6838\u5fc3\uff08Core\uff09**\uff1a\u901a\u8fc7\u6218\u5229\u54c1\/\u751f\u7269\u6389\u843d\u63d2\u5165\uff0c\u53ef\u914d\u7f6e\u6982\u7387\uff1b\u7269\u54c1\u6750\u8d28\u4e3a\u6728\u70ad\uff08Charcoal\uff09\uff0c\u5e26 glint\u3002\n* **\u8d85\u9650\u9644\u9b54\u53f0\uff08\u653e\u7f6e\u578b\uff09**\uff1a\u628a\u8d85\u9650\u9644\u9b54\u53f0\u7269\u54c1\u653e\u7f6e\u5230\u4e16\u754c\u540e\uff0c\u4f1a\u628a ItemStack \u7684 PDC \u8f6c\u50a8\u5230\u65b9\u5757 TileState \u4e2d\uff1b\u53f3\u952e\u8be5\u65b9\u5757\u6253\u5f00 GUI\uff08\u8981\u6c42\u73a9\u5bb6\u5904\u4e8e Y < -64\uff09\u3002\n* **\u78e8\u77f3\u51c0\u5316**\uff1a\u53ef\u7528\u78e8\u77f3\u79fb\u9664\u7b26\u6587\u4e0a\u7684\u9644\u9b54\uff08\u4f46\u7b26\u6587\u7b49\u7ea7\u4e0e\u6807\u8bc6\u4fdd\u7559\uff09\u3002\n* **\u6218\u5229\u54c1\u6ce8\u5165\u4e0e\u751f\u7269\u6389\u843d**\uff1a\u901a\u8fc7\u914d\u7f6e\u63a7\u5236\u5bb9\u5668 loot table \u4e0e\u6307\u5b9a\u751f\u7269\u7684\u6389\u843d\u6982\u7387\uff08\u4f7f\u7528 `setLoot`\/`EntityDeathEvent`\uff09\u3002\n* **\u5b89\u5168\u4e0e UX**\uff1a\n\n  * GUI \u5173\u95ed\u65f6\u4f1a\u628a\u73a9\u5bb6\u653e\u5165\u7684\u6240\u6709\u7269\u54c1\u8fd4\u8fd8\uff08\u4f18\u5148\u585e\u80cc\u5305\uff0c\u80cc\u5305\u6ee1\u5219\u6389\u843d\u811a\u4e0b\uff09\u3002\n  * \u963b\u6b62\u628a\u9644\u9b54\u4e66\u585e\u8fdb\u76ee\u6807\u7269\u54c1\u69fd\u3002\n  * shift-click \u7b49\u884c\u4e3a\u88ab\u9650\u5236\u4ee5\u907f\u514d\u7ed5\u8fc7\u6821\u9a8c\u3002\n* **\u5916\u89c2**\uff1a\u6240\u6709\u7279\u6b8a\u7269\u54c1\u5728 `editMeta{}` \u4e2d\u8bbe\u7f6e `it.setEnchantmentGlintOverride(true)`\uff08\u5f3a\u5236\u5149\u6548\uff09\uff1b\u9b54\u6cd5\u7b26\u6587\u539f\u751f\u663e\u793a\u9644\u9b54\uff0clore \u4ec5\u5199\u7b26\u6587\u7b49\u7ea7\u3002\n\n---\n\n## \u9002\u7528\u73af\u5883\/\u8981\u6c42\n\n* **\u670d\u52a1\u5668**\uff1aPaperMC \uff08\u5efa\u8bae 1.21.x \u53ca\u4ee5\u4e0a\uff0c**\u4e0d\u517c\u5bb9spigot**\uff09\u3002\n* **JDK\u7248\u672c**\uff1a>= 21\u3002<br \/>\n* **\u6781\u91cd\u8981\uff08\u5fc5\u987b\u6ce8\u610f\uff09**\uff1a\u4e16\u754c\u6700\u4f4e\u9ad8\u5ea6\u9700\u8981\u5c0f\u4e8e-64<\/p>\n<p>  * \u5982\u679c\u4f60\u7684\u5730\u56fe\/\u670d\u52a1\u7aef\u65e0\u6cd5\u628a\u73a9\u5bb6\u5e26\u5230 Y < -64\uff0c**\u4f60\u5fc5\u987b\u4fee\u6539\u4ee3\u7801\u6216\u914d\u7f6e**\uff08\u89c1\u4e0b\u65b9\u201c\u5f00\u53d1\u8005\u63d0\u793a\u201d\uff09\u3002\n* \u672c\u63d2\u4ef6**\u9762\u5411\u6709\u5f00\u53d1\u80fd\u529b\u7684\u670d\u4e3b**\uff1a\u82e5\u4f60\u4e0d\u77e5\u9053\u6216\u8005\u4e0d\u613f\u610f\u589e\u52a0\u4e16\u754c\u9ad8\u5ea6\u4e0a\u4e0b\u9650\u6216\u6539\u4ee3\u7801\uff0c\u8bf7\u614e\u7528\u3002\n\n---\n\n## GUI\/\u63d2\u4ef6\u73a9\u6cd5\u7ec6\u8282\n\n* **\u754c\u9762\u5e03\u5c40**\uff1a\n\n```\n###ABC###\n# #   # #\n#R##I##S#\n         \n         \n####O####\n```\n\n\uff08\u7a7a\u683c\u4ee3\u8868\u7a7a\u683c\u69fd\u4f4d\uff09\n\n* **\u69fd\u4f4d\u8bf4\u660e**\uff1a\n\n  * ITEM\uff08\u5de6\u4e0a\u7a7a\u4f4d\uff0c\u4e3b\u8981\u7269\u54c1\u69fd\uff09\u2014\u2014 \u653e\u5165\u8981\u88ab\u8d85\u9650\u9644\u9b54\u7684\u7269\u54c1\uff08\u4e0d\u5141\u8bb8\u9644\u9b54\u4e66\uff09\n  * RUNES\uff08\u4e2d\u4e0a3\u4e2a\u7a7a\u4f4d\uff09\u2014\u2014 \u653e\u9b54\u6cd5\u7b26\u6587\n  * CORE\uff08\u53f3\u4e0a\u7a7a\u4f4d\uff09\u2014\u2014 \u653e\u8d85\u9650\u9b54\u6cd5\u6838\u5fc3\uff08\u5373\u4f7f\u6ca1\u6709\u7b26\u6587\uff0c\u4e5f\u81f3\u5c11\u9700\u8981 1 \u4e2a\u6838\u5fc3\uff09\n  * MATERIALS\uff08\u4e0b\u65b9\u6240\u6709\u69fd\u4f4d\uff09\u2014\u2014 \u653e\u9700\u8981\u6d88\u8017\u7684\u6750\u6599\uff08I \u69fd\u4f1a\u663e\u793a\u9700\u6c42\uff09\n\n* **\u4fe1\u606f\u663e\u793a**\uff1a\n  * R\uff08\u9644\u9b54\u5217\u8868\uff09\u2014\u2014 \u5217\u51fa\u7269\u54c1\u4e0e\uff08\u6709\u9644\u9b54\u7684\uff09\u7b26\u6587\u4e0a\u7684\u9644\u9b54\uff0c\u5de6\u952e\u5faa\u73af\u9009\u4e2d\n  * A\/B\/C\uff08\u68c0\u67e5\u4f4d\uff09\u2014\u2014 \u663e\u793a\u517c\u5bb9\u6027\u68c0\u67e5\uff08Green\/Red \u6807\u793a\uff0c\u6bcf\u591a\u4e00\u6761\u4e0d\u517c\u5bb9\uff0c\u6240\u6709\u6750\u6599\u6d88\u8017\u6570\u91cf\u589e\u52a0\uff09\n  * S\uff08\u6838\u5fc3\u9700\u6c42\uff09\u2014\u2014 \u663e\u793a\u5f53\u524d\u9700\u8981\u7684\u6838\u5fc3\u6570\u91cf\uff08\u6bcf\u6b21\u754c\u9762\u5237\u65b0\/\u70b9\u51fb\u90fd\u4f1a\u66f4\u65b0\uff09\n  * O\uff08\u7ed3\u7b97\uff09\u2014\u2014 \u663e\u793a\u6210\u529f\u7387\u5e76\u7528\u4e8e\u5c1d\u8bd5\u7ed3\u7b97\uff08\u70b9\u51fb\u65f6\u4f1a\u518d\u6b21\u8fdb\u884c\u5b8c\u6574\u68c0\u67e5\uff09\n\n* **\u6210\u529f\u7387\u8ba1\u7b97**\uff1a\n\n  * \u6bcf\u4e2a 1 \u7ea7\u7b26\u6587 +2.5%\uff0c\u6bcf\u4e2a 2 \u7ea7\u7b26\u6587 +5%\uff0c\u6bcf\u4e2a 3 \u7ea7\u7b26\u6587 +7.5%\uff1b\n  * \u6bcf\u4e2a\u8d85\u9650\u9b54\u6cd5\u6838\u5fc3 +2.5%\uff1b\n  * \u6bcf\u6ee1\u8db3\u4e00\u79cd\u6750\u6599\u9700\u6c42 +2%\uff1b\n  * \u4e0a\u9650 100%\u3002\n\n* **\u7ed3\u7b97\u884c\u4e3a**\uff1a\n\n * \u6210\u529f\uff1a\u6d88\u8017\u5168\u90e8\u6750\u6599\uff0c\u5e94\u7528\u8d85\u9650\u7ed3\u679c\uff1a\n > &#8211; \u82e5\u9009\u4e2d\u6765\u81ea\u7b26\u6587\u7684\u9644\u9b54\uff0c\u5219\u5f3a\u5236\u628a\u7b26\u6587\u4e0a\u7684\u9644\u9b54\u5199\u5230\u7269\u54c1\u4e0a<br \/>\n > &#8211; \u82e5\u9009\u4e2d\u7269\u54c1\u4e0a\u9644\u9b54\uff0c\u5219\u8be5\u9644\u9b54\u7b49\u7ea7 +1<\/p>\n<p> * \u5931\u8d25\uff1a\u4fdd\u7559\u539f\u7269\u54c1\u4e0e**\u4e00\u534a**\u8d85\u9650\u9b54\u6cd5\u6838\u5fc3\uff0c\u5176\u4ed6\u6750\u6599\u5168\u90e8\u6d88\u8017<\/p>\n<p>* **\u5176\u4ed6 UX**\uff1a<\/p>\n<p>  * \u653e\u5165\u7269\u54c1\u540e\u5173\u95ed\u754c\u9762\uff0c\u4e0d\u4f1a\u4e22\u5931\u7269\u54c1\uff1a\u6240\u6709\u6295\u5165\u5728\u5173\u95ed\u65f6\u4f1a\u8fd4\u8fd8\u73a9\u5bb6\uff08\u82e5\u80cc\u5305\u6ee1\u5219\u6389\u843d\u5728\u73a9\u5bb6\u811a\u4e0b\uff09\u3002<br \/>\n  * \u7b26\u6587\u5728\u78e8\u77f3\uff08Grindstone\uff09\u53ef\u4ee5\u51c0\u5316\uff08\u79fb\u9664\u9644\u9b54\u4f46\u4fdd\u7559\u7b26\u6587\u7b49\u7ea7 &#038; PDC\uff09\uff0c\u51c0\u5316\u540e\u7684\u7b26\u6587\u4ecd\u7136\u63d0\u4f9b\u6838\u5fc3\u9700\u6c42\/\u6210\u529f\u7387\uff0c\u4f46\u4e0d\u4f1a\u8d21\u732e\u53ef\u9009\u9644\u9b54\u9879\uff08R \u5217\u8868\u4f1a\u5ffd\u7565\u65e0\u9644\u9b54\u7684\u7b26\u6587\uff09\u3002<br \/>\n  * \u7279\u6b8a\u7269\u54c1\u90fd\u5df2\u5728 `editMeta{}` \u4e2d\u8bbe\u7f6e `it.setEnchantmentGlintOverride(true)`\uff08\u5f3a\u5236\u5149\u6548\uff09\uff1b\u9b54\u6cd5\u7b26\u6587\u4f1a**\u539f\u751f\u663e\u793a\u9644\u9b54**\uff08\u65e0\u9690\u85cf\uff09\uff0clore \u53ea\u663e\u793a\u7b26\u6587\u7b49\u7ea7\u3002<\/p>\n<p>&#8212;<\/p>\n<p>## \u5f00\u53d1\u8005\u63d0\u793a<\/p>\n<p>\u672c\u63d2\u4ef6**\u5f3a\u4f9d\u8d56**\u201c\u4e16\u754c\u6700\u4f4e\u9ad8\u5ea6\u5c0f\u4e8e-64\u4e14\u73a9\u5bb6\u80fd\u5230\u8fbe\u201d\uff0c\u5982\u679c\u4f60\u7684\u4e16\u754c\u65e0\u6cd5\u628a\u73a9\u5bb6\u5e26\u5230\u8be5\u9ad8\u5ea6\uff0c\u4e0b\u9762\u662f\u5e38\u89c1\u7684\u4e09\u79cd\u5904\u7406\u65b9\u5f0f\uff08\u4efb\u9009\u4e00\u79cd\uff09\uff1a<\/p>\n<p>### A. \u589e\u52a0\u4e00\u4e2a\u8c03\u6574\u4e16\u754c\u9ad8\u5ea6\u4e0b\u9650\u7684\u6570\u636e\u5305\uff08\u6700\u7b80\u5355\uff09<\/p>\n<p>### B. \u4fee\u6539\u4ee3\u7801\u5e76\u91cd\u65b0\u7f16\u8bd1\uff08\u53bb\u6389\u6216\u8c03\u6574\u9ad8\u5ea6\u68c0\u67e5\uff09<\/p>\n<p>\u4fee\u6539 `me.axiumyu.overEnchanted.table.OverEnchantedTableBlockListener` \u4e2d\u7684\u68c0\u67e5\uff1a<\/p>\n<p>&#8220;`kotlin<br \/>\n\/\/ \u5f53\u524d\u4ee3\u7801\uff08\u4e25\u683c\u8981\u6c42 y < -64\uff09\nif (p.location.y >= -64.0) {<br \/>\n    p.sendMessage(MM.c(&#8220;<red>\u9700\u8981\u5728\u6df1\u5c42\uff08Y < -64\uff09\u4f7f\u7528 <aqua>\u8d85\u9650\u9644\u9b54\u53f0<\/aqua><\/red>&#8220;))<br \/>\n    return<br \/>\n}<\/p>\n<p>\/\/ \u628a `-64.0` \u6539\u6210\u4f60\u670d\u52a1\u5668\u7684\u53ef\u8fbe\u9ad8\u5ea6\u3002\uff08\u6216\u8005\u76f4\u63a5\u6ce8\u91ca\u6389\u8fd9\u56db\u884c\uff09<br \/>\n\/* \/\/ remove or change threshold<br \/>\n\/\/ if (p.location.y >= -64.0) { &#8230; }<br \/>\n*\/<br \/>\n&#8220;`<\/p>\n<p>### C. \u4e3a\u6ca1\u6709\u5f00\u53d1\u7ecf\u9a8c\u7684\u670d\u4e3b\uff1a\u8bf7\u627e\u4f1a Kotlin\/Java \u7684\u540c\u4f34\u5e2e\u5fd9<\/p>\n<p>\u5982\u679c\u4f60\u4e0d\u4f1a\u6539\u4ee3\u7801\u4f46\u60f3\u8981\u5728\u6807\u51c6\u4e16\u754c\u91cc\u7528\u6b64\u63d2\u4ef6\uff0c\u627e\u4e00\u4e2a\u719f\u6089 Paper \u63d2\u4ef6\u7684\u5c0f\u4f19\u4f34\u4f1a\u6bd4\u53cd\u590d\u6298\u817e\u914d\u7f6e\u6765\u5f97\u5feb\u3002<\/p>\n<p>&#8212;<\/p>\n<p>## \u70ed\u91cd\u8f7d\u914d\u7f6e\u793a\u4f8b<\/p>\n<p>* \u63d2\u4ef6\u5185\u90e8\u6709 `LootConfig.reload()` \u65b9\u6cd5\uff0c\u56e0\u4e3a\u6211\u6ca1\u6709\u8fd9\u6837\u7684\u9700\u6c42\uff0c\u6240\u4ee5\u5f53\u524d\u6ca1\u6709\u66b4\u9732\u6210\u547d\u4ee4\u3002\u4f60\u53ef\u4ee5\u5feb\u901f\u52a0\u4e00\u4e2a\u547d\u4ee4\u6765\u8c03\u7528\u5b83\uff0c\u4f8b\u5982\u5728 `onEnable()` \u4e2d\u6ce8\u518c\u4e00\u4e2a\u7b80\u5355\u7684 `\/overenchanted reload`\uff08\u793a\u4f8b\u4f2a\u4ee3\u7801\uff09\uff1a<\/p>\n<p>&#8220;`kotlin<br \/>\n\/\/ \u4f2a\u4ee3\u7801\uff1a\u5728 plugin.onEnable()<br \/>\ngetCommand(&#8220;oereload&#8221;)?.setExecutor { sender, _, _, _ -><br \/>\n    LootConfig.reload()<br \/>\n    sender.sendMessage(&#8220;OverEnchanted config reloaded&#8221;)<br \/>\n    true<br \/>\n}<br \/>\n&#8220;`<\/p>\n<p>&#8212;<\/p>\n<p>## \u6587\u4ef6\/\u7c7b\u4e00\u89c8\uff08\u4f9b\u5f00\u53d1\u8005\u5b9a\u4f4d\u4fee\u6539\uff09<\/p>\n<p>* `me.axiumyu.overEnchanted.OverEnchantedPlugin` \u2014 \u4e3b\u7c7b\uff08onEnable \u6ce8\u518c\uff09<br \/>\n* `me.axiumyu.overEnchanted.items.OEItems` \u2014 \u9b54\u6cd5\u7b26\u6587 \/ \u6838\u5fc3 \/ \u53f0 \u7684 ItemStack \u5de5\u5382<br \/>\n* `me.axiumyu.overEnchanted.items.RuneSmeltListener` \u2014 \u9ad8\u7089\u7194\u70bc\u9644\u9b54\u4e66 -> \u7b26\u6587\uff08\u914d\u5408 Recipes.register\uff09<br \/>\n* `me.axiumyu.overEnchanted.items.RuneGrindstoneListener` \u2014 \u78e8\u77f3\u51c0\u5316\u7b26\u6587<br \/>\n* `me.axiumyu.overEnchanted.recipes.Recipes` \u2014 \u6ce8\u518c BlastingRecipe\uff08\u5360\u4f4d\uff09<br \/>\n* `me.axiumyu.overEnchanted.menu.OEMenu*` \u2014 \u83dc\u5355\u89c6\u56fe\u4e0e\u76d1\u542c\u3001\u903b\u8f91\uff08S\/R\/ABC\/O \u7b49\uff09<br \/>\n* `me.axiumyu.overEnchanted.table.OverEnchantedTableBlockListener` \u2014 \u653e\u7f6e\u53f0\u65f6\u628a PDC \u5199\u5165 TileState\uff1b\u53f3\u952e\u6253\u5f00 GUI\uff08\u542b Y \u68c0\u67e5\uff09<br \/>\n* `me.axiumyu.overEnchanted.loot.*` \u2014 `LootConfig` \/ `LootInsertListener` \/ `CoreMobDropListener`<br \/>\n* `me.axiumyu.overEnchanted.util.MM` \u2014 \u6587\u672c\u5e8f\u5217\u5316\uff08\u81ea\u52a8\u5728\u6700\u524d\u9762\u52a0 `<!i>` \u4ee5\u53d6\u6d88\u659c\u4f53\uff09<\/p>\n<p>&#8212;<\/p>\n<p>## \u5e38\u89c1\u95ee\u9898<\/p>\n<p>**Q\uff1a\u73a9\u5bb6\u4e22\u5931\u653e\u5165\u7684\u7269\u54c1\uff1f**<br \/>\nA\uff1a\u5df2\u4fee\u590d \u2014\u2014 \u754c\u9762\u5173\u95ed\uff08\u73a9\u5bb6\u4e3b\u52a8\u5173\u95ed \/ \u65ad\u7ebf\u9700\u53e6\u52a0\u5904\u7406\uff09\u65f6\u4f1a\u628a\u6295\u5165\u7269\u54c1\u8fd4\u8fd8\u6216\u6389\u843d\u811a\u4e0b\u3002<\/p>\n<p>**Q\uff1a\u4e3a\u4ec0\u4e48\u9ad8\u7089\u7194\u70bc\u9644\u9b54\u4e66\u4e0d\u8d77\u4f5c\u7528\uff1f**<br \/>\nA\uff1a\u63d2\u4ef6\u5728 `onEnable()` \u6ce8\u518c\u4e86\u4e00\u4e2a `BlastingRecipe`\uff08\u5360\u4f4d\uff09\uff0c\u5e76\u5728 `FurnaceSmeltEvent` \u4e2d\u628a\u771f\u6b63\u7684\u7b26\u6587\/\u9644\u9b54\u8f6c\u79fb\u5230\u7b26\u6587\u4e0a\u3002\u82e5\u4f60\u5728\u4e00\u4e2a\u6781\u7aef\u5316\u7684\u670d\u52a1\u7aef\u5b9e\u73b0\u4e0b\uff08\u81ea\u5b9a\u4e49 Furnace \u884c\u4e3a\uff09\uff0c\u53ef\u80fd\u9700\u8981\u68c0\u67e5\u670d\u52a1\u5668\u65e5\u5fd7\u6216\u81ea\u5b9a\u4e49\u9002\u914d\u3002<\/p>\n<p>**Q\uff1a\u6211\u4e0d\u60f3\u8981 Y < -64 \u9650\u5236**\nA\uff1a\u89c1\u201c\u5f00\u53d1\u8005\u63d0\u793a\u201d\uff0c\u4fee\u6539 `OverEnchantedTableBlockListener.onRightClick` \u4e2d\u7684\u9ad8\u5ea6\u5224\u65ad\u3002\n\n**Q\uff1a\u4e3a\u4ec0\u4e48\u4e0d\u4f7f\u7528\u73b0\u6210\u7684\u7b2c\u4e09\u65b9\u5e93**\nA\uff1a\u56e0\u4e3a\u6211\u670d\u7528\u4e0d\u5230\uff0c\u672a\u6765\u5982\u679c\u9700\u8981\u53ef\u80fd\u4f1a\u8003\u8651\u91cd\u5199\uff0c\u76ee\u524d\u6ca1\u6709\u6253\u7b97\n\n---\n\n## \u9762\u5411\u670d\u4e3b\u7684\u514d\u8d23\u58f0\u660e\n\n* \u672c\u63d2\u4ef6**\u9ed8\u8ba4\u8bbe\u8ba1\u4e3a\u9700\u8981\u80fd\u8bbf\u95ee Y < -64 \u7684\u4e16\u754c**\u3002\u5982\u679c\u4f60\u7684\u670d\u52a1\u5668\u4e16\u754c\u4e0d\u53ef\u8fbe\u8be5\u9ad8\u5ea6\uff0c\u8bf7**\u81ea\u884c\u4fee\u6539\u4ee3\u7801\u6216\u5f81\u6c42\u5f00\u53d1\u8005\u5e2e\u52a9**\u3002\n* \u63d2\u4ef6\u76ee\u524d\u4e3a\u4e00\u4e2a\u529f\u80fd\u5b8c\u6574\u4e14\u504f\u5411\u4e2a\u4eba\u4f7f\u7528\uff0c\u4f46\u4ecd\u9700\u6d4b\u8bd5\u4e0e\u8c03\u4f18\u7684\u5b9e\u73b0\uff1b**\u9488\u5bf9\u670d\u4e3b\u6709\u5f00\u53d1\u80fd\u529b**\uff0c\u5efa\u8bae\u5728\u6d4b\u8bd5\u670d\u5145\u5206\u6d4b\u8bd5\u540e\u518d\u653e\u5230\u751f\u4ea7\u670d\u3002\n\n<\/details>\n<details>\n<summary>README(English)<\/summary>\n<p>> OverEnchanted is a prototype Paper plugin aimed at server owners with development ability. It implements an \u201cover-enchanting\u201d system: use Magic Runes + OverEnchanted Cores + a pile of materials on a special OverEnchanted Table to apply incompatible or over-maxed enchants, or to further raise an existing enchant\u2019s level.<\/p>\n<p>> Not plug-and-play. The plugin assumes your overworld minimum height is below Y = -64 and that players can access and place blocks there (or you can modify the code). See the Developer Notes section.<\/p>\n<p>&#8212;<\/p>\n<p>## How to play<br \/>\n&#8211; Right click an activated, effect chosen and full-level beacon with an enchanting table to obtain an OverEnchanted Table<br \/>\n&#8211; Place OverEnchanted Table **under world Y level -64**, right click it to open GUI<br \/>\n&#8211; consume some materials, **enchantment rune(get by blasting any enchantment book in blast furance)** and **OverEnchant Core(can be found in any configurated loot chests or mob that killed by player)** to upgrade enchantments of item <\/p>\n<p>## Highlights\/Features<\/p>\n<p>&#8211; GUI menu (inventory) created from a string layout \u2014 click to cycle enchants, run compatibility checks, show required materials and success chance.<\/p>\n<p>&#8211; Magic Runes: created by smelting enchanted books (BlastingRecipe + event). Runes keep their enchants (shown natively, not hidden) and have a rune level saved in PDC.<\/p>\n<p>&#8211; OverEnchanted Cores: inserted into loot or dropped by configured mobs; material = CHARCOAL, with forced glint.<\/p>\n<p>&#8211; OverEnchanted Table (placeable): when placed, the ItemStack PDC is stored into the block\u2019s TileState. Right-clicking that placed block opens the GUI. (Requires player Y < -64.)\n\n- Grindstone purification: grindstone can strip enchants from a rune while preserving rune level and PDC.\n\n- Loot injection &#038; mob drops: controlled via config; container loot uses setLoot, mobs use EntityDeathEvent.\n\n## Safety &#038; UX:\n\n- Items placed into the GUI are returned when the GUI is closed (tries to put them back into the player inventory; drops on ground if full).\n\n- Enchanted books cannot be placed into the target item slot.\n\n- Shift-click behaviors are restricted to avoid bypassing checks.\n\nVisuals: all special items set it.setEnchantmentGlintOverride(true) in editMeta{} (forced glint); Magic Runes display enchants natively and show rune level in lore only.\n\n## Requirements \/ Environment\n\n- Server: PaperMC (recommended 1.21.x+). Uses Paper APIs (e.g. Enchantment.getAnvilCost() and TileState\/PDC).\n\n- Build: Kotlin + Gradle (project sources are Kotlin).\n\n- Important runtime requirement: players must be able to reach Y < -64 (strictly less than -64). The plugin strictly checks player Y before allowing the OverEnchanted Table GUI to open.\n\n- If your world does not allow this, you can simply add a datapack that allow this,or modify the code (see Developer Notes).\n\n- This plugin is designed for server owners who can modify code or server data. If you cannot modify world settings or code, this plugin may not suit you.\n\n## GUI \/ Gameplay Details\n\nLayout:\n\n```\n###ABC###\n# #   # #\n#R##I##S#\n         \n         \n####O####\n```\n\n## Slot summary\n\n- ITEM \u2014 main item slot (target item). No enchanted books allowed.\n\n- RUNES (3 slots) \u2014 place Magic Runes (purified runes still keep rune level &#038; PDC).\n\n- CORE (1 slot) \u2014 OverEnchanted Cores (even with no runes, a minimum of 1 core is required).\n\n- MATERIALS (lower slots) \u2014 other required materials; I slot shows the required list.\n\n- R \u2014 enchant list compiled from the item and any runes that have enchants; left-click rotates selection.\n\n- A \/ B \/ C \u2014 compatibility checks (green\/red indicators).\n\n- S \u2014 core requirement display (updates every refresh \/ click).\n\n- O \u2014 resolution\/execute button (shows success chance; clicking performs final verification and attempts the enchant).\n\n## Success chance calculation\n\nEach rune: level 1 \u2192 +2.5%; level 2 \u2192 +5%; level 3 \u2192 +7.5%.\n\nEach OverEnchanted Core \u2192 +2.5%.\n\nEach material requirement satisfied \u2192 +2%.\n\nMax 100%.\n\n## Resolution outcome\n\n- Success: consume all materials, apply the over-enchant:\n> &#8211; if selected enchant is from rune, that rune\u2019s enchants are applied to the item forcely<br \/>\n> &#8211; if selected enchant is from item, that enchant\u2019s level is incremented by 1)<\/p>\n<p>&#8211; Failure: original item is kept; half of the cores (rounded down) remain; all other materials are consumed<\/p>\n<p>## Other behavior<\/p>\n<p>Items put into the GUI are returned when the GUI is closed. If player inventory is full, they drop at the player\u2019s feet.<\/p>\n<p>Grindstone can purify runes (removes enchants but keeps rune level and PDC); purified runes still affect core requirement and success chance, but do not contribute enchants to the R list.<\/p>\n<p>Special items have forced glint (setEnchantmentGlintOverride(true)). Magic Runes natively display enchants; lore only shows rune level.<\/p>\n<p>## Developer Notes<\/p>\n<p>The plugin depends on players being able to go to Y < -64. This is a deliberate design \/ safety choice. If that is not possible on your server, you have these options:\n\nA. install a datapack that allows building under -64.\n\nYou can just search datapacks like height\n\nB. Modify the code (remove or change height check)\n\nEdit me.axiumyu.overEnchanted.table.OverEnchantedTableBlockListener where the plugin checks player Y:\n\n\/\/ Current (strict Y < -64 requirement)\nif (p.location.y >= -64.0) {<br \/>\n    p.sendMessage(MM.c(&#8220;<red>\u9700\u8981\u5728\u6df1\u5c42\uff08Y < -64\uff09\u4f7f\u7528 <aqua>\u8d85\u9650\u9644\u9b54\u53f0<\/aqua><\/red>&#8220;))<br \/>\n    return<br \/>\n}<\/p>\n<p>\/\/ Change -64.0 to the height you want, or remove the four lines entirely to disable the check.<\/p>\n<p>(You may prefer to make the threshold configurable via config.yml.)<\/p>\n<p>C. If you cannot code: ask a Kotlin\/Java developer for help<\/p>\n<p>If you\u2019re not comfortable changing plugin code and your world can\u2019t reach Y < -64, get help, this plugin is aimed at server owners who can adapt it.\n\n## Hot-reload example\n\nThe plugin exposes LootConfig.reload() internally. If you want a quick reload command, add something like:\n\n\/\/ pseudo-code in plugin.onEnable()\ngetCommand(\"oereload\")?.setExecutor { sender, _, _, _ -><br \/>\n    LootConfig.reload()<br \/>\n    sender.sendMessage(&#8220;OverEnchanted config reloaded&#8221;)<br \/>\n    true<br \/>\n}<\/p>\n<p>(Implement command handling according to your command framework.)<\/p>\n<p>## Files \/ Classes<\/p>\n<p>me.axiumyu.overEnchanted.OverEnchantedPlugin \u2014 main class (onEnable registers components)<\/p>\n<p>me.axiumyu.overEnchanted.items.OEItems \u2014 factories for Magic Runes \/ Cores \/ Table ItemStacks<\/p>\n<p>me.axiumyu.overEnchanted.items.RuneSmeltListener \u2014 blasting smelt of enchanted books \u2192 runes (works with Recipes.register())<\/p>\n<p>me.axiumyu.overEnchanted.items.RuneGrindstoneListener \u2014 grindstone purification of runes<\/p>\n<p>me.axiumyu.overEnchanted.recipes.Recipes \u2014 registers the BlastingRecipe placeholder<\/p>\n<p>me.axiumyu.overEnchanted.menu.OEMenu* \u2014 menu view, listener, logic (R \/ A B C \/ S \/ I \/ O)<\/p>\n<p>me.axiumyu.overEnchanted.table.OverEnchantedTableBlockListener \u2014 stores ItemStack PDC into TileState when placing table; right-click to open GUI (with Y check)<\/p>\n<p>me.axiumyu.overEnchanted.loot.* \u2014 LootConfig, LootInsertListener, CoreMobDropListener<\/p>\n<p>me.axiumyu.overEnchanted.util.MM \u2014 text serializer (prepends <!i> to cancel italics)<\/p>\n<p>## FAQ<\/p>\n<p>Q: Items placed in the GUI are disappearing \u2014 fixed?<br \/>\nA: Yes \u2014 GUI close now refunds items. (If you want refunds on player quit or plugin disable, add PlayerQuitEvent or onDisable handling.)<\/p>\n<p>Q: Smelting enchanted books in a blast furnace does nothing?<br \/>\nA: The plugin registers a BlastingRecipe placeholder in onEnable(). The real rune creation happens in FurnaceSmeltEvent. If your server has custom furnace behavior, adapt accordingly.<\/p>\n<p>Q: I don\u2019t want the Y < -64 restriction\nA: See Developer Notes B \u2014 edit OverEnchantedTableBlockListener.onRightClick to alter\/remove the height check.\n\nQ: Why no third-party libraries?\nA: Kept minimal for now; will consider external libs if needed later.\n\nDisclaimer (for server owners)\n\nThis plugin assumes players can access Y < -64. If your server does not allow this, you must modify the code\/config or get developer help.\n\nThe plugin is a feature-complete prototype but still requires testing and tuning. It\u2019s intended for server owners who can edit and test code. Test on a staging server before deploying to production.\n<\/details>\n","protected":false},"excerpt":{"rendered":"<p>allow player to create super enchanted item fairly<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"_minecraft_slug":"over-enchant","_minecraft_project_id":"AuRhLZIv","_minecraft_author":"Axiumyuyu","_minecraft_license":"MIT","_minecraft_downloads":28,"_minecraft_follows":0,"_minecraft_client_side":"unsupported","_minecraft_server_side":"required","_minecraft_storage_type":"zip","_minecraft_archive_name":"over-enchant.zip","_minecraft_size_bytes":64488,"_minecraft_version_count":1,"_minecraft_updated_at":"2026-05-15T22:11:34.035555Z","_minecraft_date_created":"2026-02-09T23:40:34.563811Z","_minecraft_date_modified":"2026-02-07T05:06:52.387402Z","_minecraft_project_url":"https:\/\/modrinth.com\/mod\/over-enchant","_minecraft_icon_attachment_id":0,"_minecraft_imported_at":"2026-06-06T23:05:24+00:00","_minecraft_import_hash":"4869abf060e1a6f3a3d396a4844420b4","_minecraft_versions":"","_minecraft_links":"","_minecraft_gallery":"","_minecraft_api_metadata":""},"mod_category":[88,89,122,127,128],"mod_loader":[132,133],"minecraft_version":[62,37,40,41,73,74,38,78,79,80,81,82],"class_list":["post-118392","mod","type-mod","status-publish","hentry","mod_category-equipment","mod_category-game-mechanics","mod_category-magic","mod_category-paper","mod_category-purpur","mod_loader-paper","mod_loader-purpur","minecraft_version-1-21","minecraft_version-1-21-1","minecraft_version-1-21-10","minecraft_version-1-21-11","minecraft_version-1-21-2","minecraft_version-1-21-3","minecraft_version-1-21-4","minecraft_version-1-21-5","minecraft_version-1-21-6","minecraft_version-1-21-7","minecraft_version-1-21-8","minecraft_version-1-21-9"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Over Enchant - Minecraft<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Over Enchant - Minecraft\" \/>\n<meta property=\"og:description\" content=\"allow player to create super enchanted item fairly\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/\" \/>\n<meta property=\"og:site_name\" content=\"Minecraft\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/over-enchant\\\/\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/over-enchant\\\/\",\"name\":\"Over Enchant - Minecraft\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\"},\"datePublished\":\"2026-06-06T23:05:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/over-enchant\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/over-enchant\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/over-enchant\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Mods\",\"item\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/mods\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Over Enchant\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/#website\",\"url\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/\",\"name\":\"Minecraft\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/vpesports.com\\\/minecraft\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Over Enchant - Minecraft","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/","og_locale":"en_US","og_type":"article","og_title":"Over Enchant - Minecraft","og_description":"allow player to create super enchanted item fairly","og_url":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/","og_site_name":"Minecraft","twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/","url":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/","name":"Over Enchant - Minecraft","isPartOf":{"@id":"https:\/\/vpesports.com\/minecraft\/#website"},"datePublished":"2026-06-06T23:05:23+00:00","breadcrumb":{"@id":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/vpesports.com\/minecraft\/mods\/over-enchant\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/vpesports.com\/minecraft\/"},{"@type":"ListItem","position":2,"name":"Mods","item":"https:\/\/vpesports.com\/minecraft\/mods\/"},{"@type":"ListItem","position":3,"name":"Over Enchant"}]},{"@type":"WebSite","@id":"https:\/\/vpesports.com\/minecraft\/#website","url":"https:\/\/vpesports.com\/minecraft\/","name":"Minecraft","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vpesports.com\/minecraft\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"}]}},"_links":{"self":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod\/118392","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod"}],"about":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/types\/mod"}],"wp:attachment":[{"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/media?parent=118392"}],"wp:term":[{"taxonomy":"mod_category","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_category?post=118392"},{"taxonomy":"mod_loader","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/mod_loader?post=118392"},{"taxonomy":"minecraft_version","embeddable":true,"href":"https:\/\/vpesports.com\/minecraft\/wp-json\/wp\/v2\/minecraft_version?post=118392"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}