= 创作分享 =
编程开发
tfcambiental注册方块实体事件的问题
毛里求斯大酋长

tfcambiental注册方块实体事件的问题

221 1
由于tfcambiental篝火可以取暖,篝火上放了锅和烤架却无法取暖,便产生自己写mod补充的想法
现在情况是可以正常安装没有任何报错,但就是没效果。一共也就3个文件,真不知道哪里出问题(感觉应该是注册的问题,但也不知道怎么改……)故求助广大网友

文件:/tfc_pot_is_hot/TFCPotIsHot.java
  1. package com.mauritiuschief.tfc_pot_is_hot;

  2. import com.mojang.logging.LogUtils;

  3. import net.minecraftforge.fml.common.Mod;

  4. import org.slf4j.Logger;

  5. // The value here should match an entry in the META-INF/mods.toml file
  6. @Mod(TFCPotIsHot.MODID)
  7. public class TFCPotIsHot {

  8.     // Define mod id in a common place for everything to reference
  9.     public static final String MODID = "tfc_pot_is_hot";
  10.     // Directly reference a slf4j logger
  11.     private static final Logger LOGGER = LogUtils.getLogger();
  12. }
复制代码

文件:/tfc_pot_is_hot/api/AmbientalFixRegistry.java
  1. package com.mauritiuschief.tfc_pot_is_hot.api;

  2. import com.lumintorious.tfcambiental.api.AmbientalRegistry;
  3. // import com.lumintorious.tfcambiental.api.BlockEntityTemperatureProvider;

  4. public class AmbientalFixRegistry {
  5.     static {
  6.     // Register your methods with the existing registry
  7.     AmbientalRegistry.BLOCK_ENTITIES.register(EnhancedBlockEntityTemperatureProvider::handlePot);
  8.     AmbientalRegistry.BLOCK_ENTITIES.register(EnhancedBlockEntityTemperatureProvider::handleGrill);
  9.     }
  10. }
复制代码

文件:/tfc_pot_is_hot/api/EnhancedBlockEntityTemperatureProvider.java
  1. package com.mauritiuschief.tfc_pot_is_hot.api;

  2. import com.lumintorious.tfcambiental.TFCAmbientalConfig;
  3. import com.lumintorious.tfcambiental.item.TFCAmbientalItems;
  4. import com.lumintorious.tfcambiental.api.BlockEntityTemperatureProvider;
  5. import com.lumintorious.tfcambiental.api.EnvironmentalTemperatureProvider;
  6. import com.lumintorious.tfcambiental.modifier.TempModifier;

  7. // import net.dries007.tfc.common.blockentities.FirepitBlockEntity;
  8. import net.dries007.tfc.common.blockentities.PotBlockEntity;
  9. import net.dries007.tfc.common.blockentities.GrillBlockEntity;

  10. import top.theillusivec4.curios.api.CuriosApi;

  11. import net.minecraft.world.level.block.entity.BlockEntity;
  12. import net.minecraft.world.entity.player.Player;

  13. import java.util.Optional;

  14. public interface EnhancedBlockEntityTemperatureProvider extends BlockEntityTemperatureProvider {
  15.     // New methods here
  16.     private static boolean hasProtectionAlt(Player player) { // 由于原作者的hasProtection是private,只能出此下策
  17.         var item = CuriosApi.getCuriosHelper().findCurios(player, TFCAmbientalItems.LEATHER_APRON.get());
  18.         if (item.isEmpty()) {
  19.             return false;
  20.         }
  21.         float environmentTemperature = EnvironmentalTemperatureProvider.getEnvironmentTemperatureWithTimeOfDay(player);
  22.         float AVERAGE = TFCAmbientalConfig.COMMON.averageTemperature.get().floatValue();
  23.         return environmentTemperature > AVERAGE;
  24.     }
  25.    
  26.     static Optional<TempModifier> handlePot(Player player, BlockEntity entity) { // 照抄的原作者handleFirePit
  27.         if (entity instanceof PotBlockEntity pot) {
  28.             float temp = pot.getTemperature();
  29.             float change = temp / 100f;
  30.             if (hasProtectionAlt(player)) {
  31.                 change = change * 0.3f;
  32.             }
  33.             return TempModifier.defined("pot", Math.min(6f, change), 0);
  34.         }
  35.         return TempModifier.none();
  36.     }

  37.     static Optional<TempModifier> handleGrill(Player player, BlockEntity entity) { // 照抄的原作者handleFirePit
  38.         if (entity instanceof GrillBlockEntity grill) {
  39.             float temp = grill.getTemperature();
  40.             float change = temp / 100f;
  41.             if (hasProtectionAlt(player)) {
  42.                 change = change * 0.3f;
  43.             }
  44.             return TempModifier.defined("grill", Math.min(6f, change), 0);
  45.         }
  46.         return TempModifier.none();
  47.     }
  48. }
复制代码



发表于 2024-9-7 13:16:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

回复 | 举报

该帖共收到 1 条回复!
临幸临幸你的mod
首先有一个基础问题:AmbientalFixRegistry里的静态代码并不会被执行,需要在其内创建一个空方法并在TFCPotIsHot的构造方法里调用才会执行。但是改了也会无作用,因为方向错了。你需要的是去修改原本模组的代码逻辑,而不是注册新的东西。这边建议仔细研读与理解mod中“篝火可以取暖,篝火上放锅和烤架”等相关源码后,使用mixin注入你自己的代码以修复原本的缺陷。
提示:mixin的使用方法可以参考这里,虽然这是fabric的文档内容,但是关于mixin的使用方法会比forge的文档更详细清晰。
发表于 2024-10-24 11:21:25 | 只看该作者

回复 | 举报

百科目前不允许匿名发帖哦~ 请先 [ 登陆 ][ 注册 ] 吧~

本版积分规则

发新帖
  • 回复
  • 点评
  • 评分

[ MC百科(mcmod.cn) 除另有声明,所有开放公共编辑的内容均使用 BY-NC-SA 3.0 协议 ]

Minecraft百科CC协议
快速回复 返回顶部 返回列表