Search in sources :

Example 1 with Lock

use of buildcraft.core.marker.volume.Lock in project BuildCraft by BuildCraft.

the class TileArchitectTable method onPlacedBy.

@Override
public void onPlacedBy(EntityLivingBase placer, ItemStack stack) {
    super.onPlacedBy(placer, stack);
    if (placer.world.isRemote) {
        return;
    }
    WorldSavedDataVolumeBoxes volumeBoxes = WorldSavedDataVolumeBoxes.get(world);
    IBlockState blockState = world.getBlockState(pos);
    BlockPos offsetPos = pos.offset(blockState.getValue(BlockArchitectTable.PROP_FACING).getOpposite());
    VolumeBox volumeBox = volumeBoxes.getVolumeBoxAt(offsetPos);
    TileEntity tile = world.getTileEntity(offsetPos);
    if (volumeBox != null) {
        box.reset();
        box.setMin(volumeBox.box.min());
        box.setMax(volumeBox.box.max());
        isValid = true;
        volumeBox.locks.add(new Lock(new Lock.Cause.CauseBlock(pos, blockState.getBlock()), new Lock.Target.TargetRemove(), new Lock.Target.TargetResize(), new Lock.Target.TargetUsedByMachine(Lock.Target.TargetUsedByMachine.EnumType.STRIPES_READ)));
        volumeBoxes.markDirty();
        sendNetworkUpdate(NET_BOX);
    } else if (tile instanceof IAreaProvider) {
        IAreaProvider provider = (IAreaProvider) tile;
        box.reset();
        box.setMin(provider.min());
        box.setMax(provider.max());
        markerBox = true;
        isValid = true;
        provider.removeFromWorld();
    } else {
        isValid = false;
        IBlockState state = world.getBlockState(pos);
        state = state.withProperty(BlockArchitectTable.PROP_VALID, Boolean.FALSE);
        world.setBlockState(pos, state);
    }
}
Also used : TileEntity(net.minecraft.tileentity.TileEntity) IAreaProvider(buildcraft.api.core.IAreaProvider) IBlockState(net.minecraft.block.state.IBlockState) VolumeBox(buildcraft.core.marker.volume.VolumeBox) WorldSavedDataVolumeBoxes(buildcraft.core.marker.volume.WorldSavedDataVolumeBoxes) BlockPos(net.minecraft.util.math.BlockPos) Lock(buildcraft.core.marker.volume.Lock)

Example 2 with Lock

use of buildcraft.core.marker.volume.Lock in project BuildCraft by BuildCraft.

the class TileFiller method onPlacedBy.

@Override
public void onPlacedBy(EntityLivingBase placer, ItemStack stack) {
    super.onPlacedBy(placer, stack);
    if (world.isRemote) {
        return;
    }
    IBlockState blockState = world.getBlockState(pos);
    WorldSavedDataVolumeBoxes volumeBoxes = WorldSavedDataVolumeBoxes.get(world);
    BlockPos offsetPos = pos.offset(blockState.getValue(BlockBCBase_Neptune.PROP_FACING).getOpposite());
    VolumeBox volumeBox = volumeBoxes.getVolumeBoxAt(offsetPos);
    TileEntity tile = world.getTileEntity(offsetPos);
    if (volumeBox != null) {
        addon = (AddonFillerPlanner) volumeBox.addons.values().stream().filter(AddonFillerPlanner.class::isInstance).findFirst().orElse(null);
        if (addon != null) {
            volumeBox.locks.add(new Lock(new Lock.Cause.CauseBlock(pos, blockState.getBlock()), new Lock.Target.TargetAddon(addon.getSlot()), new Lock.Target.TargetRemove(), new Lock.Target.TargetResize(), new Lock.Target.TargetUsedByMachine(Lock.Target.TargetUsedByMachine.EnumType.STRIPES_WRITE)));
            volumeBoxes.markDirty();
            addon.updateBuildingInfo();
            markerBox = false;
        } else {
            box.reset();
            box.setMin(volumeBox.box.min());
            box.setMax(volumeBox.box.max());
            volumeBox.locks.add(new Lock(new Lock.Cause.CauseBlock(pos, blockState.getBlock()), new Lock.Target.TargetRemove(), new Lock.Target.TargetResize(), new Lock.Target.TargetUsedByMachine(Lock.Target.TargetUsedByMachine.EnumType.STRIPES_WRITE)));
            volumeBoxes.markDirty();
            markerBox = false;
        }
    } else if (tile instanceof IAreaProvider) {
        IAreaProvider provider = (IAreaProvider) tile;
        box.reset();
        box.setMin(provider.min());
        box.setMax(provider.max());
        provider.removeFromWorld();
    }
    updateBuildingInfo();
    sendNetworkUpdate(NET_RENDER_DATA);
}
Also used : IBlockState(net.minecraft.block.state.IBlockState) VolumeBox(buildcraft.core.marker.volume.VolumeBox) AddonFillerPlanner(buildcraft.builders.addon.AddonFillerPlanner) WorldSavedDataVolumeBoxes(buildcraft.core.marker.volume.WorldSavedDataVolumeBoxes) Lock(buildcraft.core.marker.volume.Lock) TileEntity(net.minecraft.tileentity.TileEntity) IAreaProvider(buildcraft.api.core.IAreaProvider) BlockPos(net.minecraft.util.math.BlockPos)

Aggregations

IAreaProvider (buildcraft.api.core.IAreaProvider)2 Lock (buildcraft.core.marker.volume.Lock)2 VolumeBox (buildcraft.core.marker.volume.VolumeBox)2 WorldSavedDataVolumeBoxes (buildcraft.core.marker.volume.WorldSavedDataVolumeBoxes)2 IBlockState (net.minecraft.block.state.IBlockState)2 TileEntity (net.minecraft.tileentity.TileEntity)2 BlockPos (net.minecraft.util.math.BlockPos)2 AddonFillerPlanner (buildcraft.builders.addon.AddonFillerPlanner)1