在我们自建这套系统之前,我们一直依赖 Crowdin 提供的 Over-The-Air Content Delivery 功能,为安装在众多服务器上的 QuickShop Hikari/Reremake 在线更新本地化语言文件。 那么好端端的,你们怎么突然自建了 很简单,付不起钱了?。 作为个人开发者维护的完全免费的软件,每年找要我们 100 USD 我们可吃不消,更何况用户越来越多。 最初 Crowdin 免费提供该功能,但在中途修改为了付费服务(然而我并不知情),直到22年12月圣诞节期间,Crowdin 团队年底清算的时候给我发来了一封邮件: Crowdin CDN payment (s…
今天编译项目时遇到了这样一个错误:Malformed \uxxxx encoding java.lang.IllegalArgumentException: Malformed \uxxxx encoding. 显然,有个文件损坏了,但是可惜的是 Maven 没有告诉我们到底是哪个文件损坏了。 可以直接扬了 .m2 本地仓库,但是成本太高。依赖很多的情况下,就国内的网络情况不拉个一晚上怕是拉不下来需要的依赖。 着手解决 首先切换到 Terminal 终端,cd 到故障 Maven 项目/模块 目录下面,使用 mvn package -X 重新触发一次编译。 mvn package -X 这次可…
最近一直在玩 PT,感叹 NexusPHP 的性能、代码质量和安全都实在是相当感人了,这种上古软件能活到今天也算是一个奇迹了。所以在自己悄悄搓 PT 程序。 对于一个 Private Tracker 程序,重要功能那自然是读取解析 Torrent,并把其中的 Tracker 换成我们自己的。本想用库来实现,但相当遗憾的是我没找到能够满足我需求的 Vanilla Java 的实现。 既然没有现成的,那就自己来搓一个。 由于我个人只需要解析 Bittorrent v1 版本的 torrent 文件就够了,所以 v2 不在讨论范围内,不过都是大同小异。 Bencode 编码 Torrent 的种子是…
不提供源代码或二进制文件下载不提供最终成品的源代码或二进制可执行文件下载,本文仅介绍工作原理和非完整实现,仅供学习用途。 新的通知又要每天填健康上报了,重复的工作真是无趣(叹气),今天就抽个时间分析一下健康上报系统吧。 抓取页面URL 打开微信,点开数字烟科->疫情健康上报,微信打开了一个 Webview,显而易见这不是小程序而是一个外部网页。 点击右上角三个点,扔到浏览器里拿个 URL 分析看看。 浏览器打开后,就获得了疫情健康上报的 URL:https://ujnpl.educationgroup.cn/jksb/tb/tbIndex 在PC浏览器隐身模式下打开重定向到了校统一身份认证系统…
从今年早些时候开始关注 MultiPaper,到现在 MultiPaper 的完成度终于值得让我写一篇文章赞美一下了(好欸! GitHubMultiPaper/MultiPaper MultiPaper 诞生的背景 TPS 的概念 每个架设过 Minecraft 的服主都多多少少要和 TPS (ticks per second) 打交道,MC 这个游戏的游戏世界所有内容都基于一个循环进行计算,每一个循环称为 1 个tick,每秒循环 20 次,如果这一秒循环次数不够 20 次,则会出现卡顿的情况,服务器会在下一秒尝试多循环补偿 tick 丢失。 由于每个部分(方块、生物、AI等等)他们之…
首先热烈庆祝终于迎来30天的超长暑假,从烤箱回到了空调房。 忙碌的考试周终于结束了,也有时间重新投入到各种稀奇古怪的东西上了。 由于期末的原因,过去的一个月基本都在忙碌的实习、写报告、准备考试之间打转╮(╯▽╰)╭,没抽出太多时间来干别的,不过要说的话还是搞了点东西的。 银行卡那些事儿 首先是四月份网申的中国银行上海支行的非人哉万事达借记卡终于寄到手了。 快件 信封 卡面大概长这个样子,摸上去手感意外的好? 卡面 如果有人想办的话,可以参考这篇文章:安利一张中国银行非人哉万事达借记卡——SnowNekoのBlog 拿到卡第二天顶着38度高温跑了一趟线下激活了卡,然后买了点美元和卢布(?),然后…
有时候在编写 Bukkit 的插件的时候,需要追踪特定方法调用者,以做出不同的行为和响应。但由于 Bukkit 的插件生态系统不同的插件由不同的作者维护,请求其他开发者适配你的接口通常比较困难。 好在,有一种方式可以间接的获取调用者的插件名,进而可以通过 PluginManager 取得插件实例。 获取谁调用的方法通常通过 StackTrace 进行。低版本的 Java 可以通过 new 一个 Exception 获得,而高版本中,Java 提供了一个 StackWalker 更高性能的方式获取。本文中使用 StackWalker 进行演示,演示环境为(JDK 17 + Spigot 1.18…
突然发现自己 star 了超过 300 个 repo,翻了一下整理了一份Bukkit 宝藏类库合集(大概是第一期?),一个是自己要用的时候找起来方便,也希望可以帮助到更多的人少走弯路~ 合集内容较多,您可以使用左侧的菜单快速跳转~ 富文本处理-Minedown GitHubPhoenix616/MineDown 特别好用! Minedown 使用类似 Markdown 的语法,以一种 human-friendly 的格式实现 Minecraft 原始JSON文本格式消息的功能。 Minedown 同时支持 BungeeChat 和 Adventure 两个文本库的分支。Adventure…
应该有小伙伴听说了我最近退出 PotatoCraft Studio 和停止维护 QuickShop-Reremake 并单开一个分支的事情。 我一直没有正面回应过这件事,所以这一次我打算好好说一说。 回顾 QuickShop-Reremake 的起源和历史 QuickShop-Reremake 最初由我 fork 自 KaiKikuchi 的 QuickShop 项目,目的是为了让早已关闭的 “阳光之城-SunnySide” Minecraft 服务器在升级 1.13 的时候尽快能用上所需要的插件。 由于 Bukkit 1.13 一次著名的破坏性更新(MaterialData 被彻底废弃),原…
在加入 waitlist 很久很久以后,昨天(22/01/27)终于收到了 Github 发来的试用 Copilot 的邮件。 GitHub Copilot 的大名早已听闻, 但是只有亲自体验,才能真正感受到恐怖。 我愿称其为 "改变世界" 的产品。 不会让你有机会自己写完一整行代码 只有实践中才能获得真理,安装 GitHub Copilot 后我决定用它去写一个 Mirai 插件。 需要注意的是,我从来没有接触过 Mirai 的 API 和 Kotlin 语言,因此 AI 的提醒至关重要。 然而,我刚刚跟着文档输入了一个 object 后... 我真正受到了震撼,轻轻按一下 TAB,插件的主…