v1.5 new shapes + self culling + caching + coding tools/cleanup #10
@ -27,13 +27,13 @@ import java.util.stream.Collectors;
|
|||||||
import static fr.adrien1106.reframed.util.blocks.BlockProperties.LIGHT;
|
import static fr.adrien1106.reframed.util.blocks.BlockProperties.LIGHT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO add Hammer from framed ( removes theme ) for sure
|
* TODO add Hammer from framed ( removes theme ) -> for v1.5.5
|
||||||
* TODO add screwdriver ( iterate over theme states ) ?
|
* TODO add screwdriver ( iterate over theme states ) ?
|
||||||
* TODO add blueprint for survival friendly copy paste of a theme.
|
* TODO add blueprint for survival friendly copy paste of a theme. -> for v1.5.5
|
||||||
* TODO fix other models ( + half stair + layers )
|
* TODO add minecraft models like wall fence etc -> for v1.6
|
||||||
* TODO get better naming for the shapes (will break a lot of already placed blocks)
|
* TODO ( + half stair + layers ) -> priority for v1.5
|
||||||
* TODO put more coherence in the double theme orders / directions
|
* TODO put more coherence in the double theme orders / directions -> maybe v1.6 ?
|
||||||
* TODO better connected textures
|
* TODO better connected textures -> maybe v1.6 ?
|
||||||
*/
|
*/
|
||||||
public class ReFramed implements ModInitializer {
|
public class ReFramed implements ModInitializer {
|
||||||
public static final String MODID = "reframed";
|
public static final String MODID = "reframed";
|
||||||
@ -57,6 +57,7 @@ public class ReFramed implements ModInitializer {
|
|||||||
// CUBE = registerReFramed("half_stair" , new ReFramedBlock(cp(Blocks.OAK_STAIRS))); // TODO
|
// CUBE = registerReFramed("half_stair" , new ReFramedBlock(cp(Blocks.OAK_STAIRS))); // TODO
|
||||||
// CUBE = registerReFramed("half_stairs_stair" , new ReFramedBlock(cp(Blocks.OAK_STAIRS))); // TODO
|
// CUBE = registerReFramed("half_stairs_stair" , new ReFramedBlock(cp(Blocks.OAK_STAIRS))); // TODO
|
||||||
// CUBE = registerReFramed("half_stairs_slab" , new ReFramedBlock(cp(Blocks.OAK_STAIRS))); // TODO
|
// CUBE = registerReFramed("half_stairs_slab" , new ReFramedBlock(cp(Blocks.OAK_STAIRS))); // TODO
|
||||||
|
// CUBE = registerReFramed("layer" , new ReFramedBlock(cp(Blocks.OAK_SLAB))); // TODO
|
||||||
SLAB = registerReFramed("slab" , new ReFramedSlabBlock(cp(Blocks.OAK_SLAB)));
|
SLAB = registerReFramed("slab" , new ReFramedSlabBlock(cp(Blocks.OAK_SLAB)));
|
||||||
SLABS_CUBE = registerReFramed("slabs_cube" , new ReFramedSlabsCubeBlock(cp(Blocks.OAK_SLAB)));
|
SLABS_CUBE = registerReFramed("slabs_cube" , new ReFramedSlabsCubeBlock(cp(Blocks.OAK_SLAB)));
|
||||||
STEP = registerReFramed("step" , new ReFramedStepBlock(cp(Blocks.OAK_SLAB)));
|
STEP = registerReFramed("step" , new ReFramedStepBlock(cp(Blocks.OAK_SLAB)));
|
||||||
|
@ -67,14 +67,14 @@ public class ReFramedStairBlock extends WaterloggableReFramedBlock implements Bl
|
|||||||
@Override
|
@Override
|
||||||
public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighbor_state, WorldAccess world, BlockPos pos, BlockPos moved) {
|
public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighbor_state, WorldAccess world, BlockPos pos, BlockPos moved) {
|
||||||
return super.getStateForNeighborUpdate(state, direction, neighbor_state, world, pos, moved)
|
return super.getStateForNeighborUpdate(state, direction, neighbor_state, world, pos, moved)
|
||||||
.with(STAIR_SHAPE, BlockHelper.getStairsShape(state.getBlock(), state.get(EDGE), world, pos));
|
.with(STAIR_SHAPE, BlockHelper.getStairsShape(state.get(EDGE), world, pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
@Override // Pretty happy of how clean it is (also got it on first try :) )
|
@Override // Pretty happy of how clean it is (also got it on first try :) )
|
||||||
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||||
Edge face = BlockHelper.getPlacementEdge(ctx);
|
Edge face = BlockHelper.getPlacementEdge(ctx);
|
||||||
StairShape shape = BlockHelper.getStairsShape(this, face, ctx.getWorld(), ctx.getBlockPos());
|
StairShape shape = BlockHelper.getStairsShape(face, ctx.getWorld(), ctx.getBlockPos());
|
||||||
return super.getPlacementState(ctx).with(EDGE, face).with(STAIR_SHAPE, shape);
|
return super.getPlacementState(ctx).with(EDGE, face).with(STAIR_SHAPE, shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,7 +59,7 @@ public class ReFramedStairsCubeBlock extends ReFramedDoubleBlock implements Bloc
|
|||||||
@Override
|
@Override
|
||||||
public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighbor_state, WorldAccess world, BlockPos pos, BlockPos moved) {
|
public BlockState getStateForNeighborUpdate(BlockState state, Direction direction, BlockState neighbor_state, WorldAccess world, BlockPos pos, BlockPos moved) {
|
||||||
return super.getStateForNeighborUpdate(state, direction, neighbor_state, world, pos, moved)
|
return super.getStateForNeighborUpdate(state, direction, neighbor_state, world, pos, moved)
|
||||||
.with(STAIR_SHAPE, BlockHelper.getStairsShape(this, state.get(EDGE), world, pos));
|
.with(STAIR_SHAPE, BlockHelper.getStairsShape(state.get(EDGE), world, pos));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -67,7 +67,7 @@ public class ReFramedStairsCubeBlock extends ReFramedDoubleBlock implements Bloc
|
|||||||
@Override
|
@Override
|
||||||
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
public BlockState getPlacementState(ItemPlacementContext ctx) {
|
||||||
Edge face = BlockHelper.getPlacementEdge(ctx);
|
Edge face = BlockHelper.getPlacementEdge(ctx);
|
||||||
StairShape shape = BlockHelper.getStairsShape(this, face, ctx.getWorld(), ctx.getBlockPos());
|
StairShape shape = BlockHelper.getStairsShape(face, ctx.getWorld(), ctx.getBlockPos());
|
||||||
return super.getPlacementState(ctx).with(EDGE, face).with(STAIR_SHAPE, shape);
|
return super.getPlacementState(ctx).with(EDGE, face).with(STAIR_SHAPE, shape);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@ import com.google.common.cache.Cache;
|
|||||||
import com.google.common.cache.CacheBuilder;
|
import com.google.common.cache.CacheBuilder;
|
||||||
import fr.adrien1106.reframed.block.ReFramedBlock;
|
import fr.adrien1106.reframed.block.ReFramedBlock;
|
||||||
import fr.adrien1106.reframed.block.ReFramedEntity;
|
import fr.adrien1106.reframed.block.ReFramedEntity;
|
||||||
|
import fr.adrien1106.reframed.block.ReFramedStairBlock;
|
||||||
|
import fr.adrien1106.reframed.block.ReFramedStairsCubeBlock;
|
||||||
import fr.adrien1106.reframed.client.ReFramedClient;
|
import fr.adrien1106.reframed.client.ReFramedClient;
|
||||||
import fr.adrien1106.reframed.client.model.QuadPosBounds;
|
import fr.adrien1106.reframed.client.model.QuadPosBounds;
|
||||||
import net.fabricmc.api.EnvType;
|
import net.fabricmc.api.EnvType;
|
||||||
@ -109,28 +111,28 @@ public class BlockHelper {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static StairShape getStairsShape(Block block, Edge face, BlockView world, BlockPos pos) {
|
public static StairShape getStairsShape(Edge face, BlockView world, BlockPos pos) {
|
||||||
StairShape shape = STRAIGHT;
|
StairShape shape = STRAIGHT;
|
||||||
|
|
||||||
String sol = getNeighborPos(face, face.getFirstDirection(), true, face.getSecondDirection(), world, pos, block);
|
String sol = getNeighborPos(face, face.getFirstDirection(), true, face.getSecondDirection(), world, pos);
|
||||||
switch (sol) {
|
switch (sol) {
|
||||||
case "right": return INNER_RIGHT;
|
case "right": return INNER_RIGHT;
|
||||||
case "left": return INNER_LEFT;
|
case "left": return INNER_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
sol = getNeighborPos(face, face.getSecondDirection(), true, face.getFirstDirection(), world, pos, block);
|
sol = getNeighborPos(face, face.getSecondDirection(), true, face.getFirstDirection(), world, pos);
|
||||||
switch (sol) {
|
switch (sol) {
|
||||||
case "right": return INNER_RIGHT;
|
case "right": return INNER_RIGHT;
|
||||||
case "left": return INNER_LEFT;
|
case "left": return INNER_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
sol = getNeighborPos(face, face.getFirstDirection(), false, face.getSecondDirection(), world, pos, block);
|
sol = getNeighborPos(face, face.getFirstDirection(), false, face.getSecondDirection(), world, pos);
|
||||||
switch (sol) {
|
switch (sol) {
|
||||||
case "right" -> shape = FIRST_OUTER_RIGHT;
|
case "right" -> shape = FIRST_OUTER_RIGHT;
|
||||||
case "left" -> shape = FIRST_OUTER_LEFT;
|
case "left" -> shape = FIRST_OUTER_LEFT;
|
||||||
}
|
}
|
||||||
|
|
||||||
sol = getNeighborPos(face, face.getSecondDirection(), false, face.getFirstDirection(), world, pos, block);
|
sol = getNeighborPos(face, face.getSecondDirection(), false, face.getFirstDirection(), world, pos);
|
||||||
switch (sol) {
|
switch (sol) {
|
||||||
case "right" -> {
|
case "right" -> {
|
||||||
if (shape.equals(STRAIGHT)) shape = SECOND_OUTER_RIGHT;
|
if (shape.equals(STRAIGHT)) shape = SECOND_OUTER_RIGHT;
|
||||||
@ -145,18 +147,23 @@ public class BlockHelper {
|
|||||||
return shape;
|
return shape;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getNeighborPos(Edge face, Direction direction, Boolean reverse, Direction reference, BlockView world, BlockPos pos, Block block) {
|
public static String getNeighborPos(Edge face, Direction direction, Boolean reverse, Direction reference, BlockView world, BlockPos pos) {
|
||||||
BlockState block_state = world.getBlockState(
|
BlockState block_state = world.getBlockState(
|
||||||
pos.offset(reverse ? direction.getOpposite() : direction)
|
pos.offset(reverse ? direction.getOpposite() : direction)
|
||||||
);
|
);
|
||||||
|
|
||||||
if (block_state.isOf(block) && block_state.get(EDGE).hasDirection(reference)) {
|
if (isStair(block_state) && block_state.get(EDGE).hasDirection(reference)) {
|
||||||
if (block_state.get(EDGE).hasDirection(face.getLeftDirection())) return "left";
|
if (block_state.get(EDGE).hasDirection(face.getLeftDirection())) return "left";
|
||||||
else if (block_state.get(EDGE).hasDirection(face.getRightDirection())) return "right";
|
else if (block_state.get(EDGE).hasDirection(face.getRightDirection())) return "right";
|
||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isStair(BlockState state) {
|
||||||
|
return state.getBlock() instanceof ReFramedStairBlock
|
||||||
|
|| state.getBlock() instanceof ReFramedStairsCubeBlock;
|
||||||
|
}
|
||||||
|
|
||||||
public static ActionResult useCamo(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, int theme_index) {
|
public static ActionResult useCamo(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockHitResult hit, int theme_index) {
|
||||||
if(!(world.getBlockEntity(pos) instanceof ReFramedEntity block_entity)) return ActionResult.PASS;
|
if(!(world.getBlockEntity(pos) instanceof ReFramedEntity block_entity)) return ActionResult.PASS;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user