Skip to content

Commit

Permalink
Merge pull request #1387 from ZhuRuoLing/releases/1.21
Browse files Browse the repository at this point in the history
重写激光渲染管线
  • Loading branch information
ZhuRuoLing authored Dec 20, 2024
2 parents c8e23a0 + dc5d502 commit cf0e964
Show file tree
Hide file tree
Showing 30 changed files with 636 additions and 178 deletions.
5 changes: 5 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,4 +41,9 @@ dependencies {
implementation(libs.jade)
implementation(libs.theoneprobe)
implementation(libs.kubejs)

compileOnly("org.sinytra.forgified-fabric-api:fabric-api-base:0.4.42+d1308ded19")
compileOnly("org.sinytra.forgified-fabric-api:fabric-renderer-api-v1:3.4.0+acb05a3919")
compileOnly("org.sinytra.forgified-fabric-api:fabric-block-view-api-v2:1.0.10+9afaaf8c19")
compileOnly("org.sinytra.forgified-fabric-api:fabric-rendering-data-attachment-v1:0.3.48+73761d2e19")
}
3 changes: 3 additions & 0 deletions gradle/scripts/repositories.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -51,4 +51,7 @@ repositories {
name = "OctoStudios Maven"
url = uri("https://maven.octo-studios.com/releases")
}
maven {
url "https://maven.su5ed.dev/releases"
}
}
18 changes: 18 additions & 0 deletions src/main/java/dev/dubhe/anvilcraft/api/LaserStateAccess.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package dev.dubhe.anvilcraft.api;

import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;

public interface LaserStateAccess {
BlockPos getIrradiateBlockPos();

int getLaserLevel();

Direction getFacing();

BlockPos getBlockPos();

float getLaserOffset();

boolean removed();
}
12 changes: 12 additions & 0 deletions src/main/java/dev/dubhe/anvilcraft/block/BaseLaserBlock.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package dev.dubhe.anvilcraft.block;

import net.minecraft.world.level.block.BaseEntityBlock;

import javax.annotation.ParametersAreNonnullByDefault;

@ParametersAreNonnullByDefault
public abstract class BaseLaserBlock extends BaseEntityBlock {
protected BaseLaserBlock(Properties properties) {
super(properties);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class RubyLaserBlock extends BaseEntityBlock implements IHammerRemovable, HammerRotateBehavior {
public class RubyLaserBlock extends BaseLaserBlock implements IHammerRemovable, HammerRotateBehavior {
public static final VoxelShape UP_MODEL =
Shapes.or(Block.box(4, 3, 4, 12, 13, 12), Block.box(5, 13, 5, 11, 16, 11), Block.box(3, 0, 3, 13, 3, 13));
public static final VoxelShape DOWN_MODEL =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class RubyPrismBlock extends BaseEntityBlock implements IHammerRemovable, HammerRotateBehavior {
public class RubyPrismBlock extends BaseLaserBlock implements IHammerRemovable, HammerRotateBehavior {
public static final VoxelShape UP_MODEL =
Shapes.or(Block.box(0, 0, 0, 16, 4, 16), Block.box(2, 4, 2, 14, 14, 14), Block.box(4, 14, 4, 12, 16, 12));
public static final VoxelShape DOWN_MODEL =
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package dev.dubhe.anvilcraft.block.entity;

import dev.dubhe.anvilcraft.AnvilCraft;
import dev.dubhe.anvilcraft.api.LaserStateAccess;
import dev.dubhe.anvilcraft.client.renderer.laser.LaserRenderer;
import dev.dubhe.anvilcraft.init.ModBlockTags;
import dev.dubhe.anvilcraft.init.ModDamageTypes;
import dev.dubhe.anvilcraft.network.LaserEmitPacket;
Expand Down Expand Up @@ -35,7 +37,7 @@
import java.util.HashSet;
import java.util.List;

public abstract class BaseLaserBlockEntity extends BlockEntity {
public abstract class BaseLaserBlockEntity extends BlockEntity implements LaserStateAccess {
public static final int[] COOLDOWNS = {
Integer.MAX_VALUE,
24 * 20,
Expand Down Expand Up @@ -194,8 +196,8 @@ public void emitLaser(Direction direction) {
IItemHandler cap = getLevel()
.getCapability(
Capabilities.ItemHandler.BLOCK,
getBlockPos().relative(getDirection().getOpposite()),
getDirection()
getBlockPos().relative(getFacing().getOpposite()),
getFacing()
);
drops.forEach(itemStack -> {
if (cap != null) {
Expand Down Expand Up @@ -267,7 +269,7 @@ public void onCancelingIrradiation(BaseLaserBlockEntity baseLaserBlockEntity) {
irradiateBlockEntity.onCancelingIrradiation(this);
}

public abstract Direction getDirection();
public abstract Direction getFacing();

@Override
public void setRemoved() {
Expand All @@ -276,9 +278,10 @@ public void setRemoved() {
if (irradiateBlockPos == null) return;
if (!(level.getBlockEntity(irradiateBlockPos) instanceof BaseLaserBlockEntity irradiateBlockEntity)) return;
irradiateBlockEntity.onCancelingIrradiation(this);
LaserRenderer.getInstance().requireRecompile(this);
}

public float laserOffset() {
public float getLaserOffset() {
return 0;
}

Expand All @@ -299,6 +302,17 @@ public AABB getRenderBoundingBox() {
Double.POSITIVE_INFINITY);
}

@Override
public boolean removed() {
return remove;
}

@Override
public void clearRemoved() {
super.clearRemoved();
LaserRenderer.getInstance().requireRecompile(this);
}

public void updateLaserLevel(int value){
if (laserLevel != value){
markChanged();
Expand All @@ -309,5 +323,6 @@ public void updateLaserLevel(int value){
public void clientUpdate(BlockPos irradiateBlockPos, int laserLevel) {
this.irradiateBlockPos = irradiateBlockPos;
this.laserLevel = laserLevel;
LaserRenderer.getInstance().requireRecompile(this);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ public void tick(@NotNull Level level) {
2);
}
if (isSwitchedOn()) {
emitLaser(getDirection());
emitLaser(getFacing());
} else {
if (irradiateBlockPos != null
&& level.getBlockEntity(irradiateBlockPos) instanceof BaseLaserBlockEntity irradiateBlockEntity
Expand Down Expand Up @@ -96,12 +96,12 @@ public int getInputPower() {
}

@Override
public float laserOffset() {
public float getLaserOffset() {
return 0.489f;
}

@Override
public Direction getDirection() {
public Direction getFacing() {
return this.getBlockState().getValue(RubyLaserBlock.FACING);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ private RubyPrismBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState b
public void tick(@NotNull Level level) {
resetState();
if (enabled || enabledLastTick) {
emitLaser(getDirection());
emitLaser(getFacing());
}
enabledLastTick = enabled;
if (laserLevel == 0) {
Expand Down Expand Up @@ -57,7 +57,7 @@ public void onIrradiated(BaseLaserBlockEntity baseLaserBlockEntity) {
}

@Override
public Direction getDirection() {
public Direction getFacing() {
return getBlockState().getValue(RubyPrismBlock.FACING);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import dev.dubhe.anvilcraft.api.tooltip.HudTooltipManager;
import dev.dubhe.anvilcraft.client.ModInspectionClient;
import dev.dubhe.anvilcraft.client.renderer.PowerGridRenderer;
import dev.dubhe.anvilcraft.client.renderer.RenderState;
import dev.dubhe.anvilcraft.client.renderer.laser.LaserRenderer;
import dev.dubhe.anvilcraft.item.IEngineerGoggles;
import net.minecraft.client.DeltaTracker;
import net.minecraft.client.Minecraft;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ public void clearRenderState() {

public static final RenderType LASER = RenderType.create(
"anvilcraft:laser",
DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL,
DefaultVertexFormat.BLOCK,
VertexFormat.Mode.QUADS,
1536,
true,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ public class ModShaders {
private static PostChain bloomChain;
static final Minecraft MINECRAFT = Minecraft.getInstance();

@Getter
static ShaderInstance renderTypeLaserShader;
static ShaderInstance renderTypeColoredOverlayShader;
@Getter
Expand All @@ -41,7 +42,7 @@ public static void register(RegisterShadersEvent event) {
event.registerShader(new ShaderInstance(
event.getResourceProvider(),
AnvilCraft.of("rendertype_laser"),
DefaultVertexFormat.POSITION_TEX_COLOR_NORMAL
DefaultVertexFormat.BLOCK
),
it -> renderTypeLaserShader = it
);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,11 @@ public static void renderEnhancedTransmitterLine(
if (!RenderState.isEnhancedRenderingAvailable() || !RenderState.isBloomEffectEnabled()) return;
if (!AnvilCraft.config.renderPowerTransmitterLines) return;
if (Minecraft.getInstance().level == null) return;
if (ModRenderTargets.getBloomTarget() != null) {
ModRenderTargets.getBloomTarget().setClearColor(0, 0, 0, 0);
ModRenderTargets.getBloomTarget().clear(Minecraft.ON_OSX);
ModRenderTargets.getBloomTarget().copyDepthFrom(Minecraft.getInstance().getMainRenderTarget());
}
String level = Minecraft.getInstance().level.dimension().location().toString();

VertexConsumer consumer1 = bufferSource.getBuffer(ModRenderTypes.LINE_BLOOM);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,19 @@

import com.mojang.logging.LogUtils;
import dev.dubhe.anvilcraft.AnvilCraft;
import dev.dubhe.anvilcraft.integration.iris.IrisState;
import lombok.Getter;
import net.minecraft.client.Minecraft;
import net.neoforged.fml.ModList;
import org.slf4j.Logger;

public class RenderState {

private static boolean CONTAINS_INCOMPATIBLE_MODS;
private static boolean IRIS_PRESENT;
@Getter
private static boolean bloomRenderStage;
private static final String[] INCOMPATIBLE_MODS = {
"sodium",
"embeddium",
"iris"
};
private static final Logger logger = LogUtils.getLogger();

static {
CONTAINS_INCOMPATIBLE_MODS = false;
for (String incompatibleMod : INCOMPATIBLE_MODS) {
if (ModList.get().isLoaded(incompatibleMod)){
logger.warn("Incompatible mod {} detected, fallback laser rendering into BlockEntityRenderer.", incompatibleMod);
CONTAINS_INCOMPATIBLE_MODS = true;
}
}
IRIS_PRESENT = ModList.get().isLoaded("iris");
}

Expand All @@ -44,14 +31,14 @@ public static void levelStage(){
}

public static boolean isEnhancedRenderingAvailable() {
return !(CONTAINS_INCOMPATIBLE_MODS || Minecraft.useShaderTransparency());
return !Minecraft.useShaderTransparency() && !IrisState.isShaderEnabled();
}

public static boolean isBloomEffectEnabled(){
return AnvilCraft.config.renderBloomEffect;
}

public static boolean hasIncompatibleMods() {
return CONTAINS_INCOMPATIBLE_MODS;
return false;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,10 @@

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class LaserRenderer implements BlockEntityRenderer<BaseLaserBlockEntity> {
public class LaserBlockRenderer implements BlockEntityRenderer<BaseLaserBlockEntity> {

@SuppressWarnings("unused")
public LaserRenderer(BlockEntityRendererProvider.Context context) {
public LaserBlockRenderer(BlockEntityRendererProvider.Context context) {
}

@Override
Expand Down
Loading

0 comments on commit cf0e964

Please sign in to comment.