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;
|
package carpet.helpers;
|
||||||
|
|
||||||
import carpet.CarpetSettings;
|
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.BlockHalf;
|
||||||
import net.minecraft.block.enums.ComparatorMode;
|
import net.minecraft.block.enums.ComparatorMode;
|
||||||
import net.minecraft.block.enums.SlabType;
|
import net.minecraft.block.enums.SlabType;
|
||||||
@@ -12,7 +31,11 @@ import net.minecraft.item.ItemPlacementContext;
|
|||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.util.BlockRotation;
|
import net.minecraft.util.BlockRotation;
|
||||||
import net.minecraft.util.Hand;
|
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;
|
import net.minecraft.world.World;
|
||||||
|
|
||||||
public class BlockRotator
|
public class BlockRotator
|
||||||
@@ -30,16 +53,26 @@ public class BlockRotator
|
|||||||
{
|
{
|
||||||
//actual alternative block placement code
|
//actual alternative block placement code
|
||||||
//
|
//
|
||||||
|
if (true) throw new UnsupportedOperationException("Alternative Block Placement / client controlled / is not implemnted");
|
||||||
|
|
||||||
Direction facing;
|
Direction facing;
|
||||||
Vec3d vec3d = context.getPos();
|
Vec3d vec3d = context.getPos();
|
||||||
float hitX = (float) vec3d.x;
|
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();
|
PlayerEntity placer = context.getPlayer();
|
||||||
BlockPos pos = context.getBlockPos();
|
BlockPos pos = context.getBlockPos();
|
||||||
World world = context.getWorld();
|
World world = context.getWorld();
|
||||||
|
|
||||||
if (block instanceof GlazedTerracottaBlock)
|
if (block instanceof GlazedTerracottaBlock)
|
||||||
{
|
{
|
||||||
facing = Direction.byId((int)hitX - 2);
|
facing = Direction.byId(code);
|
||||||
if(facing == Direction.UP || facing == Direction.DOWN)
|
if(facing == Direction.UP || facing == Direction.DOWN)
|
||||||
{
|
{
|
||||||
facing = placer.getHorizontalFacing().getOpposite();
|
facing = placer.getHorizontalFacing().getOpposite();
|
||||||
@@ -49,37 +82,37 @@ public class BlockRotator
|
|||||||
else if (block instanceof ObserverBlock)
|
else if (block instanceof ObserverBlock)
|
||||||
{
|
{
|
||||||
return block.getDefaultState()
|
return block.getDefaultState()
|
||||||
.with(FacingBlock.FACING, Direction.byId((int)hitX - 2))
|
.with(FacingBlock.FACING, Direction.byId(code))
|
||||||
.with(ObserverBlock.POWERED, true);
|
.with(ObserverBlock.POWERED, true);
|
||||||
}
|
}
|
||||||
else if (block instanceof RepeaterBlock)
|
else if (block instanceof RepeaterBlock)
|
||||||
{
|
{
|
||||||
facing = Direction.byId((((int)hitX) % 10) - 2);
|
facing = Direction.byId(code % 16);
|
||||||
if(facing == Direction.UP || facing == Direction.DOWN)
|
if(facing == Direction.UP || facing == Direction.DOWN)
|
||||||
{
|
{
|
||||||
facing = placer.getHorizontalFacing().getOpposite();
|
facing = placer.getHorizontalFacing().getOpposite();
|
||||||
}
|
}
|
||||||
return block.getDefaultState()
|
return block.getDefaultState()
|
||||||
.with(HorizontalFacingBlock.FACING, facing)
|
.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);
|
.with(RepeaterBlock.LOCKED, Boolean.FALSE);
|
||||||
}
|
}
|
||||||
else if (block instanceof TrapdoorBlock)
|
else if (block instanceof TrapdoorBlock)
|
||||||
{
|
{
|
||||||
return block.getDefaultState()
|
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.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));
|
.with(TrapdoorBlock.OPEN, world.isReceivingRedstonePower(pos));
|
||||||
}
|
}
|
||||||
else if (block instanceof ComparatorBlock)
|
else if (block instanceof ComparatorBlock)
|
||||||
{
|
{
|
||||||
facing = Direction.byId((((int)hitX) % 10) - 2);
|
facing = Direction.byId(code % 16);
|
||||||
if((facing == Direction.UP) || (facing == Direction.DOWN))
|
if((facing == Direction.UP) || (facing == Direction.DOWN))
|
||||||
{
|
{
|
||||||
facing = placer.getHorizontalFacing().getOpposite();
|
facing = placer.getHorizontalFacing().getOpposite();
|
||||||
}
|
}
|
||||||
ComparatorMode m = (hitX > 10)?ComparatorMode.SUBTRACT: ComparatorMode.COMPARE;
|
ComparatorMode m = (hitX >= 16)?ComparatorMode.SUBTRACT: ComparatorMode.COMPARE;
|
||||||
return block.getDefaultState()
|
return block.getDefaultState()
|
||||||
.with(HorizontalFacingBlock.FACING, facing)
|
.with(HorizontalFacingBlock.FACING, facing)
|
||||||
.with(ComparatorBlock.POWERED, Boolean.FALSE)
|
.with(ComparatorBlock.POWERED, Boolean.FALSE)
|
||||||
@@ -88,20 +121,20 @@ public class BlockRotator
|
|||||||
else if (block instanceof DispenserBlock)
|
else if (block instanceof DispenserBlock)
|
||||||
{
|
{
|
||||||
return block.getDefaultState()
|
return block.getDefaultState()
|
||||||
.with(DispenserBlock.FACING, Direction.byId((int)hitX - 2))
|
.with(DispenserBlock.FACING, Direction.byId(code))
|
||||||
.with(DispenserBlock.TRIGGERED, Boolean.FALSE);
|
.with(DispenserBlock.TRIGGERED, Boolean.FALSE);
|
||||||
}
|
}
|
||||||
else if (block instanceof PistonBlock)
|
else if (block instanceof PistonBlock)
|
||||||
{
|
{
|
||||||
return block.getDefaultState()
|
return block.getDefaultState()
|
||||||
.with(FacingBlock.FACING, Direction.byId((int)hitX - 2) )
|
.with(FacingBlock.FACING, Direction.byId(code))
|
||||||
.with(PistonBlock.EXTENDED, Boolean.FALSE);
|
.with(PistonBlock.EXTENDED, Boolean.FALSE);
|
||||||
}
|
}
|
||||||
else if (block instanceof StairsBlock)
|
else if (block instanceof StairsBlock)
|
||||||
{
|
{
|
||||||
return block.getPlacementState(context)//worldIn, pos, facing, hitX, hitY, hitZ, meta, placer)
|
return block.getPlacementState(context)//worldIn, pos, facing, hitX, hitY, hitZ, meta, placer)
|
||||||
.with(StairsBlock.FACING, Direction.byId((((int)hitX) % 10) - 2))
|
.with(StairsBlock.FACING, Direction.byId(code % 16))
|
||||||
.with(StairsBlock.HALF, ( hitX > 10)?BlockHalf.TOP : BlockHalf.BOTTOM);
|
.with(StairsBlock.HALF, ( hitX >= 16)?BlockHalf.TOP : BlockHalf.BOTTOM);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user