自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(146)
  • 问答 (1)
  • 收藏
  • 关注

原创 我的世界进阶模组开发教程——物品(3)

机制实现方式效果清除服务端调用移除实体所有状态效果客户端同步服务端执行后自动同步效果移除状态到客户端饮用耗时固定 32 tick(物品消耗非创造模式下减少物品数量(shrink(1)成就系统触发成就并更新统计空桶替换牛奶桶耗尽时返回空桶(

2025-08-05 10:06:36 44

原创 我的世界进阶模组开发教程——菜单(1)

这个类是 Minecraft 中所有容器菜单(如箱子、熔炉、玩家背包等)的基类,负责管理物品槽位、数据传输和玩家交互逻辑。关键字段// 日志记录器// 表示点击容器外的特殊标识// 上一次槽位状态(用于检测变化)// 当前菜单的所有物品槽// 数据槽(如熔炉燃烧时间)// 玩家当前拖动的物品// 客户端同步的槽位状态// 客户端同步的数据槽值// 状态ID(用于验证客户端与服务端同步)> menuType;// 菜单类型(如箱子、工作台)// 容器的唯一ID。

2025-08-05 07:29:26 37

原创 我的世界进阶模组开发教程——附魔(2)

NBT 驱动所有附魔数据均通过NBT标签(ListTag)存储,兼容游戏存档机制。实体装备集成通过遍历实体装备槽()实现跨物品附魔效果叠加(如多个保护附魔)。附魔兼容性确保同时生效的附魔不冲突(如锋利与亡灵杀手互斥)。附魔生成算法基于物品附魔能力()和随机因子动态生成附魔选项。性能优化使用MutableInt避免装箱拆箱,保持附魔顺序。此类是 Minecraft 附魔系统的核心枢纽,衔接物品、实体、战斗逻辑与用户界面(附魔台),体现了高内聚的工具类设计思想。作为附魔系统的核心枢纽。

2025-08-04 20:14:55 393

原创 我的世界进阶模组教程——附魔(1)

/ 附魔可应用的装备槽位(手、脚等)// 附魔的稀有度(普通、稀有等)// 附魔类型(武器、盔甲等)@Nullable// 本地化键(用于翻译)private static final EquipmentSlot[] ARMOR_SLOTS = // 盔甲4个槽位private static final EquipmentSlot[] MAINHAND = // 主手槽位:头盔/胸甲/护腿/靴子MAINHAND:主手(武器/工具)是Minecraft附魔系统的关键传输媒介。

2025-08-04 15:58:09 255

原创 我的世界进阶模组开发教程——伤害(2)

本文解析了机械动力(Create)模组中实现自定义伤害系统的核心代码,主要包括两个关键类: DamageTypeBuilder:伤害类型建造器 采用建造者模式封装伤害类型的配置逻辑 支持链式调用设置6大属性:消息ID、伤害缩放规则、饥饿消耗、视听效果等 自动处理默认值并集成到Minecraft数据包系统 CreateDamageSources:伤害源工厂 提供类型安全的伤害源创建方法 包含7种机械伤害类型(粉碎、风扇火焰、锯伤等) 支持带责任实体的伤害源配置 通过私有方法统一处理伤害源实例化 该实现通过建造

2025-08-03 23:36:23 80

原创 我的世界模组进阶教程——伤害(1)

作用:声明类所在的包,表明这是伤害源相关的核心类。作用@Nullable:标记可能为 null 的字段或参数Holder:持有注册表对象的容器Component:游戏内文本组件实体相关类(EntityPlayer物品堆(ItemStack3D 向量(Vec3@Nullable@Nullable@Nullable字段说明type:伤害类型的注册表持有者(如火焰、坠落、攻击等)间接造成伤害的实体(例:射箭的玩家,箭是直接实体,玩家是间接实体)

2025-08-03 17:22:36 156

原创 我的世界模组开发进阶教程——方向(1)

作用data3d:3D空间唯一标识符 (0-5):反方向索引 (如DOWN的oppositeIndex=1指向UP)data2d:2D平面标识符 (水平方向0-3,垂直方向为-1)name:方向名称:轴方向 (POSITIVE/NEGATIVE)axis:所属坐标轴 (X/Y/Z)normal:方向向量 (单位向量)原理:每个枚举实例代表一个空间方向,存储了该方向的元数据和几何特征。作用CODEC:将方向名称与枚举值双向映射(如"north" ↔ NORTH)

2025-08-03 14:55:55 27

原创 我的世界进阶模组教程——物品(2)

本文详细解析了Minecraft中的ItemLike接口和InteractionResult枚举。ItemLike作为物品系统的基础抽象,通过asItem()方法统一了不同物品表示的访问方式,其简洁设计支持多态扩展和解耦合。InteractionResult枚举则规范了玩家交互的结果处理,提供5种明确状态(如SUCCESS、CONSUME等)来协调客户端-服务器的交互行为,并包含实用方法判断是否消耗动作或播放动画。这两个核心机制共同构建了Minecraft物品交互的系统架构,前者负责统一物品访问,后者规范交

2025-08-02 23:17:40 110

原创 我的世界模组开发教程——物品item(1)

Item定义了物品的通用行为和属性通过可覆盖的方法提供高度可扩展性管理物品的本地化和显示处理与游戏世界的各种交互通过Properties类提供灵活的配置选项这个类为所有 Minecraft 物品提供了统一的基础框架,使得添加新物品只需继承此类并覆盖相关方法即可实现特定功能。ItemStack状态管理:维护物品的当前状态(数量、耐久、附魔等)数据存储:通过存储所有动态属性行为代理:将操作委托给Item类定义的基础行为显示系统:生成丰富的物品提示信息交互处理。

2025-08-02 22:22:06 224

原创 我的世界进阶模组开发——标签(1)

Minecraft 标签系统核心解析 Minecraft 的标签系统通过TagKey<T>类实现游戏资源的逻辑分组,其核心功能包括: 资源标识:组合注册表键和资源位置唯一标识标签分组(如物品/方块/实体) 内存优化:采用Guava的弱引用对象池(Interner)避免重复实例 数据序列化: 基础Codec直接转换资源位置与标签键 带前缀Codec处理形如"#minecraft:logs"的完整标签语法 类型安全:严格校验标签与注册表类型的匹配关系 典型应用场景包括配方系统(&

2025-08-02 01:28:32 134

原创 java笔记——ConcurrentLinkedQueue

ConcurrentLinkedQueue是Java JUC包中的无界线程安全队列,采用FIFO原则和CAS实现非阻塞并发操作。它适用于多线程数据共享、高并发场景和任务调度,通过无锁设计减少线程阻塞。核心特性包括不允许null元素、弱一致性迭代器和动态扩展能力。与NIO协作时可作为请求缓冲区,解耦生产者/消费者。使用时需注意size()方法低效,优先用isEmpty(),并避免依赖弱一致性方法的实时性。典型应用场景包括线程池任务分发、事件驱动架构和流式数据处理。

2025-07-31 22:23:47 1014

原创 进阶模组开发教程——mc的渲染引擎

if (!跨平台:通过ON_LINUX等标志处理驱动差异线程安全:所有方法通过强制线程检查资源管理:集成 Native 内存管理(如性能指标:在 GTX 1080 上减少 40% 的冗余 OpenGL 调用该设计使 Minecraft 能在复杂场景(如 200+ 实体)保持 60 FPS,同时支持跨 Windows/Linux/macOS 平台一致的渲染表现状态最小化通过精准的状态跟踪,确保OpenGL驱动只接收必要指令线程隔离渲染线程独占OpenGL上下文,逻辑线程通过任务队列交互资源所有权。

2025-07-31 18:08:03 31

原创 模组进阶开发教程——从游戏开发者的角度来研究mc源代码

/ 核心渲染系统管理类// 负责线程管理、状态机控制、OpenGL调用封装优化维度传统OpenGL矩阵堆栈线程安全❌ 全局状态,仅支持单线程✅ 多线程安全,逻辑线程预计算+渲染线程提交内存管理⚠️ 固定深度,驱动层存储易碎片化✅ 动态扩容,JVM堆内存管理功能扩展性⚠️ 仅基础仿射变换✅ 支持复杂变换链+投影矩阵独立控制性能开销⚠️ 高频驱动调用,CPU-GPU通信瓶颈✅ 延迟求值+批处理降低调用频率着色器集成❌ 需手动传递uniform变量✅ 自动同步至着色器参数。

2025-07-31 16:25:11 563

原创 我的世界进阶模组开发forge代码篇——事件(1)

事件系统核心解析:IEventBus与Event的协作机制 IEventBus接口是Forge事件系统的调度核心,与Event基类形成双向协作: 功能分工 Event:事件数据载体,提供状态管理(取消/结果/阶段) IEventBus:事件流转通道,负责监听器注册和事件分发 关键交互 注册时通过反射扫描@SubscribeEvent方法,建立事件类型与处理器的映射 发布事件时按优先级调用ListenerList中的处理器 通过Event的isCanceled()实现短路处理优化 性能优化 提供函数式注册避免

2025-07-31 00:13:08 310

原创 我的世界模组开发教程——资源(1)

的序列化/反序列化机制通过以下方式成为 Minecraft 生态的核心枢纽数据组件系统:作为键名存储动态属性,支持物品/方块/实体的复杂状态管理。命令与资源系统:提供自动化、安全的资源定位,提升模组开发效率。跨版本兼容:通过工厂方法和隐式转换,降低版本升级成本。安全与工具链:内置校验与调试工具,保障系统鲁棒性。此设计使 Minecraft 在维持高扩展性的同时,确保资源标识的全局一致性与安全性,是模组生态繁荣的关键底层支撑。

2025-07-30 22:15:31 160

原创 forge篇——配置

从这篇文章开始,我们开始研究forge代码,以下是forge源代码和代码解析ForgeConfigSpec 类详细解析ForgeConfigSpec 是 Minecraft Forge 模组开发中的核心配置类,基于 NightConfig 库实现,提供了类型安全、验证和自动纠正功能。以下是关键部分的详细解释:作用:封装配置规范,管理配置值、注释和验证逻辑。2. 核心方法解析2.1 配置加载与验证 ( 和 )流程:检查配置是否符合规范(类型、范围等)。自动纠正非法值(如超出范围的数

2025-07-30 17:33:42 181

原创 LWGJL教程(8)——基础知识

现代OpenGL核心概念包括缓冲区(GPU内存块)、顶点数组对象(VAO管理顶点属性)、着色器程序(控制渲染管线)、纹理/帧缓冲(存储图像数据)和查询对象(获取GPU状态)。与传统OpenGL相比,现代版本通过VAO+着色器替代了固定管线,状态数量大幅减少,性能更高。关键流程是:创建缓冲区填充数据→配置VAO→编译着色器→绑定对象→渲染。这种设计实现了CPU-GPU高效数据流,支持复杂渲染效果。

2025-07-28 22:41:12 275

原创 LWGJL教程(7)——GL20源码

本文深入解析GL20源码中glShaderSource的实现原理,从内存管理、类型转换和跨平台设计三个维度展开。核心内容包括:1)原生底层方法的内存布局与参数细节;2)缓冲版高效方案的指针缓冲区使用;3)字符串版方法的内存栈操作与自动转换机制;4)关键技术如NativeType注解系统和内存栈机制。文章还分析了与着色器生命周期的关系、跨平台实现差异,并给出高性能方案和动态重载的最佳实践。该实现通过精细的内存管理和类型映射,在保持开发友好性的同时确保高性能。

2025-07-28 01:37:37 26

原创 LWGJL教程(6)——GL20源码

这段GL20.java提供 OpenGL 2.0 规范定义的完整功能包含从扩展提升为核心的图形功能通过静态初始化块加载本地库保留对固定功能管线的支持为旧硬件和遗留系统提供兼容性是 OpenGL 从固定管线向可编程管线过渡的重要版本虽然现代开发更推荐使用 OpenGL 3.2+ 核心模式,但理解GL20对于学习图形编程发展史和维护遗留系统仍有重要意义。

2025-07-27 14:06:52 146

原创 LWGJL教程(5)——渲染

**摘要:本文讲解如何使用现代OpenGL(3.2+)渲染一个旋转的彩色三角形。主要内容包括:1)OpenGL版本设置;2)顶点数组对象(VAO)作为数据配置容器;3)顶点缓冲对象(VBO)存储顶点数据;4)顶点和片段着色器的编写与编译;5)顶点属性配置;6)Uniform变量传递参数;7)模型-视图-投影(MVP)矩阵变换;8)绘制命令;9)实现平滑旋转动画。通过VAO管理顶点数据,着色器控制渲染流程,配合MVP变换实现3D到2D的投影,最终完成一个动态渲染效果。(150字)

2025-07-27 12:48:45 37

原创 LWJGL教程(4)——创建窗口

初始化 GLFW:设置错误回调并初始化库创建窗口:配置窗口属性并创建窗口设置 OpenGL 上下文:创建 OpenGL 能力集控制鼠标:使用设置鼠标模式这个GLFW库加载:通过 JNI 加载本地 GLFW 库函数指针:所有 GLFW 函数的 JNI 指针常量定义:500+ 个常量,覆盖了:键盘按键鼠标按钮游戏手柄输入窗口属性上下文配置错误代码平台特定设置// 创建 OpenGL 核心上下文// 禁用光标。

2025-07-27 01:58:08 37

原创 LWJGL教程(3)——时间

作用:游戏时间管理核心类,负责计算时间差、帧率和更新率。

2025-07-21 00:02:02 76

原创 LWJGL教程(2)——游戏循环

游戏循环是游戏程序的核心,分为处理输入、更新逻辑和渲染画面三部分。其设计经历了从简单循环、固定休眠到可变时间步长和固定时间步长的演进: 简单循环存在CPU占用过高问题; 固定休眠导致帧率不灵活; 可变时间步长通过Delta Time实现帧率独立性,但存在物理模拟不稳定的缺点; 固定时间步长将逻辑更新与渲染解耦,使用累加器和插值渲染确保逻辑更新频率稳定,同时保持画面流畅。 最优方案是固定时间步长循环,它通过分离逻辑更新频率(UPS)和渲染帧率(FPS),配合状态插值,既保证了物理模拟的稳定性,又能提供平滑的视

2025-07-20 23:26:47 167

原创 LWJGL教程(1)——介绍和安装

LWJGL(Lightweight Java Game Library)作为Java游戏开发的核心库,其频繁使用缓冲区(Buffer)的设计源于多方面的技术需求,本质上是Java与本地硬件(尤其是GPU)高效协作的必然选择。(而非Java数组)是LWJGL高性能渲染的最佳实践。),但涉及核心渲染流程(如VBO、纹理传输)时,缓冲区仍是不可替代的解决方案。可将 LWJGL 的 3D 渲染窗口嵌入 JavaFX 面板(通过。),用 JavaFX 包裹游戏界面(如 HUD 控件)。:调用OpenGL的。

2025-07-17 01:38:52 862 1

原创 Java高并发编程(2)

读多写少的弱一致场景(配置管理、监听器列表)。CAS 机制:无锁并发基础,支撑原子类、自旋锁及并发容器实现。:高并发下需有序映射的场景(实时排行榜、范围查询)。通过合理选择并发容器,结合其底层机制(如写时复制、CAS、跳表),可显著提升系统并发性能与稳定性。

2025-07-16 16:55:41 671

原创 Javafx节点和布局

在 JavaFX 中,VBox 和 HBox 是两种常用的布局容器(均继承自 ),而 子节点(Children Nodes) 是指被直接添加到这些容器内的 UI 组件或其他布局容器。这些子节点受容器管理,由容器控制其位置、大小和排列方式。以下是详细解释:子节点是构成 JavaFX 场景图(Scene Graph)的基本单元,可以是以下任意类型:示例:2. VBox/HBox 如何管理子节点容器通过以下方式控制子节点的行为:JavaFX 的场景图是树状结构:场景图结构示例: Scene └── V

2025-07-15 11:51:33 797

原创 javafx学习——VBOX和HBOX

通过主次方向定位 → 合理嵌套 → 约束优化 → 样式封装,可高效构建灵活、易维护的JavaFX界面。在实际项目中,合理组合VBox(垂直布局)和HBox(水平布局)是构建灵活、响应式JavaFX界面的核心策略。是 JavaFX 中用于垂直布局的核心容器类,它将子节点排列为单列,支持间距、对齐、填充等布局控制。此设计为 JavaFX 布局系统提供了标准化、数学精确的内边距描述方案,是构建响应式 UI 的基础组件之一。的属性与方法,可高效实现复杂垂直布局,适用于表单、列表、工具栏等 UI 场景。

2025-07-15 10:55:21 898

原创 Java飞机大战小游戏(升级版)

分层加载:核心资源预加载,非关键资源动态加载。缓存优先:高频资源常驻内存,低频资源弱引用缓存。异步化:所有耗时操作抛至后台线程。生命周期管理:场景切换时释放无用资源。工具链支持:压缩资源 + 内存分析工具。💡 通过上述策略,在1GB内存的设备上实测可加载500+图片(平均50KB/张)无卡顿,内存占用减少40%。可扩展资源管理系统的核心是“分层解耦+动态调度”基础层:标准化资源分类与AB包分区;核心层:异步加载+缓存池+生命周期管理;扩展层:插件化架构与跨平台适配;工具层。

2025-07-15 00:51:52 441

原创 Java学习——使用jpackage把jar文件打包为可执行的exe文件

Java游戏打包为EXE教程:jpackage实现一键分发 本文介绍如何使用JDK 14+自带的jpackage工具将Java游戏打包成Windows可执行文件(.exe),解决Java应用依赖环境的问题。核心功能包括: 生成自带JRE的安装包,用户无需预装Java 支持自定义应用名称、图标(需.ico格式)、安装路径 可添加桌面快捷方式等Windows专属功能 典型命令示例: jpackage --type exe --name 游戏名称 --input 输入目录 --main-jar game.jar

2025-07-14 21:12:30 724

原创 javafx-Image图像

JavaFX 图像处理指南 核心功能 Image类:JavaFX图像处理核心组件,负责加载、存储和管理图像 支持格式:BMP、PNG、JPEG、GIF(含动画),不支持TIFF等专业格式 显示控制:与ImageView配合实现图像显示和动态效果 与Swing对比 特性 JavaFX Image Swing BufferedImage 框架 JavaFX AWT/Swing 渲染 GPU加速 CPU软件渲染 功能 显示优化 像素级操作 转换方法 BufferedImage→Image:使用SwingFXUti

2025-07-14 14:25:13 1051

原创 Java项目2——增强版飞机大战游戏

开发环境:直接从文件系统加载生产环境:从 JAR 包中加载扫描到的音频文件 URL 会存储在静态列表musicUrls中,供游戏后续使用musicUrls:存放所有找到的音频文件的 URL(静态共享,全局可访问)logger:日志记录器,用于错误跟踪(SLF4J 接口)该代码通过矢量路径描边+多层透明度衰减实现了物理级发光效果,设计简洁但存在性能、精度和扩展性缺陷。优化方向包括缓存机制混合模式改进和像素对齐处理。

2025-07-12 21:38:07 107

原创 Java项目(2)——飞机大战游戏

这是一个Java项目,经典的飞机大战游戏,可以播放音乐。

2025-07-11 20:34:34 275

原创 我的世界模组开发——机械动力的渲染(4)

在Minecraft Mod中实现。

2025-07-10 21:54:50 378

原创 并发编程第一节

指系统在。

2025-07-09 23:00:32 831

原创 Javafx教程(1)——初始Javafx

JavaFX 是构建现代化桌面应用的强大工具,通过其丰富的 API(控件、图形、多媒体)、声明式 FXML 设计和 CSS 样式支持,开发者可以高效创建高性能的跨平台应用。尽管部署需额外配置依赖,但其功能性和灵活性远超传统 Swing/AWT,特别适合需要复杂 UI 或多媒体交互的场景。

2025-07-08 17:24:43 849

原创 Java实现项目1——弹射球游戏

性能优先Guava缓存减少IO开销并发集合保证线程安全矩形碰撞检测替代复杂计算扩展性设计背景/音频资源动态加载实体类与游戏逻辑分离用户体验优化全屏自适应布局音量/背景实时切换暂停菜单防止误操作健壮性保障资源加载失败时生成后备纹理音频格式转换兼容不同系统显式同步避免多线程冲突此架构通过分层设计(资源层、逻辑层、渲染层)实现高内聚低耦合,适合扩展为更复杂游戏。

2025-07-07 20:32:15 94

原创 Java学习——MP3SPI介绍

MP3SPI 是一个基于 Java SPI 机制的扩展库,填补了 Java Sound API 不支持 MP3 格式的空白。它通过 MP3 解码器服务将压缩音频转换为 PCM 格式,使 AudioSystem 能处理 MP3 文件播放。依赖三个核心 JAR 文件,MP3SPI 提供了轻量级集成方案,支持格式转换与实时播放。相比 JLayer 和 JavaFX Media,MP3SPI 的优势在于无缝扩展 Java Sound API,适合需要灵活音频处理的场景,但功能仅限于 MP3 解码。适用于纯 Java

2025-07-07 17:27:08 629

原创 Java学习——IO流

特性字节流字符流基类ReaderWriter处理单位8位字节16位Unicode字符适用场景图片、视频、网络通信等二进制数据文本文件(.txt, .csv, .xml)缓冲类等等编码处理不转换编码自动处理字符编码(如UTF-8)选择原则二进制文件(如图片)→ 字节流文本文件→ 字符流 +显式指定编码(如UTF-8)大文件操作→ 必须用缓冲流(性能提升显著)网络通信→ 字节流为主,文本内容通过转换完整代码示例参考:https://gist.github.com。

2025-07-07 14:30:07 771

原创 Java学习——Lombok

Lombok与JDK版本不兼容问题解析:当Lombok注解处理器无法适配新JDK内部API变化时,会出现"NoSuchFieldError"错误。关键问题在于Lombok访问的JDK编译器内部类JCTree$JCImport结构已变更,导致字段缺失。解决方案包括升级Lombok至适配最新JDK的版本(如1.18.30+)、检查IDE插件兼容性,或降级JDK版本。该问题常见于使用JDK17+时,需确保Lombok与开发环境版本匹配。

2025-07-06 16:59:35 812

原创 java学习——编程练习和实战项目(1)

一直学习理论怎么能不做练习呢?下面我将出几个编程题来巩固编程。新建三个线程,使用并发编程,同时计算三个线程的数并且输出计算的过程,线程1计算从1加到100,线程2计算50的阶乘,线程三计算根号三并且输出小数点后十位。和练习1一样,对线程的执行顺序有要求,要求线程1执行一半时执行线程2,线程2执行一半时执行线程3,等待线程3执行完毕后再执行线程2,线程2执行完毕后执行线程1,要求分清不同线程的执行过程。

2025-07-06 10:50:42 422

Java飞机大战小游戏(升级版)

Javafx框架的飞机大战游戏,新加入了仓库和商店系统

2025-07-15

Java项目(2)-飞机大战游戏

经典的飞机大战游戏,加入了新功能,可以播放背景音乐

2025-07-11

java项目实战开发-弹球游戏

这是一个由guava的api和lombok的api协作制作的游戏文件,用到了之前学到的guava的并发编程和lombok知识,还有之前学到的io知识和JFrame知识

2025-07-07

一种专用于OpenGL渲染计算的Java数学库

一种专用于OpenGL渲染计算的Java数学库

2025-06-10

我的世界1.20.1模组开发教程(3)-事件监听器,注册命令,存储数据

教程模组

2025-02-17

我的世界1.20.1forge示例模组

我的世界1.20.1forge示例模组

2025-02-06

我的世界1.18人工智能插件

适用版本1.18,功能:屏蔽自定义脏话,脏话字符串和脏话字符写在config.yml里,当玩家发出屏蔽字符或屏蔽字符串时将会自动屏蔽。版本是1.0,目前只有一个特殊道具,你们的付费是对我的最大支持,需要yum插件作为前置插件,没有的去下载

2022-08-30

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除