首页
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索
1
PCL我的世界启动器设置第三方登录
44 阅读
2
Debian搭建wireguard组网
12 阅读
3
开源、轻量、易用的服务器监控,实战部署哪吒监控
4 阅读
4
哪吒监控配置nginx反向代理
3 阅读
5
Rust静态编译
3 阅读
服务器
技术
闲谈
MC
VPN
登录
搜索
标签搜索
debian
服务器
Linux
监控
雨云
wireguard
Android
MC
我的世界
硬盘
nginx
反向代理
哪吒
部署
Rust
静态编译
组网
局域网
联机
虚拟网卡
mohuangNPC
累计撰写
18
篇文章
累计收到
1
条评论
首页
栏目
服务器
技术
闲谈
MC
VPN
页面
留言板
统计
友链
关于
推荐
图片压缩
在线PO转MO
柠娜汉化站
搜索到
12
篇与
的结果
2025-12-22
Forge或NeoForge开发过程记录
@Mixin 注解重要的注解,写在类名上,用来表示注入到哪个类@Mixin(TeleportCommand.class)@Shadow 注解当你mixin一个类的时候,然后要用该类的某个内部字段,或者某个方法签名的时候 // @Invoker("teleportToPos") @Shadow private static int teleportToPos(CommandSourceStack p_139026_, Collection<? extends Entity> p_139027_, ServerLevel p_139028_, Coordinates p_139029_, @Nullable Coordinates p_139030_, @Nullable TeleportCommand.LookAt p_139031_) throws CommandSyntaxException { throw new AssertionError(); } // @Invoker("teleportToEntity") @Shadow private static int teleportToEntity(CommandSourceStack source, Collection<? extends Entity> targets, Entity destination) throws CommandSyntaxException { throw new AssertionError(); }如果有某些无语的问题,比如私有方法中还调用了注入类的内部接口或者各种奇葩方法,那干脆直接方法全部复制一遍也可以@Inject注解该注解是直接注入方法@Inject(method = "register", at = @At("HEAD"),cancellable = true)method 代表需要注入的方法at 参数详解at代表注入位置 HEAD 代表方法头插入 RETURN 代表方法RETURN之前插入 TAIL 在方法的最后一条指令之前注入(在return之前)。 INVOKE 方法调用相关的注入点@At(value = "INVOKE", target = "目标方法签名") // 在调用特定方法时注入。 @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getX()D")INVOKE_ASSIGN 在调用方法并将结果赋值给变量时注入。@At(value = "INVOKE_ASSIGN", target = "目标方法签名")INVOKE_STRING 在调用方法且栈顶有特定字符串常量时注入。@At(value = "INVOKE_STRING", target = "目标方法签名", args = "ldc=要匹配的字符串")FIELD 字段访问相关的注入点@At(value = "FIELD", target = "字段签名") //在访问(读取或写入)字段时注入。 @At(value = "FIELD", target = "Lnet/minecraft/world/entity/Entity;x:D")GETFIELD@At(value = "GETFIELD", target = "字段签名") 在读取字段值时注入。PUTFIELD@At(value = "PUTFIELD", target = "字段签名") 在写入字段值时注入。FIELD_GET@At(value = "FIELD_GET", target = "字段签名") 同GETFIELD。FIELD_SET@At(value = "FIELD_SET", target = "字段签名") 同PUTFIELD。数组访问相关的注入点 ARRAY@At(value = "ARRAY") 在数组访问时注入。ARRAY_GET@At(value = "ARRAY_GET") 在读取数组元素时注入。ARRAY_SET@At(value = "ARRAY_SET") 在写入数组元素时注入。局部变量相关的注入点 STORE@At(value = "STORE", ordinal = 0) 在存储到局部变量时注入。LOAD@At(value = "LOAD", ordinal = 0) 在从局部变量加载时注入。JUMP 条件判断相关的注入点@At(value = "JUMP", opcode = Opcodes.IFNE) 在条件跳转指令处注入。IFNULL@At(value = "IFNULL") 在ifnull指令处注入。IFNONNULL@At(value = "IFNONNULL") 在ifnonnull指令处注入。IF_ACMPEQ, IF_ACMPNE@At(value = "IF_ACMPEQ") 在对象引用比较时注入。IF_ICMPEQ, IF_ICMPNE, IF_ICMPLT等@At(value = "IF_ICMPEQ") 在整数比较时注入。常量相关的注入点 CONSTANT@At(value = "CONSTANT", args = "doubleValue=0.0") 在加载常量时注入。新建对象相关的注入点 NEW@At(value = "NEW", target = "类签名") 在创建新对象时注入。 @At(value = "NEW", target = "net/minecraft/world/item/ItemStack")异常处理相关的注入点 THROW@At(value = "THROW") 在抛出异常时注入。特殊注入点 INVOKE_SPECIAL@At(value = "INVOKE_SPECIAL", target = "方法签名") 在调用私有方法或构造方法时注入。INVOKE_VIRTUAL@At(value = "INVOKE_VIRTUAL", target = "方法签名") 在调用虚方法时注入。INVOKE_STATIC@At(value = "INVOKE_STATIC", target = "方法签名") 在调用静态方法时注入。INVOKE_INTERFACE@At(value = "INVOKE_INTERFACE", target = "方法签名") 在调用接口方法时注入。字节码指令相关的注入点 INVOKE_DYNAMIC@At(value = "INVOKE_DYNAMIC") 在invokedynamic指令处注入。INSTANCEOF@At(value = "INSTANCEOF") 在instanceof检查时注入。常用的组合参数 ordinal参数 指定第几次出现的位置:@At(value = "INVOKE", target = "...", ordinal = 0) shift参数 调整注入位置: Shift.BEFORE: 在目标指令之前 Shift.AFTER: 在目标指令之后 Shift.BY: 偏移指定数量 @At(value = "INVOKE", target = "...", shift = Shift.BEFORE)by参数 与Shift.BY一起使用:@At(value = "INVOKE", target = "...", shift = Shift.BY, by = 2)cancellable 参数它控制是否允许取消(跳过)原始方法的执行@Inject(method = "register", at = @At("HEAD"),cancellable = true) private static void modifyCommandPermissions(CommandDispatcher<CommandSourceStack> dispatcher, CallbackInfo ci) { ci.cancel(); }
2025年12月22日
1 阅读
0 评论
0 点赞
2025-12-16
WireGuard的配置文件详解
记录一下wireguard的配置文件参数详解组成WireGuard 配置文件通常命名为 wg0.conf(接口名可自定义),分为 [Interface](本地配置)和 [Peer](对等节点配置)两部分。[Interface] 部分(本地配置)必需参数PrivateKey (必填)本地私钥,用于解密接收的数据生成命令:wg genkey示例:PrivateKey = yAnz5TF+lXXJte14tji3zlMNq+hd2rYUIgJBgB3fBmk=Address (必填)这里的Address的代表的是本机的ip地址,也就是说是别的节点能通过这个Address去访问本机本地虚拟网络地址,可指定多个CIDR 格式(IPv4/IPv6)示例Address = 10.0.0.1/24 Address = 10.0.0.1/24, fd86:ea04:1115::1/64可选参数ListenPort (可选,默认随机)监听端口(UDP)示例:ListenPort = 51820MTU (可选,默认自动)最大传输单元示例:MTU = 1420DNS (可选)DNS 服务器地址示例:DNS = 1.1.1.1 DNS = 8.8.8.8, 8.8.4.4Table (可选)路由表规则值:auto (默认), off, 或数字示例:Table = 1234PreUp, PostUp (可选)接口启动前/后执行的脚本示例:PostUp = iptables -A FORWARD -i %i -j ACCEPTPreDown, PostDown (可选)接口关闭前/后执行的脚本示例:PreDown = iptables -D FORWARD -i %i -j ACCEPTSaveConfig (可选)运行时是否保存配置示例:SaveConfig = trueFwMark (可选)防火墙标记示例:FwMark = 0x1234[Peer] 部分(对等节点配置)必需参数PublicKey (必填)对等节点的公钥,用于加密发送的数据从对等节点的私钥生成:wg pubkey < private.key示例:PublicKey = xTIBA5rboUvnH4htodjb6e697QjLERt1NAB4mZqp8Dg=AllowedIPs (必填)这里的意思是发往AllowedIPs的流量走这个Endpoint,就是配置路由允许通过该对等节点路由的 IP 范围特殊值:0.0.0.0/0 表示全部流量示例:AllowedIPs = 10.0.0.2/32 AllowedIPs = 10.0.0.0/24, 192.168.1.0/24 AllowedIPs = 0.0.0.0/0 # 完整隧道可选参数Endpoint (可选,但至少一个节点需要)对等节点的公网地址和端口格式:IP或域名:端口示例:Endpoint = 203.0.113.1:51820PersistentKeepalive (可选)NAT 穿透保持连接间隔(秒)示例:PersistentKeepalive = 25PresharedKey (可选,增强安全性)预共享密钥,对称加密生成命令:wg genpsk示例:PresharedKey = /UwcSPg38hW/D9Y3tcS1FOV0K1wuURMbS0sesJEP5ak=完整配置文件示例服务器端配置 (wg0.conf)[Interface] # 服务器配置 Address = 10.0.0.1/24 ListenPort = 51820 PrivateKey = <server_private_key> # 可选配置 DNS = 8.8.8.8 MTU = 1420 # 防火墙规则 PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE [Peer] # 客户端1 PublicKey = <client1_public_key> AllowedIPs = 10.0.0.2/32 [Peer] # 客户端2 PublicKey = <client2_public_key> AllowedIPs = 10.0.0.3/32客户端配置 (wg0.conf)[Interface] # 客户端配置 Address = 10.0.0.2/24 PrivateKey = <client_private_key> DNS = 8.8.8.8 [Peer] # 服务器端 PublicKey = <server_public_key> Endpoint = server.example.com:51820 AllowedIPs = 0.0.0.0/0 PersistentKeepalive = 25
2025年12月16日
2 阅读
0 评论
0 点赞
2025-12-15
CLion结合android ndk打包so
最近学习开发安卓端的SO库,但是发现大多数教程用的工具都比较老,我比较喜欢jetbrains全家桶,所以记录一下Clion配置开发Android ndk so的过程首先需要关联ndk如下toolset好像是啥都可以(暂定)CMake需要配置命令行参数增加一个debug,options里面写-DCMAKE_TOOLCHAIN_FILE="E:\SDK\Android\ndk\25.1.8937393\build\cmake\android.toolchain.cmake" -DCMAKE_SYSTEM_NAME=Android -DANDROID_ABI=arm64-v8a -DCMAKE_ANDROID_NDK="E:\SDK\Android\ndk\25.1.8937393" -DCMAKE_SYSTEM_VERSION=19 -DCMAKE_C_FLAGS="" -DCMAKE_CXX_FLAGS="" -DCMAKE_ANDROID_NDK_TOOLCHAIN_VERSION=clang完成后勾选如图即可执行build(好像就是交叉编译)cmakelist.txt文件需要加几个必要的# 到时候根据项目具体情况改一下 set(CMAKE_CXX_STANDARD 17) include_directories(${CMAKE_SOURCE_DIR}/include) include_directories(E:/SDK/Android/ndk/25.1.8937393/toolchains/llvm/prebuilt/windows-x86_64/sysroot/usr/include) add_library(TcpServer SHARED library.cpp server/tcpserver.cpp server/tcpserver.h) find_library(log-lib log) #安卓日志库 target_link_libraries(TcpServer ${log-lib}) #关联安卓日志库
2025年12月15日
1 阅读
0 评论
0 点赞
2025-12-15
Android虚拟机命令行虚拟机调试
这几天用uniapp调试开发APP,又不想连接手机,AndroidSdk自带的虚拟机不错,但是又不想开Android Studio,就记录一下命令行开启调试虚拟机的方法查看设备列表进入AndroidSdk的目录,进入emulator目录,打开命令行emulator.exe -list-avds命令行运行设备指定dns运行设备 emulator.exe -avd 你的虚拟机名称 -dns-server 8.8.8.8这里指定DNS,是因为大概率如果用工具直接运行则无法上网,因为dns是内网地址,需要指定dns性能测试相关生成性能测试文件adb shell am dumpheap com.xxx.xxx /data/local/tmp/xxxx.hprof拉取文件到本机adb pull /data/local/tmp/xxxx.hprof 路径
2025年12月15日
2 阅读
0 评论
0 点赞
2025-12-12
Arduino安装依赖时网络问题
最近搞esp8266的开发,使用Arduino IDE安装依赖的时候总是网络问题,记录一下设置代理以及代理设置失败的话需要如何处理使用代理打开IDE 选择file->preferences->network在里面配置代理手动方式如果代理方式不生效(我就遇到了这个问题),可以在提示框中查看什么包下载错误,手动下载下来之后放到Windows: C:\Users[你的用户名]\AppData\Local\Arduino15\staging\packages\Mac: ~/Library/Arduino15/staging/packages/Linux: ~/.arduino15/staging/packages/
2025年12月12日
2 阅读
0 评论
0 点赞
1
2
3
Warning
: file_put_contents(/var/www/html/rss.xml): failed to open stream: Permission denied in
/var/www/html/usr/plugins/CustomRSS/Plugin.php
on line
149