future protocol for alternative block placement
This commit is contained in:
1 parent
e6a3d478ec
commit
b88471a081
1 file changed
+47
-14
@@ -1,7 +1,26 @@
|
||||
package carpet.helpers;
|
||||
|
||||
import carpet.CarpetSettings;
|
||||
import net.minecraft.block.*;
|
||||
import net.minecraft.block.AbstractRedstoneGateBlock;
|
||||
import net.minecraft.block.Block;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.block.Blocks;
|
||||
import net.minecraft.block.ComparatorBlock;
|
||||
import net.minecraft.block.DispenserBlock;
|
||||
import net.minecraft.block.EndRodBlock;
|
||||
import net.minecraft.block.FacingBlock;
|
||||
import net.minecraft.block.FenceGateBlock;
|
||||
import net.minecraft.block.GlazedTerracottaBlock;
|
||||
import net.minecraft.block.HopperBlock;
|
||||
import net.minecraft.block.HorizontalFacingBlock;
|
||||
import net.minecraft.block.LeverBlock;
|
||||
import net.minecraft.block.ObserverBlock;
|
||||
import net.minecraft.block.PistonBlock;
|
||||
import net.minecraft.block.RailBlock;
|
||||
import net.minecraft.block.RepeaterBlock;
|
||||
import net.minecraft.block.SlabBlock;
|
||||
import net.minecraft.block.StairsBlock;
|
||||
import net.minecraft.block.TrapdoorBlock;
|
||||
import net.minecraft.block.enums.BlockHalf;
|
||||
import net.minecraft.block.enums.ComparatorMode;
|
||||
import net.minecraft.block.enums.SlabType;
|
||||
@@ -12,7 +31,11 @@ import net.minecraft.item.ItemPlacementContext;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.BlockRotation;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.math.*;
|
||||
import net.minecraft.util.math.BlockPointer;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
public class BlockRotator
|
||||
@@ -30,16 +53,26 @@ public class BlockRotator
|
||||
{
|
||||
//actual alternative block placement code
|
||||
//
|
||||
if (true) throw new UnsupportedOperationException("Alternative Block Placement / client controlled / is not implemnted");
|
||||
|
||||
Direction facing;
|
||||
Vec3d vec3d = context.getPos();
|
||||
float hitX = (float) vec3d.x;
|
||||
|
||||
if (hitX<2) // vanilla
|
||||
return null;
|
||||
int code = (int)(hitX-2)/2;
|
||||
//
|
||||
// now it would be great if hitX was adjusted in context to original range from 0.0 to 1.0
|
||||
// since its actually using it. Its private - maybe with Reflections?
|
||||
//
|
||||
PlayerEntity placer = context.getPlayer();
|
||||
BlockPos pos = context.getBlockPos();
|
||||
World world = context.getWorld();
|
||||
|
||||
if (block instanceof GlazedTerracottaBlock)
|
||||
{
|
||||
facing = Direction.byId((int)hitX - 2);
|
||||
facing = Direction.byId(code);
|
||||
if(facing == Direction.UP || facing == Direction.DOWN)
|
||||
{
|
||||
facing = placer.getHorizontalFacing().getOpposite();
|
||||
@@ -49,37 +82,37 @@ public class BlockRotator
|
||||
else if (block instanceof ObserverBlock)
|
||||
{
|
||||
return block.getDefaultState()
|
||||
.with(FacingBlock.FACING, Direction.byId((int)hitX - 2))
|
||||
.with(FacingBlock.FACING, Direction.byId(code))
|
||||
.with(ObserverBlock.POWERED, true);
|
||||
}
|
||||
else if (block instanceof RepeaterBlock)
|
||||
{
|
||||
facing = Direction.byId((((int)hitX) % 10) - 2);
|
||||
facing = Direction.byId(code % 16);
|
||||
if(facing == Direction.UP || facing == Direction.DOWN)
|
||||
{
|
||||
facing = placer.getHorizontalFacing().getOpposite();
|
||||
}
|
||||
return block.getDefaultState()
|
||||
.with(HorizontalFacingBlock.FACING, facing)
|
||||
.with(RepeaterBlock.DELAY, MathHelper.clamp((((int) hitX) / 10) + 1, 1, 4))
|
||||
.with(RepeaterBlock.DELAY, MathHelper.clamp(code / 16, 1, 4))
|
||||
.with(RepeaterBlock.LOCKED, Boolean.FALSE);
|
||||
}
|
||||
else if (block instanceof TrapdoorBlock)
|
||||
{
|
||||
return block.getDefaultState()
|
||||
.with(TrapdoorBlock.FACING, Direction.byId((((int)hitX) % 10) - 2))
|
||||
.with(TrapdoorBlock.FACING, Direction.byId(code % 16))
|
||||
.with(TrapdoorBlock.OPEN, Boolean.FALSE)
|
||||
.with(TrapdoorBlock.HALF, (hitX > 10) ? BlockHalf.TOP : BlockHalf.BOTTOM)
|
||||
.with(TrapdoorBlock.HALF, (code >= 16) ? BlockHalf.TOP : BlockHalf.BOTTOM)
|
||||
.with(TrapdoorBlock.OPEN, world.isReceivingRedstonePower(pos));
|
||||
}
|
||||
else if (block instanceof ComparatorBlock)
|
||||
{
|
||||
facing = Direction.byId((((int)hitX) % 10) - 2);
|
||||
facing = Direction.byId(code % 16);
|
||||
if((facing == Direction.UP) || (facing == Direction.DOWN))
|
||||
{
|
||||
facing = placer.getHorizontalFacing().getOpposite();
|
||||
}
|
||||
ComparatorMode m = (hitX > 10)?ComparatorMode.SUBTRACT: ComparatorMode.COMPARE;
|
||||
ComparatorMode m = (hitX >= 16)?ComparatorMode.SUBTRACT: ComparatorMode.COMPARE;
|
||||
return block.getDefaultState()
|
||||
.with(HorizontalFacingBlock.FACING, facing)
|
||||
.with(ComparatorBlock.POWERED, Boolean.FALSE)
|
||||
@@ -88,20 +121,20 @@ public class BlockRotator
|
||||
else if (block instanceof DispenserBlock)
|
||||
{
|
||||
return block.getDefaultState()
|
||||
.with(DispenserBlock.FACING, Direction.byId((int)hitX - 2))
|
||||
.with(DispenserBlock.FACING, Direction.byId(code))
|
||||
.with(DispenserBlock.TRIGGERED, Boolean.FALSE);
|
||||
}
|
||||
else if (block instanceof PistonBlock)
|
||||
{
|
||||
return block.getDefaultState()
|
||||
.with(FacingBlock.FACING, Direction.byId((int)hitX - 2) )
|
||||
.with(FacingBlock.FACING, Direction.byId(code))
|
||||
.with(PistonBlock.EXTENDED, Boolean.FALSE);
|
||||
}
|
||||
else if (block instanceof StairsBlock)
|
||||
{
|
||||
return block.getPlacementState(context)//worldIn, pos, facing, hitX, hitY, hitZ, meta, placer)
|
||||
.with(StairsBlock.FACING, Direction.byId((((int)hitX) % 10) - 2))
|
||||
.with(StairsBlock.HALF, ( hitX > 10)?BlockHalf.TOP : BlockHalf.BOTTOM);
|
||||
.with(StairsBlock.FACING, Direction.byId(code % 16))
|
||||
.with(StairsBlock.HALF, ( hitX >= 16)?BlockHalf.TOP : BlockHalf.BOTTOM);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user