Skip to content

Commit

Permalink
Merge branch 'dev/1.21' into dev/1.21
Browse files Browse the repository at this point in the history
  • Loading branch information
dmzz-yyhyy authored Nov 10, 2024
2 parents 1ae6267 + 5c3411c commit 0d2b733
Show file tree
Hide file tree
Showing 19 changed files with 554 additions and 214 deletions.
4 changes: 4 additions & 0 deletions dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,8 @@ dependencies {
implementation(forge.theoneprobe)

implementation(forge.kubejs)

// compileOnly("maven.modrinth:sodium:mc1.21.1-0.6.0-beta.4-neoforge")
// compileOnly("maven.modrinth:iris:1.8.0-beta.5+1.21-neoforge")
// compileOnly("maven.modrinth:embeddium:1.0.11+mc1.21.1")
}
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.dubhe.anvilcraft.api.power;

import dev.dubhe.anvilcraft.client.renderer.Line;
import dev.dubhe.anvilcraft.client.renderer.PowerGridRenderer;

import net.minecraft.client.Minecraft;
Expand Down Expand Up @@ -255,27 +256,5 @@ public static List<SimplePowerGrid> findPowerGrid(BlockPos pos) {
.toList();
}

public record Line(Vec3 start, Vec3 end, float distance) {

public void render(PoseStack pose, VertexConsumer vertex, Vec3 camera, int color) {
float dx = (float) (this.start().x - this.end().x);
float dy = (float) (this.start().y - this.end().y);
float dz = (float) (this.start().z - this.end().z);
Matrix4f mat = pose.last().pose();
vertex.addVertex(
mat,
(float) (this.start().x - camera.x),
(float) (this.start().y - camera.y),
(float) (this.start().z - camera.z)
).setColor(color)
.setNormal(pose.last(), dx /= this.distance(), dy /= this.distance(), dz /= this.distance());
vertex.addVertex(
mat,
(float) (this.end().x - camera.x),
(float) (this.end().y - camera.y),
(float) (this.end().z - camera.z)
).setColor(color)
.setNormal(pose.last(), dx, dy, dz);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,12 @@ public class ItemTooltipManager {
map.put(ModItems.TOPAZ.get(), "Containing the power of lightning");
map.put(ModBlocks.RESIN_BLOCK.asItem(), "Use to capture friendly or weak hostile creatures LivingEntity");
map.put(ModBlocks.CRAB_TRAP.asItem(), "Placing it in the water to help you catch aquatic products");
map.put(ModItems.CRAB_CLAW.get(), "Increase touch distance when holding");
map.put(ModItems.CRAB_CLAW.get(), "Increase touch length when holding");
map.put(ModBlocks.ROYAL_ANVIL.asItem(), "Unbreakable and powerful compatibility");
map.put(ModBlocks.ROYAL_GRINDSTONE.asItem(), "Creeper proof, Eliminating Curses and Punishing");
map.put(ModBlocks.ROYAL_SMITHING_TABLE.asItem(), "Creeper proof, Saving your Smithing Template");
map.put(ModBlocks.HEATER.asItem(), "Heating the block above, consumes 16 kW");
map.put(ModBlocks.TRANSMISSION_POLE.asItem(), "Build a power grid with a transmission distance of 8");
map.put(ModBlocks.TRANSMISSION_POLE.asItem(), "Build a power grid with a transmission length of 8");
map.put(ModBlocks.CHARGE_COLLECTOR.asItem(), "Collecting charges to generate power");
map.put(ModBlocks.POWER_CONVERTER_SMALL.asItem(), "Convert power into FE, consumes 1 kW");
map.put(ModBlocks.POWER_CONVERTER_MIDDLE.asItem(), "Convert power into FE, consumes 3 kW");
Expand All @@ -62,7 +62,7 @@ public class ItemTooltipManager {
map.put(ModBlocks.CUT_ROYAL_STEEL_STAIRS.asItem(), "Creeper proof");
map.put(ModBlocks.CUT_ROYAL_STEEL_SLAB.asItem(), "Creeper proof");
map.put(ModBlocks.TEMPERING_GLASS.asItem(), "Creeper proof, No tools required on collect");
map.put(ModBlocks.REMOTE_TRANSMISSION_POLE.asItem(), "Build a power grid with a transmission distance of 8");
map.put(ModBlocks.REMOTE_TRANSMISSION_POLE.asItem(), "Build a power grid with a transmission length of 8");
map.put(ModBlocks.HEAVY_IRON_BLOCK.asItem(), "Explosion proof");
map.put(ModBlocks.POLISHED_HEAVY_IRON_BLOCK.asItem(), "Explosion proof");
map.put(ModBlocks.POLISHED_HEAVY_IRON_SLAB.asItem(), "Explosion proof");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,10 @@ public void setRemoved() {
irradiateBlockEntity.onCancelingIrradiation(this);
}

public float laserOffset() {
return 0;
}

/**
* 为了适配forge中修改的渲染逻辑所添加的函数
* 返回一个无限碰撞箱
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,11 @@ public int getInputPower() {
return getBlockState().getValue(RubyLaserBlock.SWITCH) == Switch.OFF ? 0 : 16;
}

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

@Override
public Direction getDirection() {
return this.getBlockState().getValue(RubyLaserBlock.FACING);
Expand Down
33 changes: 33 additions & 0 deletions src/main/java/dev/dubhe/anvilcraft/client/renderer/Line.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package dev.dubhe.anvilcraft.client.renderer;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;
import net.minecraft.world.phys.Vec3;
import org.joml.Matrix4f;

public record Line(Vec3 start, Vec3 end, float length) {

public void render(PoseStack pose, VertexConsumer vertex, Vec3 camera, int color) {
render(pose.last(), vertex, camera, color);
}

public void render(PoseStack.Pose pose, VertexConsumer vertex, Vec3 camera, int color) {
float dx = (float) (this.start().x - this.end().x);
float dy = (float) (this.start().y - this.end().y);
float dz = (float) (this.start().z - this.end().z);
vertex.addVertex(
pose.pose(),
(float) (this.start().x - camera.x),
(float) (this.start().y - camera.y),
(float) (this.start().z - camera.z)
).setColor(color)
.setNormal(pose, dx /= this.length(), dy /= this.length(), dz /= this.length());
vertex.addVertex(
pose.pose(),
(float) (this.end().x - camera.x),
(float) (this.end().y - camera.y),
(float) (this.end().z - camera.z)
).setColor(color)
.setNormal(pose, dx, dy, dz);
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,20 @@
package dev.dubhe.anvilcraft.client.renderer.blockentity;

import dev.dubhe.anvilcraft.AnvilCraft;
import dev.dubhe.anvilcraft.block.entity.BaseLaserBlockEntity;
import dev.dubhe.anvilcraft.block.entity.RubyLaserBlockEntity;

import dev.dubhe.anvilcraft.client.renderer.laser.LaserCompiler;
import dev.dubhe.anvilcraft.client.renderer.laser.LaserRenderStatus;
import dev.dubhe.anvilcraft.client.renderer.laser.LaserState;
import dev.dubhe.anvilcraft.init.ModRenderTypes;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.client.renderer.blockentity.BlockEntityRenderer;
import net.minecraft.client.renderer.blockentity.BlockEntityRendererProvider;
import net.minecraft.client.renderer.texture.OverlayTexture;
import net.minecraft.client.renderer.texture.TextureAtlas;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.phys.AABB;

import com.mojang.blaze3d.vertex.PoseStack;
import com.mojang.blaze3d.vertex.VertexConsumer;

import javax.annotation.ParametersAreNonnullByDefault;

Expand All @@ -32,179 +28,39 @@ public LaserRenderer(BlockEntityRendererProvider.Context context) {

@Override
public void render(
BaseLaserBlockEntity blockEntity,
BaseLaserBlockEntity baseLaserBlockEntity,
float partialTick,
PoseStack poseStack,
MultiBufferSource buffer,
int packedLight,
int packedOverlay
) {
if (blockEntity.getLevel() == null) return;
if (blockEntity.irradiateBlockPos == null) return;
final TextureAtlasSprite sprite = Minecraft.getInstance()
.getTextureAtlas(TextureAtlas.LOCATION_BLOCKS)
.apply(AnvilCraft.of("block/laser"));
if (LaserRenderStatus.isEnhancedRenderingAvailable()) return;
poseStack.pushPose();
poseStack.translate(0.5f, 0.5f, 0.5);
float offset = 0;
VertexConsumer consumer = buffer.getBuffer(ModRenderTypes.LASER);
float length = (float) (blockEntity
.irradiateBlockPos
.getCenter()
.distanceTo(blockEntity.getBlockPos().getCenter()) - 0.5);
if (blockEntity instanceof RubyLaserBlockEntity) offset = 0.489f;
poseStack.mulPose(blockEntity.getDirection().getRotation());
renderBox(
consumer,
poseStack,
-0.0625f,
-offset,
-0.0625f,
0.0625f,
length,
0.0625f,
sprite
);
renderBox(
consumer,
poseStack,
-0.0625f,
length,
-0.0625f,
0.0625f,
length + 0.3f,
0.0625f,
0.35f,
sprite
);
renderBox(
consumer,
poseStack,
-0.0625f,
length + 0.3f,
-0.0625f,
0.0625f,
length + 0.57f,
0.0625f,
0.15f,
sprite
);
if (buffer instanceof MultiBufferSource.BufferSource bufferSource) {
bufferSource.endBatch();
LaserState laserState = LaserState.create(baseLaserBlockEntity, poseStack);
if (laserState != null) {
LaserCompiler.compile(
laserState,
renderType -> {
if (renderType == ModRenderTypes.LASER){
return buffer.getBuffer(RenderType.translucent());
}
return buffer.getBuffer(renderType);
}
);
}
poseStack.popPose();
}

private static void renderBox(
VertexConsumer consumer,
PoseStack poseStack,
float minX,
float minY,
float minZ,
float maxX,
float maxY,
float maxZ,
TextureAtlasSprite sprite) {
renderQuadX(consumer, poseStack, maxX, maxX, minY, minZ, maxY, maxZ, 0.5f, sprite);
renderQuadX(consumer, poseStack, minX, minX, minY, maxZ, maxY, minZ, 0.5f, sprite);
renderQuadY(consumer, poseStack, maxY, maxY, minX, minZ, maxX, maxZ, 0.5f, sprite);
renderQuadY(consumer, poseStack, minY, minY, maxX, minZ, minX, maxZ, 0.5f, sprite);
renderQuadZ(consumer, poseStack, maxZ, maxZ, minX, maxY, maxX, minY, 0.5f, sprite);
renderQuadZ(consumer, poseStack, minZ, minZ, minX, minY, maxX, maxY, 0.5f, sprite);
}

private static void renderBox(
VertexConsumer consumer,
PoseStack poseStack,
float minX,
float minY,
float minZ,
float maxX,
float maxY,
float maxZ,
float a,
TextureAtlasSprite sprite) {
renderQuadX(consumer, poseStack, maxX, maxX, minY, minZ, maxY, maxZ, a, sprite);
renderQuadX(consumer, poseStack, minX, minX, minY, maxZ, maxY, minZ, a, sprite);
renderQuadY(consumer, poseStack, maxY, maxY, minX, minZ, maxX, maxZ, a, sprite);
renderQuadY(consumer, poseStack, minY, minY, maxX, minZ, minX, maxZ, a, sprite);
renderQuadZ(consumer, poseStack, maxZ, maxZ, minX, maxY, maxX, minY, a, sprite);
renderQuadZ(consumer, poseStack, minZ, minZ, minX, minY, maxX, maxY, a, sprite);
}

private static void renderQuadX(
VertexConsumer consumer,
PoseStack poseStack,
float minX,
float maxX,
float minY,
float minZ,
float maxY,
float maxZ,
float a,
TextureAtlasSprite sprite) {
addVertex(consumer, poseStack, minX, maxY, minZ, sprite.getU1(), sprite.getV1(), a);
addVertex(consumer, poseStack, minX, maxY, maxZ, sprite.getU0(), sprite.getV1(), a);
addVertex(consumer, poseStack, maxX, minY, maxZ, sprite.getU0(), sprite.getV0(), a);
addVertex(consumer, poseStack, maxX, minY, minZ, sprite.getU1(), sprite.getV0(), a);
}

private static void renderQuadY(
VertexConsumer consumer,
PoseStack poseStack,
float minY,
float maxY,
float minX,
float minZ,
float maxX,
float maxZ,
float a,
TextureAtlasSprite sprite) {
addVertex(consumer, poseStack, minX, minY, minZ, sprite.getU1(), sprite.getV1(), a);
addVertex(consumer, poseStack, minX, minY, maxZ, sprite.getU0(), sprite.getV1(), a);
addVertex(consumer, poseStack, maxX, maxY, maxZ, sprite.getU0(), sprite.getV0(), a);
addVertex(consumer, poseStack, maxX, maxY, minZ, sprite.getU1(), sprite.getV0(), a);
}

private static void renderQuadZ(
VertexConsumer consumer,
PoseStack poseStack,
float minZ,
float maxZ,
float minX,
float minY,
float maxX,
float maxY,
float a,
TextureAtlasSprite sprite) {
addVertex(consumer, poseStack, minX, maxY, minZ, sprite.getU1(), sprite.getV1(), a);
addVertex(consumer, poseStack, maxX, maxY, minZ, sprite.getU0(), sprite.getV1(), a);
addVertex(consumer, poseStack, maxX, minY, maxZ, sprite.getU0(), sprite.getV0(), a);
addVertex(consumer, poseStack, minX, minY, maxZ, sprite.getU1(), sprite.getV0(), a);
}

@Override
public AABB getRenderBoundingBox(BaseLaserBlockEntity blockEntity) {
int renderDistance = Minecraft.getInstance().options.getEffectiveRenderDistance() * 16;
return AABB.ofSize(
blockEntity.getBlockPos().getCenter(), renderDistance * 2, renderDistance * 2, renderDistance * 2);
}

private static void addVertex(
VertexConsumer consumer,
PoseStack poseStack,
float x,
float y,
float z,
float u,
float v,
float a) {
consumer.addVertex(poseStack.last().pose(), x, y, z)
.setColor(1f, .2f, .2f, a)
.setUv(u, v)
.setUv1(0, 0)
.setUv2(240, 240)
.setNormal(1, 0, 0);
blockEntity.getBlockPos().getCenter(),
renderDistance * 2,
renderDistance * 2,
renderDistance * 2
);
}

@Override
Expand Down
Loading

0 comments on commit 0d2b733

Please sign in to comment.