Model parts

This commit is contained in:
SD 2021-01-09 08:09:21 +05:30
parent 018a2ff545
commit e31d58c6f5
No known key found for this signature in database
GPG key ID: E36B57EE08544BC5
5 changed files with 106 additions and 51 deletions

View file

@ -21,7 +21,7 @@ public class DimensionalPortalBlock extends Block implements RiftProvider<Entran
@Override @Override
public EntranceRiftBlockEntity getRift(World world, BlockPos pos, BlockState state) { public EntranceRiftBlockEntity getRift(World world, BlockPos pos, BlockState state) {
return (EntranceRiftBlockEntity) this.createBlockEntity(world); return (EntranceRiftBlockEntity) world.getBlockEntity(pos);
} }
@Override @Override

View file

@ -1,9 +1,13 @@
package org.dimdev.dimdoors.block.entity; package org.dimdev.dimdoors.block.entity;
import java.util.Optional;
import org.dimdev.dimdoors.ModConfig; import org.dimdev.dimdoors.ModConfig;
import org.dimdev.dimdoors.util.TeleportUtil; import org.dimdev.dimdoors.util.TeleportUtil;
import net.minecraft.block.BlockState; import net.minecraft.block.BlockState;
import net.minecraft.block.DoorBlock;
import net.minecraft.block.HorizontalFacingBlock;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.util.math.Direction; import net.minecraft.util.math.Direction;
@ -44,7 +48,24 @@ public class EntranceRiftBlockEntity extends RiftBlockEntity {
} }
public Direction getOrientation() { public Direction getOrientation() {
return Direction.NORTH; //noinspection ConstantConditions
return Optional.of(this.world.getBlockState(this.pos))
.filter(state -> state.contains(HorizontalFacingBlock.FACING))
.map(state -> state.get(HorizontalFacingBlock.FACING))
.orElse(Direction.NORTH);
// BlockState state = this.world.getBlockState(this.pos);
// if (state.contains(HorizontalFacingBlock.FACING)) {
// return state.get(HorizontalFacingBlock.FACING);
// }
// return Direction.NORTH;
}
/**
* Specifies if the portal should be rendered two blocks tall
*/
public boolean isTall() {
//noinspection ConstantConditions
return this.world.getBlockState(this.pos).getBlock() instanceof DoorBlock;
} }
@Override @Override

View file

@ -12,6 +12,7 @@ import net.minecraft.block.BlockState;
import net.minecraft.block.DoorBlock; import net.minecraft.block.DoorBlock;
import net.minecraft.block.HorizontalFacingBlock; import net.minecraft.block.HorizontalFacingBlock;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
@ -29,9 +30,12 @@ import net.fabricmc.api.Environment;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class EntranceRiftBlockEntityRenderer extends BlockEntityRenderer<EntranceRiftBlockEntity> { public class EntranceRiftBlockEntityRenderer extends BlockEntityRenderer<EntranceRiftBlockEntity> {
private static final Random RANDOM = new Random(31100L); private static final Random RANDOM = new Random(31100L);
private final ModelPart warpModel;
public EntranceRiftBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { public EntranceRiftBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) {
super(blockEntityRenderDispatcher); super(blockEntityRenderDispatcher);
this.warpModel = new ModelPart(1024, 1024, 0, 0);
this.warpModel.addCuboid(0, 0, 0, 16, 16, 0);
} }
@Override @Override
@ -43,7 +47,7 @@ public class EntranceRiftBlockEntityRenderer extends BlockEntityRenderer<Entranc
} }
Direction orientation = blockEntity.getOrientation(); Direction orientation = blockEntity.getOrientation();
Vector3f vec = orientation.getOpposite().getUnitVector(); Vector3f vec = orientation.getOpposite().getUnitVector();
this.renderVertices(blockEntity, matrices, vertexConsumers, orientation, vec, layers); this.renderVertices(blockEntity, matrices, vertexConsumers, orientation, vec, layers, light, overlay);
// Vec3d offset = new Vec3d(vec); // Vec3d offset = new Vec3d(vec);
// DimensionalPortalRenderer.renderDimensionalPortal( // DimensionalPortalRenderer.renderDimensionalPortal(
@ -61,16 +65,15 @@ public class EntranceRiftBlockEntityRenderer extends BlockEntityRenderer<Entranc
matrices.pop(); matrices.pop();
} }
private void renderVertices(EntranceRiftBlockEntity entrance, MatrixStack matrices, VertexConsumerProvider vertexConsumers, Direction orientation, Vector3f vec, List<RenderLayer> layers) { private void renderVertices(EntranceRiftBlockEntity entrance, MatrixStack matrices, VertexConsumerProvider vertexConsumers, Direction orientation, Vector3f vec, List<RenderLayer> layers, int light, int overlay) {
vec.scale((float) (orientation == Direction.NORTH || orientation == Direction.WEST || orientation == Direction.UP ? 0.01 : 0.01 - 1)); vec.scale((float) (orientation == Direction.NORTH || orientation == Direction.WEST || orientation == Direction.UP ? 0.01 : 0.01 - 1));
double squaredDistance = entrance.getPos().getSquaredDistance(this.dispatcher.camera.getPos(), true); double squaredDistance = entrance.getPos().getSquaredDistance(this.dispatcher.camera.getPos(), true);
int offset = this.getOffset(squaredDistance); int offset = this.getOffset(squaredDistance);
float u = 0.75F; float u = 0.75F;
Matrix4f matrix4f = matrices.peek().getModel(); this.drawAllVertices(entrance, u, 0.15F, matrices, vertexConsumers.getBuffer(layers.get(0)), light, overlay);
this.drawAllVertices(entrance, u, 0.15F, matrix4f, vertexConsumers.getBuffer(layers.get(0)));
for (int i = 1; i < offset; ++i) { for (int i = 1; i < offset; ++i) {
this.drawAllVertices(entrance, u, 2.0F / (float) (18 - i), matrix4f, vertexConsumers.getBuffer(layers.get(i))); this.drawAllVertices(entrance, u, 2.0F / (float) (18 - i), matrices, vertexConsumers.getBuffer(layers.get(i)), light, overlay);
} }
} }
@ -94,49 +97,57 @@ public class EntranceRiftBlockEntityRenderer extends BlockEntityRenderer<Entranc
} }
} }
private void drawAllVertices(EntranceRiftBlockEntity blockEntity, float u, float v, Matrix4f matrix4f, VertexConsumer vertexConsumer) { private void drawAllVertices(EntranceRiftBlockEntity blockEntity, float u, float v, MatrixStack matrices, VertexConsumer vertexConsumer, int light, int overlay) {
float r = MathHelper.clamp((RANDOM.nextFloat() * 0.3F + 0.1F) * v, 0, 1); float r = MathHelper.clamp((RANDOM.nextFloat() * 0.3F + 0.1F) * v, 0, 1);
float g = MathHelper.clamp((RANDOM.nextFloat() * 0.4F + 0.1F) * v, 0, 1); float g = MathHelper.clamp((RANDOM.nextFloat() * 0.4F + 0.1F) * v, 0, 1);
float b = MathHelper.clamp((RANDOM.nextFloat() * 0.5F + 0.6F) * v, 0, 1); float b = MathHelper.clamp((RANDOM.nextFloat() * 0.5F + 0.6F) * v, 0, 1);
BlockState state = blockEntity.getCachedState(); this.warpModel.render(matrices, vertexConsumer, light, overlay, r, g, b, 1);
if (state.getBlock() instanceof DoorBlock) { if (blockEntity.isTall()) {
Direction doorDir = state.get(HorizontalFacingBlock.FACING); matrices.push();
switch (doorDir) { matrices.translate(0, 1, 0);
case NORTH: this.warpModel.render(matrices, vertexConsumer, light, overlay, r, g, b, 1);
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 1.0F + 1.0F, 1.0F, 1.0F, 1.0F, 1.0F, r, g, b); matrices.pop();
break; }
case SOUTH: // Matrix4f matrix4f = matrices.peek().getModel();
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 1.0F + 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, r, g, b); // BlockState state = blockEntity.getCachedState();
break; // if (state.getBlock() instanceof DoorBlock) {
case EAST: // Direction doorDir = state.get(HorizontalFacingBlock.FACING);
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 0.0F, 1.0F, 0.0F + 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b); // switch (doorDir) {
break; // case NORTH:
case WEST: // this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 1.0F + 1.0F, 1.0F, 1.0F, 1.0F, 1.0F, r, g, b);
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 0.0F, 0.0F, 1.0F + 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b); // break;
break; // case SOUTH:
default: // this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 1.0F + 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, r, g, b);
throw new AssertionError(); // break;
} // case EAST:
} else { // this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 0.0F, 1.0F, 0.0F + 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b);
// South // break;
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 1.0F + 1.0F, 1.0F, 1.0F, 1.0F, 1.0F, r, g, b); // case WEST:
// North // this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 0.0F, 0.0F, 1.0F + 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b);
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 1.0F + 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, r, g, b); // break;
// East // default:
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 1.0F, 1.0F, 1.0F + 1.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b); // throw new AssertionError();
// West // }
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 0.0F, 0.0F, 1.0F + 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b); // } else {
// Down // // South
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 1.0F, r, g, b); // this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 1.0F + 1.0F, 1.0F, 1.0F, 1.0F, 1.0F, r, g, b);
// Up // // North
this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 1.0F + 1.0F, 1.0F + 1.0F, 1.0F, 1.0F, 0.0F, 0.0F, r, g, b); // this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 1.0F + 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F, r, g, b);
} // // East
// this.drawVertices(blockEntity, matrix4f, vertexConsumer, 1.0F, 1.0F, 1.0F + 1.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b);
// // West
// this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 0.0F, 0.0F, 1.0F + 1.0F, 0.0F, 1.0F, 1.0F, 0.0F, r, g, b);
// // Down
// this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, 1.0F, r, g, b);
// // Up
// this.drawVertices(blockEntity, matrix4f, vertexConsumer, 0.0F, 1.0F, 1.0F + 1.0F, 1.0F + 1.0F, 1.0F, 1.0F, 0.0F, 0.0F, r, g, b);
// }
} }
private void drawVertices(EntranceRiftBlockEntity endPortalBlockEntity, Matrix4f matrix4f, VertexConsumer vertexConsumer, float x1, float x2, float y1, float y2, float z1, float z2, float z3, float z4, float red, float green, float blue) { // private void drawVertices(EntranceRiftBlockEntity endPortalBlockEntity, Matrix4f matrix4f, VertexConsumer vertexConsumer, float x1, float x2, float y1, float y2, float z1, float z2, float z3, float z4, float red, float green, float blue) {
vertexConsumer.vertex(matrix4f, x1, y1, z1).color(red, green, blue, 1.0F).next(); // vertexConsumer.vertex(matrix4f, x1, y1, z1).color(red, green, blue, 1.0F).next();
vertexConsumer.vertex(matrix4f, x2, y1, z2).color(red, green, blue, 1.0F).next(); // vertexConsumer.vertex(matrix4f, x2, y1, z2).color(red, green, blue, 1.0F).next();
vertexConsumer.vertex(matrix4f, x2, y2, z3).color(red, green, blue, 1.0F).next(); // vertexConsumer.vertex(matrix4f, x2, y2, z3).color(red, green, blue, 1.0F).next();
vertexConsumer.vertex(matrix4f, x1, y2, z4).color(red, green, blue, 1.0F).next(); // vertexConsumer.vertex(matrix4f, x1, y2, z4).color(red, green, blue, 1.0F).next();
} // }
} }

View file

@ -7,6 +7,7 @@ import org.dimdev.dimdoors.rift.registry.RiftRegistry;
import org.dimdev.dimdoors.util.EntityUtils; import org.dimdev.dimdoors.util.EntityUtils;
import org.dimdev.dimdoors.util.Location; import org.dimdev.dimdoors.util.Location;
import org.dimdev.dimdoors.util.RGBA; import org.dimdev.dimdoors.util.RGBA;
import org.dimdev.dimdoors.util.TeleportUtil;
import org.dimdev.dimdoors.world.ModDimensions; import org.dimdev.dimdoors.world.ModDimensions;
import org.dimdev.dimdoors.world.pocket.Pocket; import org.dimdev.dimdoors.world.pocket.Pocket;
import org.dimdev.dimdoors.world.pocket.PocketRegistry; import org.dimdev.dimdoors.world.pocket.PocketRegistry;
@ -40,7 +41,6 @@ public class PrivatePocketExitTarget extends VirtualTarget implements EntityTarg
} else { } else {
EntityUtils.chat(entity, new TranslatableText("rifts.destinations.private_pocket_exit.rift_has_closed")); EntityUtils.chat(entity, new TranslatableText("rifts.destinations.private_pocket_exit.rift_has_closed"));
} }
//FabricDimensions.teleport(entity, entity.getServer().getWorld(ModDimensions.LIMBO));
return false; return false;
} else { } else {
((EntityTarget) destLoc.getBlockEntity()).receiveEntity(entity, yawOffset); ((EntityTarget) destLoc.getBlockEntity()).receiveEntity(entity, yawOffset);

View file

@ -36,4 +36,27 @@ public final class TeleportUtil {
public static void teleport(ServerPlayerEntity player, RotatedLocation location) { public static void teleport(ServerPlayerEntity player, RotatedLocation location) {
teleport(player, DimensionalDoorsInitializer.getWorld(location.world), location.pos, (int) location.yaw); teleport(player, DimensionalDoorsInitializer.getWorld(location.world), location.pos, (int) location.yaw);
} }
public static void teleportUntargeted(Entity entity, World world) {
double actualScale = entity.world.getDimension().getCoordinateScale() / world.getDimension().getCoordinateScale();
teleport(
entity,
world,
entity.getPos().multiply(actualScale, 1, actualScale),
entity.yaw
);
}
public static void teleportUntargeted(Entity entity, World world, double y) {
double actualScale = entity.world.getDimension().getCoordinateScale() / world.getDimension().getCoordinateScale();
teleport(
entity,
world,
entity.getPos()
.subtract(0, entity.getPos().getY(), 0)
.add(0, y, 0)
.multiply(actualScale, 1, actualScale),
entity.yaw
);
}
} }