您的位置:首页 > 财经 > 金融 > 淄博网站制作营销_公司网站建立费用_谷歌外贸平台推广需要多少钱_外贸网站

淄博网站制作营销_公司网站建立费用_谷歌外贸平台推广需要多少钱_外贸网站

2025/3/17 12:39:35 来源:https://blog.csdn.net/qq_24992377/article/details/146298791  浏览:    关键词:淄博网站制作营销_公司网站建立费用_谷歌外贸平台推广需要多少钱_外贸网站
淄博网站制作营销_公司网站建立费用_谷歌外贸平台推广需要多少钱_外贸网站

生物生成

  • 生物生成
    • Alexmob介绍:
      • **1. 核心功能与技术实现**
      • **2. 项目结构与代码质量**
      • **3. 社区协作与维护**
      • **4. 扩展性与开发挑战**
      • **5. 开发者学习价值**
    • 食蚁兽
      • 一、实体属性与行为控制(`EntityAnteater`类)
      • 二、实体注册与生成规则(`AMEntityRegistry`类)
      • 三、全局生成逻辑(辅助方法)
      • 四、配置与数据管理
      • 总结
      • **1. `rollSpawn`方法的作用**
      • **2. `MobSpawnType`枚举的作用**
      • **3. 两者的联系**
      • **示例场景**
      • **总结**
    • 探究AlexMob的生物生成
      • 一、代码关系解析
        • 1. `initializeAttributes` 方法的作用
        • 2. 与之前代码的关联
      • 二、Alex's Mob的生成控制机制
      • 三、自定义生成规则编写指南
        • 1. **基础配置(JSON文件)**
        • 2. **高级控制(Forge代码)**
        • 3. **调试与测试**
      • 四、总结
    • SpawnPlacements类
      • 一、代码解析
        • 1. **核心类与接口**
        • 2. **关键方法**
        • 3. **高度图(Heightmap.Types)**
      • 二、自定义生成规则方法
        • 1. **基本步骤**
        • 2. **代码示例:自定义僵尸生成规则**
        • 3. **高级控制:复用现有逻辑**
      • 三、调试与兼容性
        • 1. **调试技巧**
        • 2. **与其他模组的兼容**
      • 四、总结
    • RandomSource接口
      • 一、`RandomSource` 接口的作用
      • 二、与之前代码的关系
        • 1. **在 `rollSpawn` 方法中的应用**
        • 2. **在 `SpawnPlacements` 中的生成条件验证**
        • 3. **与 `MobSpawnType` 的间接关联**
      • 三、关键实现类解析
      • 四、自定义生成规则中的使用示例
        • 1. **随机生成生物变种**
        • 2. **控制生成密度**
      • 五、性能与线程安全建议
      • 六、总结
    • SpawnPredicate接口
      • 一、`SpawnPredicate` 接口的作用
      • 二、`test()` 方法参数详解
      • 三、总结
  • BiomeTags和Biome
      • 类 `BiomeTags` 与 `Biome` 的联系与区别
        • **联系**
        • **区别**
        • **具体示例**
        • **协同工作场景**
        • **总结**
    • BiomeTags
      • **1. 类定义与包结构**
      • **2. 标签常量定义**
      • **3. 标签创建方法**
      • **4. 私有构造函数**
      • **5. 标签的用途**
      • **6. 核心标签示例**
      • **7. 总结**
  • 最后

生物生成

这一篇我们来研究研究怎么自定义生物的生成条件,首先Alexs Mos作为主流的forge模组之一,肯定是有研究价值的,这一篇我们来看看alexmob是如何自定义生物生成的

Alexmob介绍:

Alex’s Mobs(AlexsMobs)开发者视角解析

Alex’s Mobs 是一个由开发者 AlexModGuy 创建的 Minecraft 模组(Mod),专注于为游戏添加多样化的生物(Mobs),通过独特的模型、行为机制和生态交互提升游戏体验。以下从开发者角度分析其技术实现和项目特点:


1. 核心功能与技术实现

生物设计与行为逻辑
模组中的每个生物均基于 Minecraft Forge/Fabric API 开发,通过自定义的实体类(如 EntityCrocodileEntityMantisShrimp)实现独特行为。开发者需深入理解 Minecraft 的实体系统(AI 任务、路径寻找、动画状态机)来设计复杂的生物交互(如捕食、群居、特殊技能)。

资源管理
模型与动画:使用 Blockbench 等工具创建高精度模型(.json 文件),并通过 GeoEntityRenderer(基于 Geckolib 动画库)实现流畅的骨骼动画。
音效与本地化:资源包(resources/ 目录)包含多语言支持、音效文件(.ogg)和生物生成规则配置(spawns/ 文件夹)。

跨版本兼容性
项目需适配多个 Minecraft 版本(如 1.16.5, 1.18.2),开发者通过分支管理和条件编译处理版本差异,依赖 Gradle 构建工具自动化打包。


2. 项目结构与代码质量

模块化设计
代码库(GitHub 仓库)按功能分层:
main/java/com/github/alexmodguy/:核心逻辑(实体、物品、世界生成)。
common/:通用工具类(配置解析、数学计算)。
events/:事件监听器(处理玩家交互、生物攻击等游戏事件)。

代码规范
• 清晰的类命名(如 AnimalAIWanderRanged 描述生物漫游 AI)。
• 注释详尽,关键逻辑配有行为树说明(如生物攻击优先级)。
• 依赖注入(通过 Forge Event Bus)降低耦合度。


3. 社区协作与维护

开源生态
项目采用 MIT 许可证,鼓励二次开发。开发者可通过 GitHub 的 Issues 提交 Bug 报告或功能请求,Pull Request 流程规范化(需通过 CI 测试)。
持续更新
作者定期发布新版本,更新日志(CHANGELOG.md)详细记录生物新增、平衡调整和 Bug 修复,社区反馈响应迅速。


4. 扩展性与开发挑战

API 集成
支持与其他模组联动(如 JEI 物品查询、Biomes O’ Plenty 生态兼容),开发者需通过 Forge Capability 系统实现数据交互。
性能优化
复杂生物可能影响游戏性能,需通过实体渲染优化(Level-of-Detail 技术)和 AI 任务调度(减少冗余计算)确保流畅运行。


5. 开发者学习价值

• 学习实体 AI 与动画系统的深度定制。
• 实践大型 Mod 的版本管理与跨平台适配。
• 参与开源协作,理解社区驱动的开发模式。


总结
Alex’s Mobs 不仅是 Minecraft 生态的丰富扩展,更是一个展示复杂游戏模组开发流程的优质案例。其代码结构清晰、文档完善,适合中高级开发者学习生物 AI、资源管理和社区维护的最佳实践。

食蚁兽

这段代码通过多个机制控制生物(如食蚁兽)的生成,主要涉及以下几个关键部分:


一、实体属性与行为控制(EntityAnteater类)

  1. 属性定义

    public static AttributeSupplier.Builder bakeAttributes() {return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 20.0D).add(Attributes.ATTACK_DAMAGE, 6D).add(Attributes.MOVEMENT_SPEED, 0.25F);
    }
    

    • 设置食蚁兽的基础属性:生命值20、攻击伤害6、移动速度0.25。

  2. 生成条件验证

    public static boolean canAnteaterSpawn(EntityType<? extends Animal> animal, LevelAccessor worldIn, MobSpawnType reason, BlockPos pos, RandomSource random) {return worldIn.getRawBrightness(pos, 0) > 8;
    }
    

    • 食蚁兽只能在亮度等级大于8的地方生成。

  3. 生成概率控制

    public boolean checkSpawnRules(LevelAccessor worldIn, MobSpawnType spawnReasonIn) {return AMEntityRegistry.rollSpawn(AMConfig.anteaterSpawnRolls, this.getRandom(), spawnReasonIn);
    }
    

    • 通过配置文件AMConfig.anteaterSpawnRolls控制生成概率,调用rollSpawn方法决定是否生成。


二、实体注册与生成规则(AMEntityRegistry类)

  1. 实体类型注册

    public static final RegistryObject<EntityType<EntityAnteater>> ANTEATER = DEF_REG.register("anteater", () -> registerEntity(EntityType.Builder.of(EntityAnteater::new, MobCategory.CREATURE).sized(1.3F, 1.1F).setTrackingRange(10), "anteater"));
    

    • 将食蚁兽注册为CREATURE(被动生物),设置碰撞箱大小(1.3×1.1)和跟踪范围(10格)。

  2. 生成规则绑定

    SpawnPlacements.register(ANTEATER.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityAnteater::canAnteaterSpawn);
    

    • 食蚁兽必须在地面(ON_GROUND)生成,使用高度图MOTION_BLOCKING_NO_LEAVES(忽略树叶),并调用canAnteaterSpawn验证亮度条件。

  3. 属性初始化事件

    event.put(ANTEATER.get(), EntityAnteater.bakeAttributes().build());
    

    • 在EntityAttributeCreationEvent中应用食蚁兽的属性配置。


三、全局生成逻辑(辅助方法)

  1. 概率计算

    public static boolean rollSpawn(int rolls, RandomSource random, MobSpawnType reason) {if (reason == MobSpawnType.SPAWNER) return true;return rolls <= 0 || random.nextInt(rolls) == 0;
    }
    

    • 若AMConfig.anteaterSpawnRolls设为10,则每次生成尝试有1/10的概率成功(自然生成时)。

  2. 特殊生成环境验证

    public static boolean createLeavesSpawnPlacement(LevelReader level, BlockPos pos, EntityType<?> type) {// 检查是否在树叶上生成(用于其他生物,如猴子)
    }
    

    • 虽然食蚁兽不依赖此方法,但其他生物(如CAPUCHIN_MONKEY)可能需要在树叶上生成。


四、配置与数据管理

  1. 配置文件交互
    AMConfig.anteaterSpawnRolls:控制生成频率,值越大生成越稀有。
    AMTagRegistry:管理食蚁兽的食物和繁殖物品标签(如ANTEATER_FOODSTUFFS)。

总结

食蚁兽的生成由以下因素控制:

  1. 位置条件:地面且亮度>8。
  2. 生成概率:通过AMConfig.anteaterSpawnRolls配置。
  3. 实体属性:生命值、攻击力等由bakeAttributes定义。
  4. 注册与事件:通过Forge的实体注册系统和事件监听器绑定生成规则。

其他生物(如猴子、鳄鱼)通过类似的逻辑注册,但可能使用不同的生成条件(如树叶、水域等)。

j接下来研究一下这两个代码:

    public static boolean rollSpawn(int rolls, RandomSource random, MobSpawnType reason){if(reason == MobSpawnType.SPAWNER){return true;}else{return rolls <= 0 || random.nextInt(rolls) == 0;}}
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//package net.minecraft.world.entity;public enum MobSpawnType {NATURAL,CHUNK_GENERATION,SPAWNER,STRUCTURE,BREEDING,MOB_SUMMONED,JOCKEY,EVENT,CONVERSION,REINFORCEMENT,TRIGGERED,BUCKET,SPAWN_EGG,COMMAND,DISPENSER,PATROL;private MobSpawnType() {}
}

1. rollSpawn方法的作用

public static boolean rollSpawn(int rolls, RandomSource random, MobSpawnType reason) {if (reason == MobSpawnType.SPAWNER) {return true;} else {return rolls <= 0 || random.nextInt(rolls) == 0;}
}

功能:此方法用于判断生物是否满足生成条件。
参数解析
rolls:生成概率的分母(例如设置为10时,生成概率为1/10)。
random:随机数生成器,用于概率判定。
reason:生成原因,来自MobSpawnType枚举。
逻辑
• 若生成原因是SPAWNER(刷怪笼生成),直接返回true,即必定生成。
• 其他生成原因则根据rolls值判断:
◦ 若rolls <= 0,表示无概率限制,直接生成。
◦ 否则通过随机数判断,只有random.nextInt(rolls) == 0时才生成(概率为1/rolls)。


2. MobSpawnType枚举的作用

public enum MobSpawnType {NATURAL,          // 自然生成(如夜晚刷怪)CHUNK_GENERATION, // 区块生成时生成SPAWNER,          // 刷怪笼生成STRUCTURE,        // 结构生成(如要塞中的末影人)BREEDING,         // 繁殖生成MOB_SUMMONED,     // 被召唤生成(如唤魔者召唤恼鬼)// 其他类型省略...
}

功能:定义生物生成的不同场景或触发方式。
关键类型
SPAWNER:通过刷怪笼生成的生物。
NATURAL:自然生成的生物(如僵尸在夜晚生成)。
BREEDING:通过繁殖生成的生物(如动物交配)。


3. 两者的联系

依赖关系
rollSpawn方法通过MobSpawnType参数区分生成场景,从而应用不同的生成逻辑:
• 若生成原因是SPAWNER,直接允许生成,无需概率计算。这可能是因刷怪笼本身已有独立的生成规则(如冷却时间)。
• 其他场景(如自然生成)则通过rolls参数控制生成概率。例如,配置rolls=20时,自然生成概率为1/20。

设计意图
灵活性:允许不同生成场景(如自然生成与刷怪笼生成)采用不同的判定规则。
性能优化:刷怪笼生成可能更频繁,直接跳过概率计算可减少运算开销。


示例场景

  1. 刷怪笼生成
    reason = MobSpawnType.SPAWNER → 直接返回true,生物必定生成。
  2. 自然生成
    • 若配置rolls=15,则有1/15的概率生成生物(如僵尸在夜晚生成)。

总结

MobSpawnType枚举是生成场景的分类标签,而rollSpawn方法是基于这些标签的生成条件判定器。
• 通过结合两者,Minecraft实现了对不同生成场景的精细化控制,同时优化了刷怪笼等高频生成场景的性能。

探究AlexMob的生物生成

 @SubscribeEventpublic static void initializeAttributes(EntityAttributeCreationEvent event) {SpawnPlacements.Type spawnsOnLeaves = SpawnPlacements.Type.create("am_leaves", AMEntityRegistry::createLeavesSpawnPlacement);SpawnPlacements.register(GRIZZLY_BEAR.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules);SpawnPlacements.register(ROADRUNNER.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityRoadrunner::canRoadrunnerSpawn);SpawnPlacements.register(BONE_SERPENT.get(), SpawnPlacements.Type.IN_LAVA, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityBoneSerpent::canBoneSerpentSpawn);SpawnPlacements.register(GAZELLE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules);SpawnPlacements.register(CROCODILE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityCrocodile::canCrocodileSpawn);SpawnPlacements.register(FLY.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityFly::canFlySpawn);SpawnPlacements.register(HUMMINGBIRD.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, EntityHummingbird::canHummingbirdSpawn);SpawnPlacements.register(ORCA.get(), SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityOrca::canOrcaSpawn);SpawnPlacements.register(SUNBIRD.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntitySunbird::canSunbirdSpawn);SpawnPlacements.register(GORILLA.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, EntityGorilla::canGorillaSpawn);SpawnPlacements.register(CRIMSON_MOSQUITO.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityCrimsonMosquito::canMosquitoSpawn);SpawnPlacements.register(RATTLESNAKE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityRattlesnake::canRattlesnakeSpawn);SpawnPlacements.register(ENDERGRADE.get(), SpawnPlacements.Type.NO_RESTRICTIONS, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityEndergrade::canEndergradeSpawn);SpawnPlacements.register(HAMMERHEAD_SHARK.get(), SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityHammerheadShark::canHammerheadSharkSpawn);SpawnPlacements.register(LOBSTER.get(), SpawnPlacements.Type.IN_WATER, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityLobster::canLobsterSpawn);SpawnPlacements.register(KOMODO_DRAGON.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityKomodoDragon::canKomodoDragonSpawn);SpawnPlacements.register(CAPUCHIN_MONKEY.get(), spawnsOnLeaves, Heightmap.Types.MOTION_BLOCKING, EntityCapuchinMonkey::canCapuchinSpawn);SpawnPlacements.register(CENTIPEDE_HEAD.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityCentipedeHead::canCentipedeSpawn);SpawnPlacements.register(WARPED_TOAD.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING, EntityWarpedToad::canWarpedToadSpawn);SpawnPlacements.register(MOOSE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, EntityMoose::canMooseSpawn);SpawnPlacements.register(MIMICUBE.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Mob::checkMobSpawnRules);SpawnPlacements.register(RACCOON.get(), SpawnPlacements.Type.ON_GROUND, Heightmap.Types.MOTION_BLOCKING_NO_LEAVES, Animal::checkAnimalSpawnRules);SpawnPlacements.register(BLOBFISH.get(), SpawnPlacements.Type

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com