真绿幕(True Greenscreen™)

基本信息

属性 值
注册名 utilitiesinexcess:true_greenscreen
类 com.fouristhenumber.utilitiesinexcess.common.blocks.BlockTrueGreenscreen(extends BlockContainer)
材质 / 硬度 / 脚步声 Material.sponge / 0.5 / soundTypeCloth(BlockTrueGreenscreen.java:19-23)
渲染类型 -1(getRenderType(),BlockTrueGreenscreen.java:32-35)——不走方块渲染管线
ItemBlock BlockTrueGreenscreen.ItemBlockTrueGreenscreen(ModBlocks.java:183),实现 ITranslucentItem
TileEntity BlockTrueGreenscreen.TileEntityTrueGreenscreen(ModTileEntities.java:86,枚举名 TRUE_GREENSCREEN),空类
着色器 shaders/TrueGreenscreen.vert.glsl + shaders/TrueGreenscreen.frag.glsl(render/TESRTrueGreenscreen.java:35-36)
开关 BlockConfig.enableTrueGreenscreen(默认 true)

功能

真绿幕把整个游戏画面的背景替换为纯绿(绿幕色),用于直播 / 抠像。它的实现不靠光影包或资源包,而是靠 3 个早加载 Mixin 改写客户端渲染与截图逻辑,再由一个 TileEntitySpecialRenderer 挂接自定义着色器。

方块本身被刻意"掏空":getRenderType() 返回 -1 交由 TESR 接管,registerBlockIcons 是空实现,TileEntityTrueGreenscreen 内部没有任何字段——它只是一个让方块成为 BlockContainer 的占位 TE,实际工作全在 render/TESRTrueGreenscreen.java 与 3 个 Mixin 里。

TESRTrueGreenscreen 通过 @EventBusSubscriber.Condition 在 BlockConfig.enableTrueGreenscreen 为真时才订阅事件(render/TESRTrueGreenscreen.java:153),并在客户端 tick 中调用 TESRTrueGreenscreen.onPostClientTick(event)(:158)。

它没有申请独立的 RenderingRegistry 渲染 ID——CommonProxy.preInit 只为 LAPIS_AETHERIUS 和 BLACKOUT_CURTAINS 申请了 render ID 并注册 ISBRH 处理器(CommonProxy.java:77-85),真绿幕不在其中。

数值

项目 值
相关 Mixin 条目 1 个 MixinBuilder:TRUE_TOUCHSCREEN_ARGB_SCREENSHOTS
该条目包含的 Mixin 类 3 个
生效条件 BlockConfig.enableTrueGreenscreen
阶段 Phase.EARLY(早于游戏本体加载)

Mixin 来源:mixins/Mixins.java:31-37。三个类分别是:

  • MixinScreenShotHelper_TrueGreenscreen — 截图时写入 ARGB
  • MixinRenderGlobal_TrueGreenscreen — 全局渲染
  • MixinGuiIngame_TrueGreenscreen — HUD 层

交互

触发 行为
放置 方块本身作为绿幕的开关载体
客户端渲染 画面背景变为纯绿;showGenerationRate 类 UI 不受影响
截图 走 MixinScreenShotHelper 的 ARGB 分支

合成配方

这是本模组唯一一条不受任何配置开关控制的配方。 RecipeLoader.java:539-549 直接无条件调用 addShapedRecipe(ModBlocks.TRUE_GREENSCREEN, ...),外层没有 if (RecipeConfig.…) 判断——对比同文件中其余所有配方都带开关,这是一个可核实的不一致。

配方为 ege / gig / ege:e=以太玻璃、g=Lapis Aetherius meta 5(Lime)、i=反转金属锭(任意 meta)。

注意:即使把 RecipeConfig 中所有配方开关关掉,真绿幕仍然可合成;但若把 BlockConfig.enableTrueGreenscreen 关掉,方块不注册,届时该配方会因输出方块不存在而被 DisableableItemStack.isEnabled() 拦截(DisableableItemStack.java:26-32)。

相关条目