From 31d9ed2d89e95b81a3a1f063a27cbd86f65216a4 Mon Sep 17 00:00:00 2001 From: gemsb <85642836+gemsb@users.noreply.github.com> Date: Wed, 21 Aug 2024 16:44:50 +0200 Subject: [PATCH] fix portal --- .../block/custom/PedestalBlock.java | 14 ++-- .../ugi/sculk_depths/portal/PortalFrame.java | 76 +++++++++++++++++-- 2 files changed, 78 insertions(+), 12 deletions(-) diff --git a/src/main/java/net/ugi/sculk_depths/block/custom/PedestalBlock.java b/src/main/java/net/ugi/sculk_depths/block/custom/PedestalBlock.java index 37cf0a6a..d5f8b3a3 100644 --- a/src/main/java/net/ugi/sculk_depths/block/custom/PedestalBlock.java +++ b/src/main/java/net/ugi/sculk_depths/block/custom/PedestalBlock.java @@ -74,12 +74,14 @@ protected ItemActionResult onUseWithItem(ItemStack stack, BlockState state, Worl BlockPos portalFramePos = PortalFrame.getFramePos(state.get(FACING),pos, world); if (portalFramePos != null){ - PortalFrame.genFrame(portalFramePos,world); - - if ( state.get(FACING) == Direction.SOUTH || state.get(FACING) == Direction.NORTH ) - PortalFrame.genPortalX(portalFramePos.up(3),world, 0); - if ( state.get(FACING) == Direction.WEST || state.get(FACING) == Direction.EAST ) - PortalFrame.genPortalZ(portalFramePos.up(3),world, 0); + boolean fullFrame = PortalFrame.genFrame(portalFramePos,world); + + if (fullFrame) { + if (state.get(FACING) == Direction.SOUTH || state.get(FACING) == Direction.NORTH) + PortalFrame.genPortalX(portalFramePos.up(3), world, 0); + if (state.get(FACING) == Direction.WEST || state.get(FACING) == Direction.EAST) + PortalFrame.genPortalZ(portalFramePos.up(3), world, 0); + } } diff --git a/src/main/java/net/ugi/sculk_depths/portal/PortalFrame.java b/src/main/java/net/ugi/sculk_depths/portal/PortalFrame.java index 2e144ec9..2bfb798d 100644 --- a/src/main/java/net/ugi/sculk_depths/portal/PortalFrame.java +++ b/src/main/java/net/ugi/sculk_depths/portal/PortalFrame.java @@ -1,16 +1,13 @@ package net.ugi.sculk_depths.portal; -import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.block.Blocks; -import net.minecraft.block.enums.DoubleBlockHalf; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.world.World; import net.ugi.sculk_depths.block.ModBlocks; import net.ugi.sculk_depths.state.property.ModProperties; -import static net.minecraft.block.DoorBlock.HALF; import static net.ugi.sculk_depths.block.custom.SculkDepthsPortalBlock.AXIS; public class PortalFrame { @@ -75,17 +72,84 @@ private static BlockPos getNextFrameBlockPos(BlockPos pos, World world){ return null; } - public static void genFrame(BlockPos pos, World world){ + private static Boolean chekcfullFrame(BlockPos pos1,BlockPos pos2, World world){ + int countActivatedAmalgamite = 0; + + if (pos1 != null) { + + if (world.getBlockState(pos1.north()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos1.south()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos1.east()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos1.west()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos1.up()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos1.down()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + + if (countActivatedAmalgamite >= 2) + return true; + return false; + } + + if (pos1 != null) { + + if (world.getBlockState(pos2.north()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos2.south()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos2.east()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos2.west()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos2.up()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + if (world.getBlockState(pos2.down()).getBlock() == ModBlocks.ACTIVATED_AMALGAMITE) { + countActivatedAmalgamite++; + } + + if (countActivatedAmalgamite >= 2) + return true; + return false; + } + return false; + } + + public static boolean genFrame(BlockPos pos, World world){ BlockPos nextPos1 = pos; BlockPos nextPos2 = pos; + world.setBlockState(pos,ModBlocks.ACTIVATED_AMALGAMITE.getDefaultState()); + while (nextPos1 != null && nextPos2 != null){ - world.setBlockState(nextPos1,ModBlocks.ACTIVATED_AMALGAMITE.getDefaultState()); + nextPos1 = getNextFrameBlockPos(nextPos1,world); + if (nextPos1 != null){ + world.setBlockState(nextPos1,ModBlocks.ACTIVATED_AMALGAMITE.getDefaultState()); + break; + } - world.setBlockState(nextPos2,ModBlocks.ACTIVATED_AMALGAMITE.getDefaultState()); nextPos2 = getNextFrameBlockPos(nextPos2,world); + if (nextPos2 != null){ + world.setBlockState(nextPos2,ModBlocks.ACTIVATED_AMALGAMITE.getDefaultState()); + break; + } } + return chekcfullFrame(nextPos1, nextPos2, world); } public static void genPortalX(BlockPos pos, World world, int depth){